| 
在线时间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) 使用全局变量,则可以实现。
 
 各位,请予指正!
 谢谢!
 
 
 
 | 
 |