Как управлять оконным сторожевым таймером (WWDG) с динамически масштабируемой частотой процессора?

У меня есть проект с использованием ARM Cortex M4 с масштабированием частоты процессора в зависимости от рабочей нагрузки. Я хотел бы использовать WWDG, потому что он позволяет гораздо больше возможностей, таких как прерывание по сторожевому таймеру. Вопрос: есть ли какой-либо стандартный обходной путь для тика ЦП с переменной продолжительностью времени?


person morynicz    schedule 31.05.2016    source источник
comment
должен ли сторожевой таймер работать на часах процессора? Должен ли тик system/rtos работать на тактовой частоте процессора? Если нет, то частоты масштабирования процессора не имеют значения.   -  person Russ Schultz    schedule 01.06.2016
comment
Кроме того, если вы не можете изменять напряжение стабилизатора в зависимости от частоты процессора, нет никакой реальной ценности в изменении частоты в зависимости от рабочей нагрузки. Просто усыпите процессор с помощью инструкции WFI. ARM хорошо справляется со стробированием тактовой частоты в неактивном состоянии, поэтому вы просто добавляете сложности и на самом деле не меняете количество тактовых переходов на единицу работы (таким образом, вы на самом деле не влияете на мощность на единицу работы)   -  person Russ Schultz    schedule 01.06.2016


Ответы (1)


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

Итак, у меня есть два возможных решения, одно простое и одно сложное; какой из них лучше всего подходит для вашего варианта использования, зависит от того, что вам нужно для вашей системы (я не могу судить, поскольку вы не сказали, с какой системой вы работаете). Первым решением будет настроить WWD таким образом, чтобы ограничения заполнялись любыми настройками. Таким образом, конфигурация довольно проста, но достаточна для многих случаев использования. Так что вам не придется заботиться о динамическом переключении тактовых частот.

Более сложное решение состоит в том, чтобы измерить время между изменениями часов и определить целевое время до следующего обслуживания WD с вновь выбранной частотой. Когда между ними больше не происходит никаких изменений, тогда WD будет сохранен в это время. В противном случае вы берете интервал с самой последней частотой и вычисляете следующую относительную отметку времени, когда WD должен быть обслужен. Но это зависит от времени, которое вам требуется, может ли это быть реализовано или нет. Если у вас очень жесткое время (например, ‹1 мс), то это не будет жизнеспособным вариантом. Но, с другой стороны, если вычисление сложное, вы получите простой ответ на запрос WD, который помимо времени проверяет работоспособность вашего ALU.

person sim    schedule 31.05.2016