2014-03-24 92 views
0

我的主機是連接到網絡處理器LON:FT5000「Big Enidian」的STM32l100「Little Enidian」,通過UART通信,如何超過這個Enidians中的差異問題。我知道一個解決方案,發送和接收任何標準解決方案,因爲我的應用涉及嵌套結構和枚舉)微控制器和微處理器之間的字節順序問題?

+0

只需定義處理器之間的接口並編寫符合該定義的代碼即可。 –

回答

1

網絡協議應該定義字節序。例如,TCP/IP和Modbus是大端。而諸如DeviceNet之類的CIP協議是小端的。如果你正在創建你自己的協議,那麼選擇哪個字節序列最方便。

運行在網絡端點上的軟件應該適當地轉換數據。請注意,這可能意味着交換字節而不是交換位。

請參閱Introduction to Endianness瞭解更多信息,包括本摘錄。

一個常見的解決方案與網絡相關聯的字節序問題是定義一組四個預處理宏如清單1所示這些宏在如下:

htons():重新排序的字節從處理器訂單到網絡訂單的16位無符號值。宏名稱可以被讀爲「主機到網絡短路」。

htonl():將32位無符號值的字節從處理器順序重新排序爲網絡順序。宏名稱可以被讀爲「host to network long」。

ntohs():將網絡順序中的16位無符號值的字節重新排序爲處理器順序。宏名稱可以被讀爲「網絡到主機短」。

ntohl():將網絡順序中的32位無符號值的字節重新排序爲處理器順序。宏名稱可以被讀取爲「網絡到主機長」。