SDLu的uCOS II 入门学习笔记(4)消息邮箱

SDLu的uCOS II 入门学习笔记(4)消息邮箱

ID:40714732

大小:263.00 KB

页数:4页

时间:2019-08-06

SDLu的uCOS II 入门学习笔记(4)消息邮箱_第1页
SDLu的uCOS II 入门学习笔记(4)消息邮箱_第2页
SDLu的uCOS II 入门学习笔记(4)消息邮箱_第3页
SDLu的uCOS II 入门学习笔记(4)消息邮箱_第4页
资源描述:

《SDLu的uCOS II 入门学习笔记(4)消息邮箱》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、S.D.Lu的uC/OSII入门学习笔记(4):消息邮箱在多任务操作系统中,常常需要在任务与任务之间通过传递一个数据(这种数据叫做“消息”)的方式来进行通信。为了达到这个目的,可以在内存中创建一个存储空间作为该数据的缓冲区。如果把这个缓冲区叫做消息缓冲区,那么在任务之间传递数据(消息)的一个最简单的方法就是传递消息缓冲区的指针。因此,用来传递消息缓冲区指针的数据结构就叫做消息邮箱。——摘自任哲老师的书(第2版)第五章5.1节。本篇实验在上一篇的基础上进行,仍然是运行两个任务,每个任务控制一个LED的亮灭

2、。但是这两个任务使用了消息邮箱进行通信。任务Task_LED2通过消息邮箱发送消息,Task_LED根据接收到的消息内容选择执行不同的代码。例4-1将app.c中的内容改为如下:(红框标识了消息邮箱的相关操作)4/4编译下载,运行后LED2以固定的频率闪烁。LED2闪烁10次后,LED1闪一下,点亮时间很短;LED2继续闪烁10次后,LED1再闪一下,点亮时间比第一次稍长;LED2再闪烁10次后,LED1再闪一下,点亮时间比前两次都长。三种点亮时间反复循环。代码分析:程序第5、6行定义了消息和消息邮箱,

3、但是定义时消息邮箱为空,并没有指向消息。简单地说,消息邮箱就是指针,就是消息存储的地址。Task_LED的while(1)中有一个if/else语句,用于请求消息。注意,本例中else语句中的延时函数是必须的,否则当接受不到消息时Task_LED会长时间占用CPU导致程序无法切换到Task_LED2。Task_LED2中发送消息的语句(msg_p=&msg;)事实上就是将消息的地址赋给了消息邮箱。Task_LED中请求消息的操作,就是检测邮箱是否为空,如果不为空,说明有其中有消息,然后把消息读出来,并把

4、邮箱清空以便下次传递消息。例4-1用一个指针和一个变量演示了两个任务之间使用消息邮箱传递消息的过程。和信号量一样,在μC/OSII中也使用事件控制块来描述一个消息邮箱,这样使用起来会更加方便。例4-2将app.c中的内容改为如下:(红框标识了消息邮箱的相关操作)4/44/4本例程序编译下载,执行的结果和例4-1类似,只是为了区别而将Task_LED2中的延时函数最后一个参数改成了100,运行时LED2的闪烁频率是例4-1的2倍。在程序中,如果将消息msg定义成数组,或者其他数据结构,就可以在任务中传递多

5、个数据了。应该注意,因为本例用到了消息邮箱,所以在os_cfg.h配置文件中必须将OS_SEM_EN置1,如下图:OSMboxPend()函数的原型如下:当timeout取值为0时,表示一直等待,直到接收到消息。OSMboxPost()函数的原型如下:深入了解消息邮箱的相关知识,请参考任哲《嵌入式实时操作系统μCOS-II原理及应用》(第2版)第五章5.1、5.5节关于消息邮箱的内容。作者:S.D.Lu深圳2014-5-294/4

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。