![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
ucos-ii消息队列
创建了两个任务task1和task2。同时创建消息队列,在task1中发送消息给task2,在task1中发送一个消息,OSQPostFront(g_pOS_MsgQ_T...
创建了两个任务task1 和 task2。同时创建消息队列,在task1中发送消息给task2,在task1中发送一个消息,OSQPostFront(g_pOS_MsgQ_Task2,(void *));
下面是task2接收接收消息的处理。
void task2(void *pvData)
{
void *pMsgVoid;
INT8U ucOSError;
while(1)
{
pMsgVoid = OSQPend(g_pOS_MsgQ_Task1,m_Com_usTaskTimeOutTicks, &ucOSError);
}
}
我现在的问题是,我在发送消息的时候,发送自定义的一个结构体
typedef struct UCOS_MSG{
INT32U ulMsgID; //消息ID
INT8U aucData[4]; //消息内容
}STRU_MSG
怎么将STRU_MSG * pMsg发送出去,并在任务task2里获得pMsg的值。
接收消息任务
void comTask(void *pvData)
{
INT8U ucOSError;
INT32U ulMsgID;
void *pMsgVoid;
char ucRevMsg[20];
pvData = pvData;
while(1)
{
pMsgVoid = OSQPend(g_pOS_MsgQ_Com,m_Com_usTaskTimeOutTicks, &ucOSError);//2005-08-22 返回消息指针
if(pMsgVoid)
{
uart0SendStr("receive Msg \n");
ulMsgID = *(INT32U *)pMsgVoid;
switch(ucOSError)
{
case OS_NO_ERR:
{
uart0SendStr("receive Msg no error \n");
sprintf(ucRevMsg,"%d\n",ulMsgID);
uart0SendStr(ucRevMsg); // 串口显示 * if(ulMsgID==13)
{
uart0SendStr("receive Msg 13\n");
}
else
{
uart0SendStr("receive other Msg \n");
}
}
break;
case OS_TIMEOUT:
break;
case OS_ERR_EVENT_TYPE:
case OS_ERR_PEND_ISR:
default:
break;
}
uart0SendStr("exit Msg \n");
}
}
} 展开
下面是task2接收接收消息的处理。
void task2(void *pvData)
{
void *pMsgVoid;
INT8U ucOSError;
while(1)
{
pMsgVoid = OSQPend(g_pOS_MsgQ_Task1,m_Com_usTaskTimeOutTicks, &ucOSError);
}
}
我现在的问题是,我在发送消息的时候,发送自定义的一个结构体
typedef struct UCOS_MSG{
INT32U ulMsgID; //消息ID
INT8U aucData[4]; //消息内容
}STRU_MSG
怎么将STRU_MSG * pMsg发送出去,并在任务task2里获得pMsg的值。
接收消息任务
void comTask(void *pvData)
{
INT8U ucOSError;
INT32U ulMsgID;
void *pMsgVoid;
char ucRevMsg[20];
pvData = pvData;
while(1)
{
pMsgVoid = OSQPend(g_pOS_MsgQ_Com,m_Com_usTaskTimeOutTicks, &ucOSError);//2005-08-22 返回消息指针
if(pMsgVoid)
{
uart0SendStr("receive Msg \n");
ulMsgID = *(INT32U *)pMsgVoid;
switch(ucOSError)
{
case OS_NO_ERR:
{
uart0SendStr("receive Msg no error \n");
sprintf(ucRevMsg,"%d\n",ulMsgID);
uart0SendStr(ucRevMsg); // 串口显示 * if(ulMsgID==13)
{
uart0SendStr("receive Msg 13\n");
}
else
{
uart0SendStr("receive other Msg \n");
}
}
break;
case OS_TIMEOUT:
break;
case OS_ERR_EVENT_TYPE:
case OS_ERR_PEND_ISR:
default:
break;
}
uart0SendStr("exit Msg \n");
}
}
} 展开
展开全部
通过指针获得该结构体,通过“地址”发送结构体
1、发送消息如下:
addr = & pMsg;
OSQPost(xxxxxxxxxxxx, addr);
其中,addr——INT32U类型变量;pMsg——是你的结构体变量;xxxxxxxxxx——你的消息队列
2、接收消息方法如下:
STRU_MSG * msgRcvd; // 创建一个结构体类型的指针
msgRcvd = (STRU_MSG *)OSQPend(xxxxxxxxxxxx,m_Com_usTaskTimeOutTicks,&ucOSError);
//强制转换成结构体类型
然后,*msgRcvd 就是刚才过来的结构体了
1、发送消息如下:
addr = & pMsg;
OSQPost(xxxxxxxxxxxx, addr);
其中,addr——INT32U类型变量;pMsg——是你的结构体变量;xxxxxxxxxx——你的消息队列
2、接收消息方法如下:
STRU_MSG * msgRcvd; // 创建一个结构体类型的指针
msgRcvd = (STRU_MSG *)OSQPend(xxxxxxxxxxxx,m_Com_usTaskTimeOutTicks,&ucOSError);
//强制转换成结构体类型
然后,*msgRcvd 就是刚才过来的结构体了
![](https://ecmc.bdimg.com/public03/b4cb859ca634443212c22993b0c87088.png)
2023-04-23 广告
蜚语安全是一家专注于提供软件供应链安全创新解决方案的网络安全企业,成立于2019年。蜚语安全孵化自上海知名大学计算机系,创始团队由4名博士组成,拥有十数年的前沿安全研究和一线安全业务经验。蜚语安全扎根左移安全开发赛道,深耕企业安全服务市场,...
点击进入详情页
本回答由蜚语科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询