TI中文支持网
TI专业的中文技术问题搜集分享网站

1.4.0协议栈串口异常 可以发送数据无法收到数据

ti蓝牙协议栈1.4.0   串口回调函数如下

#define SERIAL_MSG                0xC1 

static void SerialCallback( uint8 port, uint8 event )

{  mtOSALSerialData_t  *pMsgSerial;  uint8 flag=0,num=0;   //flag是判断有没有收到数据,j记录数据长度 
  uint8 buf[128];       //串口buffer最大缓冲默认是128,我们这里用128.  (void)event;           // Intentionally unreferenced parameter    for(uint16 i=0;i<128;i++)
  {
    buf[i] = 0;
  }
   while (Hal_UART_RxBufLen(port)) //检测串口数据是否接收完成  {    HalUARTRead (port,&buf[num], 1);   //把数据接收放到buf中          num++;    flag=1;                            //已经从串口接收到信息       }
   HalUARTWrite(0,buf,12 );
   if(flag==1)
  { /* Allocate memory for the data */    //分配内存空间,为机构体内容+数据内容+1个记录长度的数据    pMsgSerial = (mtOSALSerialData_t *)osal_msg_allocate( sizeof                                                            ( mtOSALSerialData_t )+num+1);       pMsgSerial->hdr.event = SERIAL_MSG;        // 事件号用SERIAL_MSG,需要添加
    pMsgSerial->msg = (uint8*)(pMsgSerial+1);  // 把数据定位到结构体数据部分       pMsgSerial->msg [0]= num;         //给上层的数据第一个是长度    for(uint8 i=0;i<num;i++)                //从第二个开始记录数据        pMsgSerial->msg[i+1]= buf[i];         osal_msg_send( registeredSerialTaskID, (uint8 *)pMsgSerial );  //登记任务,发往上层    /* deallocate the msg */    osal_msg_deallocate ( (uint8 *)pMsgSerial );            //释放内存
  }
}

利用这个语句可以可以查看到串口可以收到数据

但是在上层却发现不了数据不知道为什么?

Yue TANG:

osal_msg_send( registeredSerialTaskID, (uint8 *)pMsgSerial ); 不应该马上释放osal_msg_deallocate ( (uint8 *)pMsgSerial ); 

这个应该是registeredSerialTaskID这个任务去释放。

赞(0)
未经允许不得转载:TI中文支持网 » 1.4.0协议栈串口异常 可以发送数据无法收到数据
分享到: 更多 (0)