|
使用RTX系统,有个任务是传感器数据采集,有个任务是GUI,我想把采集到传感器数据整理成一个数组,然后发送给GUI任务显示,这个数组有32个字节。然后参考了<V6-414_RTX实验_消息邮箱>例子,这个例子只是传了一个数据,RTX传数据实质是传了数据的地址,现在改写了程序,数据的发送改了下,只是在V6上做测试
/*
*********************************************************************************************************
* 函 数 名: AppTaskUserIF
* 功能说明: 按键消息处理
* 形 参: 无
* 返 回 值: 无
* 优 先 级: 1 (数值越小优先级越低,这个跟uCOS相反)
*********************************************************************************************************
*/
__task void AppTaskUserIF(void)
{
uint8_t ucMsg[2]={0x00,0x00};
uint8_t ucKeyCode;
while(1)
{
ucKeyCode = bsp_GetKey();
if (ucKeyCode != KEY_NONE)
{
switch (ucKeyCode)
{
/* K1键按下,打印调试说明 */
case KEY_DOWN_K1:
printf("K1键按下,使用MDK中自带的RTX调试组件,请务必使用MDK4.74版本进行调试\r\n");
break;
/* K2键按下,向消息邮箱发送数据 */
case KEY_DOWN_K2:
ucMsg[0] += 1;
ucMsg[1] += 2;
/* 向消息邮箱发数据,如果消息邮箱满了,等待100个时钟节拍 */
if(os_mbx_send (&mailbox, &ucMsg, 100) != OS_R_OK)
{
/* 发送失败,即使等待了100个时钟节拍 */
printf("K2键按下,向消息邮箱发送数据失败,即使等待了100个时钟节拍\r\n");
}
else
{
/* 发送成功 */
printf("K2键按下,向消息邮箱发送数据成功ucMsg[0] = %d ucMsg[1] = %d\r\n",ucMsg[0],ucMsg[1]);
}
break;
/* 其他的键值不处理 */
default:
break;
}
}
os_dly_wait(20);
}
}
消息的接收,例子的原写法可以收到第一个数据,但是第二个数据不知道怎么写,希望老大指导下
/*
*********************************************************************************************************
* 函 数 名: AppTaskMsgPro
* 功能说明: 消息处理,等待任务AppTaskUserIF发来的消息邮箱数据
* 形 参: 无
* 返 回 值: 无
* 优 先 级: 3
*********************************************************************************************************
*/
__task void AppTaskMsgPro(void)
{
uint8_t *pMsg;
OS_RESULT xResult;
const uint16_t usMaxBlockTime = 200; /* 延迟周期 */
int32_t add;
while(1)
{
xResult = os_mbx_wait(&mailbox, (void *)&pMsg, usMaxBlockTime);
switch (xResult)
{
/* 无需等待接受到消息邮箱数据 */
case OS_R_OK:
printf("无需等待接受到消息邮箱数据,pMsg = %d\r\n", *pMsg);
break;
/* 消息邮箱空,usMaxBlockTime等待时间从消息邮箱内获得数据 */
case OS_R_MBX:
printf("消息邮箱空,usMaxBlockTime等待时间从消息邮箱内获得数据,pMsg[0] = %d\r\n", *pMsg);
break;
/* 超时 */
case OS_R_TMO:
bsp_LedToggle(1);
bsp_LedToggle(4);
break;
/* 其他值不处理 */
default:
break;
}
}
}
|
|