在线时间6 小时
UID3070386
注册时间2015-12-27
NXP金币0
该用户从未签到
注册会员

- 积分
- 59
- 最后登录
- 2017-7-3
|
本帖最后由 LeoZhou34 于 2016-6-12 17:17 编辑
各位好,我刚刚接触uCOS系统,现在有个关于消息邮箱使用的问题,请帮忙!
我使用的NXP M3,尝试使用消息邮箱将串口2接收到的数据传递到串口任务中,进行相关数据解析,但没有成功。现象是:当确定串口2接收到全部数据后,利用消息邮箱将这些数据传递给串口任务,而此时任务中的没有接收到这些传递的数据。主要代码如下:
1、串口2中断服务程序
static void BSP_IntHandlerUART2 (void)
{
CPU_INT08U lsr;
CPU_INT08U iir;
OS_CPU_SR cpu_sr;
OS_ENTER_CRITICAL();
OSIntNesting++;
OS_EXIT_CRITICAL();
iir = BSP_SER_REG_U2_IIR & 0x0F;
while (iir != 1)
{
switch (iir)
{
// other program
case 4:
lsr = BSP_SER_REG_U2_LSR;
BSP_SerRxData = BSP_SER_REG_U2_RBR;
bsp_ser_rx_data (BSP_SerRxData); // 数据检测程序
(void)lsr;
break;
default:
break;
}
iir = BSP_SER_REG_U2_IIR & 0x0F;
}
OSIntExit();
}
2、数据检测程序
void bsp_ser_rx_data (CPU_INT08U rx_data)
{
static CPU_INT08U msg_buff_index=0, msg_buff[9]={0}, msg_buff_len=0;
msg_buff[msg_buff_index] = rx_data;
//... 略去条件判断部分
{
msg_buff_index++;
if (msg_buff_len == msg_buff_index)
{
OSMboxPost(App_SerMbox2, (void *)&msg_buff);
msg_buff_len = 0;
msg_buff_index = 0;
}
else if (msg_buff_len < msg_buff_index)
{
msg_buff_len = 0;
msg_buff_index = 0;
}
}
}
3、串口任务
static void App_TaskCom (void *p_arg)
{
CPU_INT08U err;
CPU_INT08U *box_data;
CPU_INT08U buff[9];
(void)p_arg;
while (DEF_TRUE)
{
box_data = (CPU_INT08U *)OSMboxPend(App_SerMbox2, 0, &err);
buff[0] = box_data[0];
buff[1] = box_data[1];
buff[2] = box_data[2];
buff[3] = box_data[3];
buff[4] = box_data[4];
buff[5] = box_data[5];
buff[6] = box_data[6];
buff[7] = box_data[7];
buff[8] = box_data[8];
buff[9] = box_data[9];
OSTimeDlyHMSM(0, 0, 10, 0);
}
}
注:
1) 在任务中 App_TaskCom中无法获取到串口中断中传递的数据。
2) 使用全局变量,则可以实现。
各位,请予指正!
谢谢!
|
|