Ucosii消息邮箱使用
来源:互联网 发布:创维酷开电视直播软件 编辑:程序博客网 时间:2024/05/02 00:17
//设置任务优先级
#define LED_TASK_Prio 6
#define LED1_TASK_Prio 5
用到的UCOSII函数
消息邮箱创建函数:
OS_EVENT *OSMboxCreate (void *msg)
请求消息邮箱函数:
void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
向邮箱发送消息函数:
INT8U OSMboxPost (OS_EVENT *pevent, void *msg)//向等待任务表中高优先级的任务发送消息
广播邮箱消息函数:
INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)//向等待任务表中所有任务发送消息
按键扫描任务中,如果KEY0被按下,那么将向消息邮箱Str_Box发送消息1,
i=1;
OSMboxPost(Str_Box,&i); //发送消息1
如果KEY1被按下,那么将发送消息2,
i=2;
OSMboxPost(Str_Box,&i); //发送消息2
如果KEY2(WK_UP)被按下,将向所有等待任务表中所有任务发送消息3,
i=3;
OSMboxPostOpt(Str_Box,&i,OS_POST_OPT_BROADCAST); //向所有任务广播消息3
实验现象:
我们可以看到,如果我们按下KEY0,因为TaskLed1的优先级别高于TaskLed,所以当两个任务都在等待的时候,只有TaskLed1可以收到消息1,所以两个LED都不反转。
如果按下KEY1,那么TaskLed1收到消息2,状态反转。
如果按下KEY2,那么TaskLed1和TaskLed都会收到消息,这个时候两个LED状态都会反转。
OSMboxPostOpt()和OSMboxPost()的区别在于前者是广播消息,所有等待任务都可以收到,后者只会高优先级的任务收到。
下面给出消息邮箱的使用例程
- OS_EVENT *Str_Box;
- Str_Box = OSMboxCreate ((void*)0); //创建消息邮箱
- //任务1
- //控制DS0的亮灭.
- void TaskLed(voidvoid *pdata)
- { u8 result=0;
- while(1)
- { result= *((u8 *)OSMboxPend(Str_Box,0,&err)); //请求消息邮箱
- if(result ==1||result ==3){
- LED0=!LED0;
- }
- OSTimeDlyHMSM(0,0,0,200);
- }
- }
- //任务3
- //按键检测
- void TaskKey(voidvoid *pdata)
- {
- u8 key=0,i=0;
- while(1){
- key=KEY_Scan();
- if(key==1)
- {
- i=1;
- OSMboxPost(Str_Box,&i); //发送消息1 //注意:消息邮箱的要发送的数据变量可以是临时变量!!!因为这个临时变量在任务生存期间一直存在
- }
- else if(key==2)
- {
- i=2;
- OSMboxPost(Str_Box,&i); //发送消息2 //注意:消息邮箱的要发送的数据变量可以是临时变量!!!
- }
- else if(key==3)
- {
- i=3;
- OSMboxPostOpt(Str_Box,&i,OS_POST_OPT_BROADCAST); //向所有任务广播消息3 //注意:消息邮箱的要发送的数据变量可以是临时变量!!!
- }
- OSTimeDlyHMSM(0,0,0,20);
- }
- }
- Ucosii消息邮箱使用
- ucosii 消息邮箱使用!!
- Ucosii消息邮箱使用
- UCOSII 消息邮箱 消息队列
- STM32上使用UCOSII--信号量和邮箱
- ucosii---------信号量&邮箱
- 关于ucosii的邮箱
- ucosII 关于事件控制块,信号量,邮箱,消息队列,自己的理解。
- STM32上使用UCOSII--消息队列和信号量集
- UcosII 的信号量和邮箱
- CoOS使用教程——消息邮箱
- uC/OS的消息邮箱使用经验
- ucosII消息队列创建函数
- ucosii 消息队列的应用
- ucosII 消息队列 消息长度计算
- vc上使用ucosii
- 学习使用ucosii
- UCOSII互斥锁的使用
- 读库小册子【一张照片】
- Eclipse中编写jni c文件中报错Type could not be resolved
- ANSI,UNICODE 等编码
- 链式前向星
- Makefile--如何编译库静态库
- Ucosii消息邮箱使用
- 前端必读:浏览器内部工作原理
- Traffic Server可以播放视频返回ERR_CLIENT_ABORT
- IDEA遇到Unsupported major.minor version 52.0问题
- java基础知识0717
- dlopen failed: cannot locate symbol "__aeabi_memclr4
- 用python脚本获取CPU的大小端模式
- nyoj305
- NdkDemo开发从环境搭建到入门提高