2013-05-12 72 views
4

我需要實現相當簡單的網絡協議:有微控制器(語言爲C)和Java應用程序的設備,它們應該進行通信:我需要實現固件更新,也許還有其他一些事情。不同平臺之間的數據傳輸協議

至少,我需要傳輸一些數據結構作爲標題。

只有醜陋的方式浮現在腦海:

我可以在C面宣佈堆積結構,並以某種方式處理在Java端相同的數據流。 因此,如果我的結構發生了變化,那麼我需要在兩邊進行更改:C和Java。我非常不喜歡這個。

有沒有更好的方法來做到這一點?也許,就像這樣:我應該用某種特殊格式編寫協議結構,然後一些實用程序可以爲C和Java端生成代碼。

或者,也許是不同的。

我很樂意看到建議。

回答

3

您可能想要考慮使用標準化表示法進行數據傳輸,如JSON。這裏是關於在c中解析JSON的一些信息。

Parsing JSON using C

如果它是我的項目,我可能會去與剛裝好的數據結構。希望一旦你的項目成熟,數據結構的變化很小,並且只發生在主要版本中。如果需要,您可以在數據結構中保留一個版本標記以處理遺留數據格式。

+0

感謝您的回答。我需要保持我的C bootloader儘可能輕量級,所以JSON似乎不是好方法。關於版本標籤:是的,如果我決定使用這種方式,我肯定會保留它。 – 2013-05-12 18:26:18

0

你能描述一下協議的細節嗎?是有狀態還是無狀態? 如果你的協議是無狀態的,那麼看看Web服務(尤其是REST-WS)。這是衆所周知的跨平臺交流實踐。

+0

協議是無狀態的,但我的電子設備無法訪問萬維網,它只是通過USB連接到PC。或者,我誤解了你嗎? – 2013-05-12 18:32:18

+0

問題標題中有「網絡」字樣。最常見的網絡協議包含客戶端和服務器角色。服務器可能暴露在本地網絡中。如果您通過USB進行通信,那麼Web服務就不是正確的解決方案。 – uzvar 2013-05-12 18:41:11

+0

對不起,我想我可以稱之爲「網絡協議」。只是將其重命名爲「數據傳輸協議」。 – 2013-05-12 19:16:25

3

解決此問題的一個常見方法是使用Google的protobuf。然而,當你指定你需要它在微控制器環境下工作時,我認爲你可以將 轉換爲protobuf-c,這是一個純C語言版本的protobuf。

+0

謝謝,它看起來很有趣!我一定會研究它。 – 2013-05-12 18:28:30

相關問題