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:
嗯,好的我晚些时候测试下,现在在忙其他事情。测出结果了。回复你