[Raw-OS] raw-os中的消息队列

使者0123   2013-1-28 14:14 楼主
消息队列中的接收消息函数
raw_queue_receive(RAW_QUEUE *p_q, RAW_U32 wait_option, RAW_VOID  **msg)
msg为什么要用二级指针,这样做有什么好处?

回复评论 (4)

如你所见RAW_VOID  **msg, 是一个两级指针,两级指针msg 的意思是,指针的地址,也就是消息的地址,消息本身是一个地址,地址也就是指针,那指针的地址必须是两级指针。

raw_queue_receive 接收到消息后会去填充*msg, 具体的可以参看代码。
建议参看vc 模拟代码里面的queue_test2.c 来加深理解。
点赞  2013-1-28 14:37
现在有这样一种情况:
一个任务中定义了一个变量va,它在该任务的堆栈中。然后通过raw_queue_end_post()将va的地址放到消息队列中。
另一个任务中用raw_queue_receive()来接收消息,并将地址放在msg中。
现在,我对 *msg 赋值的话,它就会改变前一个任务中的 va 的值,也就是改变了另一个任务中堆栈的内容。

我这样说对吗?
点赞  2013-1-28 21:13
可以是这样认为的。但是绝大部分情况来说,接收消息的任务是不会改变消息的,他只是被动去接受。消息一般都是全局变量,或者是堆空间里的,栈空间里的变量需要小心周期会不会消失。

建议你上VC 去写代码测试吧,有时实践一下可能胜过千言万语。
点赞  2013-1-29 10:16
嘎嘎,直接跟作者联系就是不一样
谢谢txj了
点赞  2013-1-29 10:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复