还有一个小时, 最后的一小时。再来改改程序吧。电脑 ping 协调器:发送 0xfe+0x0021 也就是说, 发送的所有数据都以 0xfe 开始。电脑与协调器在通信过程中, 每次通信成功需要返回成功标志以及发送的数据包的个数,类似于 ping 的实现原理。协调器给 PC 发送, PC 回传是否成功标志就好。不成功则重新发送, 最多发送次数可以指定。超出发送次数,报警。显示工作不正常。 PC 给协调器发送,如果数据包过大,在 PC 端把数据分拆成包,每次发送的数据包都进行校验,如果协调器返回接收错误,那么 PC 重发, PC 只有在协调器已经接收数据以后才能发送下一个数据包。问: 要不要再协调器实现数据包的重组呢? 协调器重组当然效率相对高一些, 但是, 实现起来更复杂, 现在暂时不采用这个方法。明天搞定串口通信, 我这边的事情这个周末就能搞定吧。至于传感器的问题, 再说吧。关于采集数据。这个明显是 HAL 层的事情, 应该调用HAL层的 API 做? void initUart(halUARTCBack_t pf) { halUARTCfg_t uartConfig; = TRUE; = HAL_UART_BR_38400; = FALSE; = 48; = RX_BUF_LEN; = 128; = 6; = TRUE; = pf; HalUARTOpen (HAL_UART_PORT_0, &uartConfig); } 从这里可以看出来, uart 缓冲区只有 128 个字节,虽然 PC 的缓冲区很大,但是建议每次发送数据不宜过大。从 PC 发送的数据最大为 512 字节。从 PC 发送的数据单次发送的最大字节数为。。。。。设定为 64 个字节好了。不设定为 128 ,是因为我把需要发送的 512 个字节拆分以后, 需要加入其它信息。接收数据后, 在协调器组装数据。这里有一个问题,协调器单次发送的最大数据是多大呢?也是 512 么? 这样好了,协调器发送数据的功能进行封装。当数据长度大于 64 字节时, 就分拆发送,每次发送 64 字节。否则,一次发送。而且发送数据的最大长度设定为 512 字节,拆分多次发送。协调器发送函数: 1. 发送 64 字节及以下长度的数据时, int sendOne( uint8* p,uint8 len); 返回值为是否发送成功。这里面应该有一个发送完成标志。 2. 发送数据长度大于 64, 小于 512 时, int sendTwo (uint8* p,uint8 len); 这里也应该有一个数据发送完成标志。先分开实现这两个函数, 最后发送数据统一于同一个函数, 函数中调用之前的函数,只不过是调用之前实现的函数。还有, 我认为, 数据的发送和接收可以是单独的一个任务中进行, 这样会加快总的
zigbee工作日志 来自淘豆网m.daumloan.com转载请标明出处.