微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 1.4.0协议栈串口异常 可以发送数据无法收到数据

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

时间:10-02 整理:3721RD 点击:

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 );            //释放内存
  }
}

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

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

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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top