Достижение точности времени ожидания в среде FreeRTOS - PullRequest
0 голосов
/ 11 декабря 2018

Являясь частью программного обеспечения, разработанного для FreeRTOS, я реализую специальный протокол прикладного уровня через последовательный порт, где у меня есть требование ожидания / опроса в течение определенных миллисекунд.Например, я отправляю сообщение устройству с запросом подтверждения, и система должна строго ждать 200 мс, пока подтверждение не будет получено от получателя, иначе передаст сообщение снова.Есть ли способ точно (скажем, в пределах ± 5% допуска) достичь времени ожидания во FreeRTOS, при условии, что у меня есть другие задачи, выполняющиеся с тем же приоритетом.Не уверен, что vTaskDelay() будет постоянно воспроизводить результаты из-за таких факторов, как загрузка процессора, выполнение других задач и т. Д. Есть ли лучший способ разработать такую ​​реализацию?

1 Ответ

0 голосов
/ 11 декабря 2018

VTaskDelay должно быть в порядке.Это даст вам задержку между запрошенным временем задержки и запрошенным временем задержки - 1 такт rtos.

Это может вызвать проблемы, если ваша система сильно загружена и задачи с одинаковым или более высоким приоритетом выполняются слишком долго.Если есть задачи с одинаковым приоритетом, которые не дают какого-либо результата, они будут округлять робин на каждом тике.

Другой способ сделать это - использовать аппаратный таймер и прерывания, но 200 мс + -Допуск 5% должен быть легко достижим при тщательном проектировании и назначении приоритетов.

...