自认为还算比较理解代码的机器级(汇编)表示,但这个把我搞的有点小晕.
首先,一个消息邮箱Post的消息肯定可以是全局或者静态变量,这是肯定没有问题的.
在周航慈老师的书中有一处关于如何存放消息邮箱的讲解. 1. 消息邮箱的消息可以是任务的局部变量, 被同步的任务可以正确的接收. 大致代码如下: void SendTask (void *p_arg) { INT8U Message; Message = 0xFF; while (OS_TRUE) { //将局部变量放入消息邮箱发送 OSMboxPost(Mbox, (void *)(&Message)); OSTimeDly(10); } }
void RecTask (void *p_arg) { INT8U msg
while(OS_TRUE) { msg = *(INT8U *)OSMboxPend(Mbox, 0, &err); //任务工作处理 } } 2. 消息邮箱的消息不可以是ISR的局部变量, 被同步的任务不能正确的接收. 原因是由于ISR结束后,存在栈中的局部变量消失了. 大致代码如下: void ISR (void) { INT8U Message; Message = 8; //发送消息邮箱同步任务 OSMboxPost(Mbox, (void *)(&Message)); }
void RecTask (void *p_arg) { INT8U msg
while(OS_TRUE) { msg = *(INT8U *)OSMboxPend(Mbox, 0, &err); //任务工作处理 } }
先不说我的测试结果,大家讨论一下以上结论是否正确?. 或者有没有补充的一些内容?
|