В настоящее время я подключаю свой компьютер к микроконтроллеру, который очень чувствителен к времени.На самом деле, мне повезет, если у меня будет пара дюжин микросекунд для воспроизведения между отправкой последнего байта и ожиданием байта взамен.
То, что я пытаюсь сделать на стороне ПК, это отправитьданные в микроконтроллер как можно быстрее.Это мой код:
#include <stdio.h>
#include <time.h>
#include <fcntl.h>
#define TIMEOUT 5 //give the PC 5 seconds
int main(){
int nwrite=0;
int fd=open("/dev/ttyS0",O_NOCTTY | O_WRONLY); //open port
if (fd > -1){
int start=time(NULL); //start clock
while (time(NULL)-start < TIMEOUT && nwrite == 0){
nwrite=write(fd,"\n",1); //try outputting enter
if (nwrite < 0){
close(fd); //close file because writing returned error
printf("Write Error");
return -1;
}
}
close(fd);
if (nwrite != 0){
printf("Byte sent out");
}
}else{
printf("Bad file");
}
return 0;
}
Даже если это делает работу, она делает это недостаточно быстро.Вот мое направление программы от открытия к закрытию:
13:22:04.160431 open("/dev/ttyS0", O_WRONLY|O_NOCTTY) = 3
13:22:04.160738 time(NULL) = 1558545724
13:22:04.160913 time(NULL) = 1558545724
13:22:04.161088 write(3, "\n"..., 1) = 1
13:22:04.161278 time(NULL) = 1558545724
13:22:04.161450 close(3) = 0
Я заметил, что эти команды времени обрабатывают не менее 100 микросекунд каждая.Есть ли другая функция, которую я могу использовать вместо time () для прерывания последовательности записи, если произошел тайм-аут?Но эта функция должна выполняться быстрее, чем функция time ().