Я пытаюсь прочитать данные последовательного порта на C в Mac OS. Конфигурация последовательного порта выполняется в отдельной Arduino IDE.
Я могу читать частичные данные, но затем напечатанные данные повторяются и начинают считывать нули, как показано ниже. Если удалить O_NONBLOCK, программа просто зависнет. Что я могу сделать, чтобы решить эту проблему? Во-вторых, учитывая, что я читаю данные в цикле for, как мне убедиться, что скорость чтения соответствует скорости передачи в бодах?
Просмотренных данных: 296310 0
320 295 311
320 295 311
9 296 311
320 295 311
320 295 311
9 296 311
...
0 0 0
0 0 0
0 0 0 и т. Д.
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
int buffer[300];
int main(int argc, const char* argv[])
{
// open serial port
int port;
port = open("/dev/tty.usbmodem1411", O_RDONLY | O_NONBLOCK);
if (port == -1)
{
printf("Unable to open serial port.\n");
return 1;
}
// instantiate file
FILE* file = fdopen(port, "r");
if (file == NULL)
{
printf("Unable to instantiate file.\n");
close(port);
return 2;
}
for (int j = 0; j < 200; j++)
{
fscanf(file, "%d %d %d", &buffer[3*i], &buffer[3*i+1], &buffer[3*i+2]);
printf("%d %d %d\n", buffer[3*i], buffer[3*i+1], buffer[3*i+2]);
i = (i + 1) % 100;
usleep(10000);
}
fclose(file);
close(port);
return 0;
}
if (fgets(temp, sizeof(temp), file) != NULL) { sscanf(temp, "%d %d %d\n", &buffer[3*i], &buffer[3*i+1], &buffer[3*i+2]); printf("%d %d %d\n", buffer[3*i], buffer[3*i+1], buffer[3*i+2]); }
- person Victor   schedule 05.12.2013i
объявление не отображается. Покажите, пожалуйста. Это инициализировано? В противном случае это является проблемой. - person chux - Reinstate Monica   schedule 06.12.2013fscanf()
, как вif (3 != fscanf(...)) Handle_error();
- person chux - Reinstate Monica   schedule 06.12.2013