Установка тайм-аута при синхронной записи файла без потери микросекунд со временем () - PullRequest
0 голосов
/ 22 мая 2019

В настоящее время я подключаю свой компьютер к микроконтроллеру, который очень чувствителен к времени.На самом деле, мне повезет, если у меня будет пара дюжин микросекунд для воспроизведения между отправкой последнего байта и ожиданием байта взамен.

То, что я пытаюсь сделать на стороне ПК, это отправитьданные в микроконтроллер как можно быстрее.Это мой код:

#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 ().

...