云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > ucos程序实验之事件标志组

ucos程序实验之事件标志组

  • 62 次阅读
  • 3 次下载
  • 2026/4/30 3:36:52

Ucos程序实验之事件标志组

对于ucos中源文件的信号量,邮箱以及消息队列、互斥信号量几个概念有简单的认知,但是一直不明白标志组管理是什么问题,所以决定在了解了定时器功能之后,开始分析事件标志组的问题。

翻阅了一些前辈的博客,找到了一篇简单易懂的博文,转载下来,即前一篇转载日志文章。这篇文章的举例很生动,不过,还可以再补充一点,即对于ALL使用全部置位或者全部清零的标志组管理 类似于之前博文的解释,若下载10集连续剧,等10集全部下载完毕后再观看;而对于使用ANY置位或清零管理的,则相当于同时下载两部电影,随便先下载下哪部电影来都可以观看。在此,以两个小程序来解释之: 一、使用OS_FLAG_WAIT_SET_ALL标志,即全部置位再进行下个程序 在ucos_ii.h中有宏定义

#define OS_FLAG_WAIT_SET_ALL #define OS_FLAG_WAIT_SET_ANY 在主程序中定义标志组结构的指针变量 OS_FLAG_GRP

*Sem_F

2u 3u

在主程序中初始化ucos后创建事件标志组: Sem_F = OSFlagCreate(0,&err); 第一个任务中申请事件标志

void MainTask(void *pdata) //Main Task create taks0 and task1 {

#if OS_CRITICAL_METHOD == 3 status register */

#endif

OS_ENTER_CRITICAL();

Timer0Init();

//initial timer0 for ucos time tick //initial interrupt prio or enable or

OS_CPU_SR cpu_sr;

/* Allocate storage for CPU

ISRInit(); disable

OS_EXIT_CRITICAL();

OSPrintfInit();

//use task to print massage to Uart

OSStatInit();

while(1) {

OSFlagPend(Sem_F,(OS_FLAGS)7,OS_FLAG_WAIT_SET_ALL,0,&err);

OSTaskCreate (Task0,(void *)0, &Task0Stk[Task0StkLengh - 1], Task0Prio);

OSTaskCreate (Task1,(void *)0, &Task1Stk[Task1StkLengh - 1], Task1Prio);

OSTaskCreate (Task2,(void *)0, &Task2Stk[Task2StkLengh - 1], Task2Prio);

//7表示0、1、2位都置1,ALL参数表示全部,0参数表示永不超时 }

在新创建的三个任务中分别对0、1、2置位 void Task0(void *pdata) {

while (1) {

OSTimeDly(OS_TICKS_PER_SEC*10);

}

OSPrintf(\开始看片!\\n\

OSTimeDly(OS_TICKS_PER_SEC*20);

}

}

OSPrintf(\下载完第一集\\n\

OSFlagPost(Sem_F,(OS_FLAGS)1,OS_FLAG_SET,&err); OSTaskDel(OS_PRIO_SELF);

void Task1(void *pdata) { }

void Task2(void *pdata) {

while (1) { } }

INT8U err; pdata = pdata;

if(user_task1_firstboot == 1) {

// RTC初始化 Rtc_Init();

user_task1_firstboot = 0;

OSTimeDly(OS_TICKS_PER_SEC*7);

OSFlagPost(Sem_F,(OS_FLAGS)2,OS_FLAG_SET,&err); OSPrintf(\下载完第二集\\n\OSTaskDel(OS_PRIO_SELF);

}

pdata = pdata;

if(user_task2_firstboot == 1) {

//LCD 初始化 Lcd_Display();

}

user_task2_firstboot = 0;

while(1) { }

OSPrintf(\下载完第三集\\n\

OSFlagPost(Sem_F,(OS_FLAGS)4,OS_FLAG_SET,&err); OSTaskDel(OS_PRIO_SELF);

编译后在串口输出如下:

二、使用OS_FLAG_WAIT_SET_ANY标志,即下载一个即可继续 只需要将开始任务中的

OSFlagPend(Sem_F,(OS_FLAGS)7,OS_FLAG_WAIT_SET_ALL,0,&err);参数换成 OS_FLAG_WAIT_SET_ANY即可。

搜索更多关于: ucos程序实验之事件标志组 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

Ucos程序实验之事件标志组 对于ucos中源文件的信号量,邮箱以及消息队列、互斥信号量几个概念有简单的认知,但是一直不明白标志组管理是什么问题,所以决定在了解了定时器功能之后,开始分析事件标志组的问题。 翻阅了一些前辈的博客,找到了一篇简单易懂的博文,转载下来,即前一篇转载日志文章。这篇文章的举例很生动,不过,还可以再补充一点,即对于ALL使用全部置位或者全部清零的标志组管理 类似于之前博文的解释,若下载10集连续剧,等10集全部下载完毕后再观看;而对于使用ANY置位或清零管理的,则相当于同时下载两部电影,随便先下载下哪部电影来都可以观看。在此,以两个小程序来解释之: 一、使用OS_FLAG_WAIT_SET_ALL标志,即全部置位再进行下个程序 在ucos_ii.h中有宏定义 #define OS_FLAG_WAIT_SET_ALL #

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com