我正在寫一個程序,從Linux的串口讀取數據。的數據由另一設備使用以下幀格式發送:從C中的幀中提取錯誤的數據?
|start | Command | Data | CRC | End |
|0x02 | 0x41 | (0-127 octets) | | 0x03|
----------------------------------------------------
所述數據字段包含如所示出和被字節1,2-包含一種類型的數據的八位位組127;八位組3,4包含另一個數據。我需要獲取這些數據。
因爲在C中,一個字節只能保存一個字符,並且在幀的開始字段中,它是0x02,這意味着STX是3個字符。
因此,爲了測試我的節目,
在發送器側,我構造的陣列如上像格式幀:
char frame[254];
frame[0] = 0x02; // starting field
frame[1] = 0x41; // command field which is character 'A'
..so on..
並且,然後在接收器側,我走出現如下字段:
char result[254]; // read data read(result); printf("command = %c", result[1]); // get the command field of the frame // get other field's values
命令字段值(結果[1])不是字符'A'。
我認爲,這是因爲該幀的第一個字段值是0x02(STX)佔用陣列幀中的3個第一個位置,並導致接收端的錯誤結果。
我該如何糾正這個問題,或者我在發送方做錯了什麼?
相關的問題:
Parse and read data frame in C?
Clear data at serial port in Linux in C?
緩衝區包含什麼?你打電話來執行讀取什麼功能? (這顯然不是一個'read'系統調用。)你是否使用終端應用程序驗證了串行鏈接? – Potatoswatter 2010-03-28 04:14:39
'STX'不佔用3個字節;所有字符需要1個字節。某些字符(如'STX')只有更長的名字。 – Gabe 2010-03-28 05:15:06
read()函數的完整代碼在這裏:http://stackoverflow.com/questions/2500567/parse-and-read-data-frame-in-c。 我也這麼認爲。如果我調用result [1],那麼值應該是0x41,意思是'A',對吧?但事實並非如此。我返回一個奇怪的值。我在想錯嗎? – ipkiss 2010-03-28 09:03:24