我在尝试与XBee通信的嵌入式平台上实现了以下代码。执行以下代码的嵌入式平台 not xbee:
int main()
{
char payload[12] = {0x61,0x88,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0xEC,0x00,0x00}
payload[2] = 0x10;
payload[9] = 0x01;
char data = 'H'; // Send simple ASCII character to XBee
payload[11]= data;
while (1)
sendByteofData(payload,12);
}
void sendByteOfData(char * payload, int len)
{
int x;
for (x=0;x<4;x++)
// This function sends IEEE 802.15.4 frames, and I know it
// works because they are detected in the [sniffer][3].
send_IEEE_802_15_4_frame(payload,len);
}
payload[2] = payload[2] % 256 + 1;
payload[9] = payload[9] % 256 + 1;
if (payload[9] % 256 == 0 )
payload[9] = 0x01;
else
payload[9] %= 256;
}
令我惊讶的是,上面的代码实际上已成功地从嵌入式平台向XBee发送了一个字节。但是,main()末尾的无限循环应该产生一个字节流。
我怀疑我需要正确设置payload[2]
和payload[9]
,并且上面显示的增量模256算法可能存在缺陷。
如何获得连续的字节流?
答案 0 :(得分:0)
一些想法......
unsigned char
或更好,uint8_t
。要更新有效负载[2]和有效负载[9],请简化代码:
++payload[2];
++payload[9];
if (payload[9] == 0) payload[9] = 1;
在发送之间添加延迟。在发送下一个字符之前,您甚至可能需要等待响应。
由于它是无符号8位值的有效载荷,它们将自动从255滚动到0.我假设有效载荷[9]的特殊情况代码试图从255滚动到1(而不是0)。 / p>
确保您的有效负载不需要包含某种校验和。更新这两个字节会对校验和字节产生影响。