Постоянно читайте последовательные данные и храните их в файле или буфере

Я пытаюсь непрерывно читать данные из последовательного порта и сохранять его в buf и / или в файл. Также эти данные представляют собой поток символов HEX, а не ASCII. Я использую CHIP, который работает debian. Я подключил последовательный порт (UART) к /dev/ttyS0 (это где и как я буду читать данные). Я пытаюсь закодировать его в C.

Я могу прочитать часть данных, но не уверен, что это такое, поскольку я не могу записать его в текстовый файл, а также когда я пытаюсь выполнить печать на консоли, данные не в читаемом формате, поскольку данные находятся в HEX и консоль печатает строки. Можно ли печатать символы HEX?

Также, когда я пытаюсь непрерывно читать порт, буфер просто удерживает первое значение и отображает (печатает) одно и то же значение для всех чтений, но когда я подключаю вывод данных к окну шпатлевки, я могу видеть поток данных, а также также просматривать символы HEX при просмотре необработанных данных с помощью устройства мониторинга устройства.

Как я могу хранить данные, полученные непрерывно на последовательном порту?

 #debian version $ cat /etc/issue Debian GNU/Linux 8 \n \l $ cat /etc/debian_version 8.6 

Фрагмент кода:

 main() { char *portname = "/dev/ttyS0" //Serial port connected(UART) int fd = open (portname, O_RDWR | O_NOCTTY | O_NONBLOCK); if (fd < 0) { perror ("error %d opening %s: %s", errno, portname, strerror (errno)); return; } // *these two functions are used to set attributes for serial communication.* set_interface_attribs (fd, B115200, 0); // set speed to 115,200 bps, 8n1 (no parity) set_blocking (fd, 0); // set no blocking char buf [100]; printf("Reading data on serial port"); int n; while(1) { n = read (fd, &buf, sizeof(buf)); // read up to 100 characters if ready to read puts(buf); } return 0; } в main() { char *portname = "/dev/ttyS0" //Serial port connected(UART) int fd = open (portname, O_RDWR | O_NOCTTY | O_NONBLOCK); if (fd < 0) { perror ("error %d opening %s: %s", errno, portname, strerror (errno)); return; } // *these two functions are used to set attributes for serial communication.* set_interface_attribs (fd, B115200, 0); // set speed to 115,200 bps, 8n1 (no parity) set_blocking (fd, 0); // set no blocking char buf [100]; printf("Reading data on serial port"); int n; while(1) { n = read (fd, &buf, sizeof(buf)); // read up to 100 characters if ready to read puts(buf); } return 0; } 

настройка интерфейса

  tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; // 8-bit chars // disable IGNBRK for mismatched speed tests; otherwise receive break // as \000 chars tty.c_iflag &= ~IGNBRK; // disable break processing tty.c_lflag = 0; // no signaling chars, no echo, // no canonical processing tty.c_oflag = 0; // no remapping, no delays tty.c_cc[VMIN] = 0; // read doesn't block tty.c_cc[VTIME] = 5; // 0.5 seconds read timeout tty.c_iflag &= ~(IXON | IXOFF | IXANY); // shut off xon/xoff ctrl tty.c_cflag |= (CLOCAL | CREAD);// ignore modem controls, // enable reading tty.c_cflag &= ~(PARENB | PARODD); // shut off parity tty.c_cflag |= parity; tty.c_cflag &= ~CSTOPB; //one stop bit tty.c_cflag &= ~CRTSCTS; 

Может кто поможет !!!!!

Заранее спасибо…

Interesting Posts

Sed – заменить символ в соответствующей строке на месте?

Эти сообщения SELinux наводят на мысль о вторжении?

Создание динамически управляемых веб-сайтов с помощью Mason (Perl) с httpd на текущей версии OpenBSD

Как изменить стандартный «полноэкранный» монитор?

Как остановить мой графический чип ATI от перегрева?

Отключить выполнение вкладки в Bash для какой-либо директории, содержащей большое количество файлов?

Как вы могли бы перейти с Windows AD на Linux-сервер LDAP?

Просветительская подсветка E19

Подсчитайте различные значения поля в файле

не может получить доступ к стандартным выводам из команды

Как начать переговоры с racoon VPN IKE автоматически?

Пытается автоматизировать гном-терминал

Как смонтировать автоматически sshfs, когда аутентификация RSA не является опцией?

Как ядро ​​Linux обрабатывает общие IRQ?

Принудительное ssh не печатать предупреждения

Linux и Unix - лучшая ОС в мире.