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