簡體   English   中英

從C中的幀中提取錯誤的數據?

[英]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 readman 2 open

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM