Извлечь неправильные данные из кадра в C? - PullRequest
0 голосов
/ 28 марта 2010

Я пишу программу, которая считывает данные с последовательного порта в 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?
Очистить данные на последовательном порту в Linux в C?

1 Ответ

0 голосов
/ 28 марта 2010

Если ваша программа содержит

read(result);

тогда вам нужно добавить

#include <unistd.h>

вверху, чтобы получить прототип функции для read. Затем вам нужно open последовательный порт и передать полученный дескриптор файла в read вместе с вашим буфером, чтобы он знал, что читать. См man 2 read и man 2 open.

...