ucos程序实验之事件标志组

2026/1/27 19:35:27

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程序实验之事件标志组.doc 将本文的Word文档下载到电脑
搜索更多关于: ucos程序实验之事件标志组 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219