问题如题,串口处理函数我改了,改成不需要特定格式就发送到应用层,
void MT_UartProcessZToolData ( uint8 port, uint8 event )
{
uint8 flag = 0, i,j = 0;
uint8 buf[128] = "";
(void)event;
while(Hal_UART_RxBufLen(port))
{
HalUARTRead(port, &buf[j], 1);
j++;
flag = 1;
}
if(flag == 1)
{
pMsg = (mtOSALSerialData_t *) osal_msg_allocate(sizeof(mtOSALSerialData_t)+j+1);
// pMsg->hdr.event = CMD_SERIAL_MSG;//原来的送到eventprogress的事件号
//8.13 by sure
if(port==0)
pMsg->hdr.event = CMD_SERIAL_MSG;
else if(port==1)
pMsg->hdr.event = CMD_SERIAL_MSG_1;
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 );
osal_msg_deallocate((uint8 *)pMsg);
}}
这样串口每发一条命令过来,(协调器)就发该指令到对应的设备,但是如果串口指令发送的太快,协调器不再向空中发送指令,但过一阵子又可以发送了,是不是串口缓冲不过来,我的指令是10个字节一条的
Viki Shi:
是有这个可能,CC2530处理能力有限,串口发送太频繁可能会造成死机,可以在程序里加段延时