2013-08-31 93 views
1

我在试图与XBee进行通信的嵌入式平台上实现了以下代码。 ,下面执行的代码的嵌入式平台是的的XBee:如何发送有效载荷到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

修改'sendByteOfData()'中的payload []'是错误的编码;为什么不在'main()'中完成这个递增?实际上,程序名称是完全误导的,因为'sendByteOfData()'将传输*多于一个字节*。 – sawdust

回答

0

的一点想法...

  1. 让您有效载荷的unsigned char一个阵列或者甚至更好,uint8_t
  2. 要更新有效载荷[2]和有效载荷[9],简化代码:

    ++payload[2]; 
    ++payload[9]; 
    if (payload[9] == 0) payload[9] = 1; 
    
  3. 添加的延迟发送之间。在发送下一个字符之前,您甚至可能需要等待响应。

因为它是无符号的8位值的有效载荷,他们会自动从255卷到0。我承担有效载荷你的特殊情况代码[9]试图推出从255到1(而不是0)。

确保您的有效负载不需要包含某种校验和。更新这两个字节会对校验和字节产生影响。

相关问题