1

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

如何获得连续的字节流?

4

1 回答 1

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)。

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

于 2013-09-03T05:30:51.487 回答