关于消息邮箱发送数组数据问题请教
使用RTX系统,有个任务是传感器数据采集,有个任务是GUI,我想把采集到传感器数据整理成一个数组,然后发送给GUI任务显示,这个数组有32个字节。然后参考了<V6-414_RTX实验_消息邮箱>例子,这个例子只是传了一个数据,RTX传数据实质是传了数据的地址,现在改写了程序,数据的发送改了下,只是在V6上做测试/*
*********************************************************************************************************
* 函 数 名: AppTaskUserIF
* 功能说明: 按键消息处理
* 形 参: 无
* 返 回 值: 无
* 优 先 级: 1(数值越小优先级越低,这个跟uCOS相反)
*********************************************************************************************************
*/
__task void AppTaskUserIF(void)
{
uint8_t ucMsg={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 += 1;
ucMsg += 2;
/* 向消息邮箱发数据,如果消息邮箱满了,等待100个时钟节拍 */
if(os_mbx_send (&mailbox, &ucMsg, 100) != OS_R_OK)
{
/* 发送失败,即使等待了100个时钟节拍 */
printf("K2键按下,向消息邮箱发送数据失败,即使等待了100个时钟节拍\r\n");
}
else
{
/* 发送成功 */
printf("K2键按下,向消息邮箱发送数据成功ucMsg = %d ucMsg = %d\r\n",ucMsg,ucMsg);
}
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 = %d\r\n", *pMsg);
break;
/* 超时 */
case OS_R_TMO:
bsp_LedToggle(1);
bsp_LedToggle(4);
break;
/* 其他值不处理 */
default:
break;
}
}
}
接收到后,pMsg是第1个,pMsg是第2个。 eric2013 发表于 2019-3-6 12:28
接收到后,pMsg是第1个,pMsg是第2个。
嗯感谢。然后再问个疑问
/* 声明一个支持1个消息的消息邮箱 */
os_mbx_declare (mailbox,1);
然后初始化的时候
static void AppObjCreate (void)
{
/* 创建消息邮箱 */
os_mbx_init (&mailbox, sizeof(mailbox));
}
sizeof(mailbox)仿真下来看是20字节,然后测试下来确实可以发送20个字节,那请问下为何mailbox为什么是占用20字节,这个是怎么计算的?
呼哈嚯嚯 发表于 2019-3-6 15:27
嗯感谢。然后再问个疑问
/* 声明一个支持1个消息的消息邮箱 */
os_mbx_declare (mailbox,1);
#define os_mbx_declare(
name, /* 消息邮箱名 */
cnt ) /* 消息个数 */
U32 name eric2013 发表于 2019-3-6 15:37
#define os_mbx_declare(
name, /* 消息邮箱名 */
cn ...
还是算不出是20,我按照我的需求直接写大小了。然后问下发送数组uint8_t ucMsg={0x00,0x00};这个是局部,任务切换时这个数组是不是还在?然后另外个任务还能正确的取得到是吗? 呼哈嚯嚯 发表于 2019-3-6 16:08
还是算不出是20,我按照我的需求直接写大小了。然后问下发送数组uint8_t ucMsg={0x00,0x00};这个是局 ...
U32 name是多少字节,你算下 eric2013 发表于 2019-3-6 16:12
U32 name是多少字节,你算下
哦 U32占用4个字节,然后共5个元素,一起占用20字节,知道了。然后问下发送数组uint8_t ucMsg={0x00,0x00};这个是局部,任务切换时这个数组是不是还在?然后另外个任务还能正确的取得到是吗? rtx下使用printf要注意多线程的问题
页:
[1]