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 ); //释放内存
}
}
利用这个语句可以可以查看到串口可以收到数据
但是在上层却发现不了数据不知道为什么?
osal_msg_send( registeredSerialTaskID, (uint8 *)pMsgSerial ); 不应该马上释放osal_msg_deallocate ( (uint8 *)pMsgSerial );
这个应该是registeredSerialTaskID这个任务去释放。