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

Я пытаюсь непрерывно читать данные из последовательного порта и сохранять его в 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

Минимальные права доступа к файлу для переименования файла

Преднамеренно создать невосприимчивый графический процесс

Пользователь не может касаться -t

Могу ли я увидеть количество слотов PCI с командой?

CentOS 5.11: yum устанавливает, но пакеты остаются пропавшими без вести

Можете ли вы scp, sftp или rsync, трубу?

Как отключить проверки переносов порталов

Удаляет ли rsync файлы в месте назначения, которые были удалены со стороны отправки?

Вставьте новые строки в последовательный поток перед записью в текстовый файл

Пакетное переименование файлов, создание подпапок и перемещение файлов по шаблону

Удалите определенный суффикс из всех файлов в каталоге

Обмен данными между двумя идентичными жесткими дисками

Unix с несколькими пакетами

Как правильно избежать этой длинной команды su + sed?

Возможно ли, что * можно напрямую украсть закрытый ключ, если он не использует кодовую фразу?

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