Я опубликовал этот вопрос некоторое время назад, но так и не смог решить проблему. У меня система , работающая под управлением Linux, я подключил rx к tx (loopback) из UART1 и выполнил этот код:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
int main(void) {
int iFd = open("/dev/ttyTHS0", O_RDWR);
if (iFd < 0) {
fprintf(stdout, "Error when opening file.\n");
return -1;
}
while (1) {
if (write(iFd, "A", 1) == -1) {
fprintf(stdout, "Failed to write\n");
return -1;
}
char buff[1] = {
0
};
if (read(iFd, buff, sizeof(buff)) < 0) {
fprintf(stdout, "Failed to read.\n");
return -1;
}
fprintf(stdout, "read: %s\n", buff);
}
close(iFd);
return 0;
}
Дело в том, что он не получает никаких данных. Код просто блокируется на read
. Я вижу данные, передаваемые по линии tx, когда смотрю на нее с помощью осциллографа, но rx ничего не получает (поэтому он не имеет ничего общего с очисткой буфера). Я также попытался разделить этот код на 2 процесса: один процесс для передачи и другой для приема, но это тоже не работает.
Я пытался запустить два разных процесса, чтобы попытаться отследить проблему, но это не дало мне никаких дополнительных подсказок.