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

关于zigbee ha1.2协议栈(路由设备)串口接收有时会存在延迟读取串口接收到的数据的问题。

这个问题是在调试路由设备出现的。(电脑串口助手测试的,串口波特率2400)
1, zigbee ha1.2协议栈串口接收有时会延迟一段时间(大概9秒左右,设备为路由)uartConfig.callBackFunc指向的函数才开始读取串口接收到的数据,不管我用DMA或者ISR工作方式,都有这个问题。这是怎么回事? 。
2,串口工作于DMA方式时,有时发送数据也有延迟(十几秒延迟,时间不定);串口工作于ISR方式时,没有延迟。
       我个人猜想是不是由于串口任务优先级很低,要等待其他事件处理完才会处理串口事件。但是延迟也不至于这么长吧?或者如我猜想的一样,有没改进的方案。
YiKai Chen:

你是用什麼芯片?

user5029254:

回复 YiKai Chen:

cc2530

YiKai Chen:

回复 user5029254:

你的路由設備会很忙嗎?比如說很多封包会透過它転發

user5029254:

回复 YiKai Chen:

加入网络后只有30秒的定时心跳包发送

YiKai Chen:

uartConfig.callBackFunc指向的函数可以貼出來看一下?

user5029254:

回复 YiKai Chen:

void MT_UartProcessZToolData ( uint8 port, uint8 event ){ OSALSerialData_t *pMsg; uint8 flag=0; //flag 是判断有没有收到数据,j 记录数据长度 uint8 DataSize=0; //数据大小 uint8 buf[MT_UART_DEFAULT_MAX_RX_BUFF]; //串口buffer 最大缓冲默认是256,我们这里用256. (void)event; // Intentionally unreferenced parameter // if (event & HAL_UART_RX_TIMEOUT)// {

while (Hal_UART_RxBufLen(port)) //检测串口数据是否接收完成 {

HalUARTRead (port,&buf[DataSize], 1); //把数据接收放到 buf中 DataSize++; //记录字符数 flag=1; //已经从串口接收到信息

}

if(flag==1) //已经从串口接收到信息 { /* Allocate memory for the data */ //分配内存空间,为机构体内容+数据内容+1 个记录长度的数据 pMsg = (OSALSerialData_t *)osal_msg_allocate( sizeof ( OSALSerialData_t )+DataSize+1); pMsg->hdr.event = SERIAL_DATA_MSG; //事件号用原来的CMD_SERIAL_MSG pMsg->msg = (uint8*)(pMsg+1); // 把数据定位到结构体数据部分 pMsg->msg [0]= DataSize; //给上层的数据第一个是长度 for(uint16 i=0;i<DataSize;i++) //从第三个开始记录数据 pMsg->msg [i+1]= buf[i]; osal_msg_send( App_TaskID, (byte *)pMsg ); //登记任务,发往上层 }// }// /* deallocate the msg */// osal_msg_deallocate ( (uint8 *)pMsg ); //释放内存 }

应该不是这个问题,我仿真调试过。断点打在这个函数里,电脑发给该设备发送数据,有时会等几秒才函数。接收到的数据是对的。

YiKai Chen:

回复 user5029254:

你用原始的路由例程也会有同樣的問題?

user5029254:

回复 YiKai Chen:

没有试,我试下

YiKai Chen:

回复 user5029254:

我用TI EVB CC2530DK測試SampleLight 路由都是正常的

user5029254:

回复 YiKai Chen:

嗯,好的我晚些时候测试下,现在在忙其他事情。测出结果了。回复你

赞(0)
未经允许不得转载:TI中文支持网 » 关于zigbee ha1.2协议栈(路由设备)串口接收有时会存在延迟读取串口接收到的数据的问题。
分享到: 更多 (0)