Попытка отобразить двоичное представление - PullRequest
1 голос
/ 15 сентября 2011

Я работаю с контроллером последовательного шагового двигателя и программирую его на C. Проблема, с которой я столкнулся, заключается в том, что контроллер возвращает значения в двоичных представлениях, и я не уверен, как отобразить.Очевидно, что преобразование его в int не является вариантом, так как мне нужно точное двоичное представление, которое отправляет контроллер.

Выход имеет вид: MSB -> LSB (старший значащий бит в младший значащий бит).*

На данный момент я пытаюсь что-то вроде:

char buff[] = "@01 STAT\r";
char readbuff[10];
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
n = write (fd,buff, len);
......

n = read(fd, readbuff, 3);
printf("STAT returns %c\n", readbuff);
......

Это возвращает бессмысленные данные, то есть странные формы и символы.Я установил вывод в raw и использую 0 четности.Я пропустил параметры инициализации, но могу добавить их, если это поможет.

Если кому-то интересно, я использую шаговый двигатель Ocean Control KTA-190.

1 Ответ

3 голосов
/ 15 сентября 2011

Вы выводите значения в виде% c, то есть символов ASCII, отсюда и «странные формы и символы».

Если вы измените %c на %d или %x, вы получите десятичное или шестнадцатеричное представление значения.Затем вы можете интерпретировать его как бинарный, как хотите (например, 0x0A будет 00001010).

Вам также необходимо убедиться, что вы вытащили каждый символ из буфера чтения.Возможно, вы захотите выполнить цикл и распечатать% x для каждого индекса массива, например:

for (i = 0; i < 10; i++)
{
    printf("readbuff[%d]: 0x%x\n", i, readbuff[i]);
}

(Обратите внимание, что лучше избегать магических чисел, поэтому было бы лучше сделать что-то вроде #define READBUFF_LEN 10 и затем используйте READBUFF_LEN вместо 10 в определении readbuff и условия завершения цикла.

Если вы действительно хотите, чтобы двоичное значение было распечатано, то есть недостаточно распечатать шестнадцатеричное или десятичное число,тогда вам нужно будет выполнить это преобразование самостоятельно, используя сдвиг битов. Вот пример того, как сделать это в ответах здесь: Есть ли конвертер printf для печати в двоичном формате?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...