WDT в вытесняющем ядре RTOS - PullRequest
1 голос
/ 08 октября 2019

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

какие-либо разъяснения?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 08 октября 2019

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

Ну, это как раз то, что нужно. Если поток с наименьшим приоритетом (или, что лучше, свободный поток) истощен, то в вашей системе будут отсутствовать крайние сроки, либо она будет плохо спроектирована, либо возникло непредвиденное состояние.

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

Тем не менее, это только частичныйрешение для мониторинга целостности системы. Он решает проблему ошибочной задачи, приводящей к перегрузке ЦП, но он не решает проблему блокировки задачи и никогда не распределяется по назначению. Существует множество способов справиться с этим, но простой подход состоит в том, чтобы иметь «программные сторожевые таймеры», счетчики, которые сбрасываются при каждой задаче и уменьшаются в высокоприоритетном потоке или обработчике таймера. Если какой-либо счетчик потока достигает нуля, то соответствующий поток блокируется дольше, чем предполагалось, и действие может быть предпринято. Для этого требуется, чтобы каждый поток работал с интервалом, меньшим, чем его значение сброса счетчика контроля. Для потоков, которые в противном случае блокируют неограниченное время ожидания нечастых апериодических событий, вы можете использовать тайм-аут блокировки только для обновления программного сторожевого таймера.

3 голосов
/ 08 октября 2019

Не существует абсолютного правила относительно приоритета сторожевой задачи. Это зависит от вашего дизайна и целей.

Вообще говоря, если задача сторожевого таймера является задачей с наименьшим приоритетом, то она не будет выполняться (и сторожевой таймер сбрасывается), если какая-либо задача с более высоким приоритетом застревает или потребляет слишком много. процессорного времени. Учтите, что если задачи с высоким приоритетом выполняются 100% времени, это, вероятно, слишком много, потому что задачи с более низким приоритетом становятся голодными. И, может быть, вы хотите, чтобы сторожевой таймер сбрасывался, если задачи с более низким приоритетом становятся голодными.

Но эта общая идея не является законченным проектом. См. этот ответ , и особенно раздел «Многозадачность» этой статьи (https://www.embedded.com/watchdog-timers/) для более полного проектирования контрольной задачи. В статье предлагается сделать контрольную задачу самой приоритетной, но обсуждается торговля). альтернативы.

...