消息队列和消息邮箱的不同就于消息队列可以认为是消息邮箱多次的发送,消息按FIFO或LIFO的方式存储而邮箱的话就这一次的发送会将上一次的发送覆盖掉,不具备FIFO的特性
OS_EVENT *ReceiveData_Q; //保存事件控制块的指针
void * MboxQ_Table[10];
//用来排队的队列
INT8U ERR;
u8Qtest[1]={55};
u8 Qtest1[1]={66};
u8 * num;
ReceiveData_Q = OSQCreate(&MboxQ_Table[0],10);
OSQPost(ReceiveData_Q,Qtest);
OSQPost(ReceiveData_Q,Qtest1);
num = OSQPend(ReceiveData_Q,0,&ERR);
num接收到的是Qtest1【】和2的地址,数组的地址);且接收完后若没有消息队列了就堵塞。
当你将要入队列的是数值,而不是地址,使用强制转换OSQPost(ReceiveData_Q,(u8*)test[0]);此时num接收到的是test[1]数组的值。
想想如果从串口读数据,要用队列做缓冲池,如果传数组地址,后来接收的数往数组写,那边得到的是数组的地址,那么以前接收到的数就被现在从串口接收到的数取代了。
管理员在2009年8月13日编辑了该文章文章。
阅读(4583) | 评论(0) | 转发(0) |