[英]Extract wrong data from a frame in C?
我正在編寫一個程序,該程序從Linux上的串行端口讀取數據。 數據由另一設備以以下幀格式發送:
|start | Command | Data | CRC | End |
|0x02 | 0x41 | (0-127 octets) | | 0x03|
----------------------------------------------------
如圖所示,數據字段包含127個八位位組,而1,2位八位組則包含一種類型的數據。 字節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個首位,並導致接收器端出現錯誤的結果。
我該如何解決此問題,或者我在發送方做錯了什么?
相關問題:
解析並讀取C中的數據幀?
在C中Linux的串口清除數據?
如果您的程序實際上包含
read(result);
那么你需要添加
#include <unistd.h>
在頂部,獲取要read
的函數原型。 然后,您需要open
串行端口,並傳遞生成的文件描述符以與緩沖區一起read
,以便它知道要讀取的內容。 看到man 2 read
, man 2 open
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.