今天开始试着使用ucossii中的消息队列
首先定义一些基本的变量
//Message Queue
#define OSQ_MSG_NUM 5
extern OS_EVENT *DATA_Msg;
extern void *MsgGrp[OSQ_MSG_NUM];
然后创建一个消息队列OS_EVENT指针
DATA_Msg=OSQCreate(&MsgGrp[0],OSQ_MSG_NUM);//Create a message queue
然后创建两个Task,一个用于发送消息,一个用于接收消息
发送消息的Task代码:其中OSQQuery可以检查p_q_data的成员便来确定消息没有满,或者不管不顾直接发送,这样如果接收端受阻会造成消息丢失
u8 test_a[6]={1,2,3,4,5,6};
OSQQuery(DATA_Msg, &p_q_data);
OSQPost(DATA_Msg, (void *)&test_a);//send
接受端获取一个Message数据并解析其中的内容
msg=(u8 *)OSQPend(DATA_Msg,0,&err);
Log(0x2222,LOG_NOTICE,(u8*)&msg[5],1);
背后原理还需要一些时间来深入挖掘整理