2013-08-31 122 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)。

確保您的有效負載不需要包含某種校驗和。更新這兩個字節會對校驗和字節產生影響。

相關問題