上位机用串口给协调器数据,刚上电的时候一切正常,过一段时间后就出现协调器只能接收,不能发送的问题了。
抓包工具抓到GTS reqeust(rx only),如图所示,不知道和这个有没有关系。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
没有一直发送数据。整个网络目前是1个协调器+15个路由。然后协议栈每15s发一次NWK Link Status,除了这个,没有其他的主动通讯。
目前就是协调器每过几小时后就不能发送数据了,接收数据是没问题的。
另外,每次不能发送数据的同时,协调器自身的NWK Link Status也不发送了。
串口使用的是网蜂的方案,流程如下:
在自己的任务里条用MT_UartInit();和 MT_UartRegisterTaskID(task_id);
然后重写了函数 MT_UartProcessZToolData
void MT_UartProcessZToolData ( uint8 port, uint8 event )
{
uint8 flag=0,i,j=0; //flag是判断有没有收到数据,j记录数据长度
uint8 buf[128]; //串口buffer最大缓冲默认是128,我们这里用128.
(void)event; // Intentionally unreferenced parameter
while ((Hal_UART_RxBufLen(port))&&(j<128)) //检测串口数据是否接收完成
{
HalUARTRead (port,&buf[j], 1); //把数据接收放到buf中
j++; //记录字符数
flag=1; //已经从串口接收到信息
}
if(flag==1) //已经从串口接收到信息
{ /* Allocate memory for the data */
//分配内存空间,为机构体内容+数据内容+1个记录长度的数据
pMsg = (mtOSALSerialData_t *)osal_msg_allocate( sizeof
( mtOSALSerialData_t )+j+1);
//事件号用原来的CMD_SERIAL_MSG
pMsg->hdr.event = CMD_SERIAL_MSG;
pMsg->msg = (uint8*)(pMsg+1); // 把数据定位到结构体数据部分
pMsg->msg [0]= j; //给上层的数据第一个是长度
for(i=0;i<j;i++) //从第二个开始记录数据
pMsg->msg [i+1]= buf[i];
osal_msg_send( App_TaskID, (byte *)pMsg ); //登记任务,发往上层
/* deallocate the msg */
osal_msg_deallocate ( (uint8 *)pMsg ); //释放内存
}
}