Итак, у меня есть встроенное устройство Linux, которое подключено к контроллеру двигателя через последовательный порт.Я пишу интерфейсную библиотеку, которая делает много хороших общих функций, которые будут вызывать другие программы.Одной из них является функция для запуска программы, которая в настоящее время находится на флэш-диске контроллера:
int run_motor_program(int serial_fd, char *label, timeout);
Общий псевдокод для этой функции:
call write(serial_fd, "start program at `label`")
perform a couple read()'s / write()'s to check whether program has started on the motor controller
do
/* some stuff */
while(program is running AND timeout hasn't exceeded)
If the timeout exceeded, kill motor and return timeout error
Время ожидания в приведенном вышеОпределение функции используется в случае, если что-то идет не так во время работы программы на контроллере мотора.Если контроллер двигателя застрял в более длинной петле, чем ожидалось, мне нужна возможность остановить программу.
Единственные известные мне способы отслеживания времени ожидания:
1) Вызов gettimeofday() до и во время цикла, чтобы увидеть, истекло ли истекшее время> значение тайм-аута, переданное в
2) Вызов clock_gettime () и в основном то же самое, что и 1.
3) Использование timer_create ()перед циклом и timer_getoverrun () в цикле, чтобы проверить, истекло ли время (это, кажется, самое элегантное решение, но я не могу заставить работать timer_getoverrun () с SIGEV_NONE [я не хочу использоватьсигналы]).
Какой из них (или если у кого-то есть какие-либо другие предложения) является наилучшим способом учета времени ожидания в функции?Мне действительно нужно только разрешение с точностью до миллисекунды.