如何将有效负载发送到XBee

时间:2013-08-31 20:09:46

标签: embedded xbee

我在尝试与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算法可能存在缺陷。

如何获得连续的字节流?

1 个答案:

答案 0 :(得分:0)

一些想法......

  1. 使您的有效负载成为unsigned char或更好,uint8_t
  2. 的数组
  3. 要更新有效负载[2]和有效负载[9],请简化代码:

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

  5. 由于它是无符号8位值的有效载荷,它们将自动从255滚动到0.我假设有效载荷[9]的特殊情况代码试图从255滚动到1(而不是0)。 / p>

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