У меня есть проект с использованием ARM Cortex M4 с масштабированием частоты процессора в зависимости от рабочей нагрузки. Я хотел бы использовать WWDG, потому что он позволяет гораздо больше возможностей, таких как прерывание по сторожевому таймеру. Вопрос: есть ли какой-либо стандартный обходной путь для тика ЦП с переменной продолжительностью времени?
Как управлять оконным сторожевым таймером (WWDG) с динамически масштабируемой частотой процессора?
Ответы (1)
Для этого есть очень разные решения. Что выбрать, зависит от ваших настроек и вашего приложения (точнее, от его критичности). Если МД используется только для обнаружения зависания в некритическом приложении, т. е. при отсутствии серьезной опасности причинения вреда человеку, животным или дорогостоящего материального ущерба, то вполне достаточно обычного МД с ослабленным таймингом. Если приложение критично, и вы ожидаете серьезных нарушений в случае превышения нижнего предела времени, то можно использовать WWDG.
Итак, у меня есть два возможных решения, одно простое и одно сложное; какой из них лучше всего подходит для вашего варианта использования, зависит от того, что вам нужно для вашей системы (я не могу судить, поскольку вы не сказали, с какой системой вы работаете). Первым решением будет настроить WWD таким образом, чтобы ограничения заполнялись любыми настройками. Таким образом, конфигурация довольно проста, но достаточна для многих случаев использования. Так что вам не придется заботиться о динамическом переключении тактовых частот.
Более сложное решение состоит в том, чтобы измерить время между изменениями часов и определить целевое время до следующего обслуживания WD с вновь выбранной частотой. Когда между ними больше не происходит никаких изменений, тогда WD будет сохранен в это время. В противном случае вы берете интервал с самой последней частотой и вычисляете следующую относительную отметку времени, когда WD должен быть обслужен. Но это зависит от времени, которое вам требуется, может ли это быть реализовано или нет. Если у вас очень жесткое время (например, ‹1 мс), то это не будет жизнеспособным вариантом. Но, с другой стороны, если вычисление сложное, вы получите простой ответ на запрос WD, который помимо времени проверяет работоспособность вашего ALU.