Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FreeRTOS - динамическое изменение тактовой частоты
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
1kvi1
Добрый день!

Вопрос по freertos - как правильно реализовать динамическое изменение тактовой частоты и частоту смены задачи в STM32.

Интересует следующий момент - есть две задачи первая меняет по заданным событиям тактовую частоту, вторая мигает светодиодом. Период мигания задается функциями vTaskDelayUntil.

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

Первая мысль которая приходит в голову - определить макросы configCPU_CLOCK_HZ и configTICK_RATE_HZ как переменные, при изменении тактового сигнала менять переменные и вызывать повторно prvSetupTimerInterrupt(), сбрасывать текущее значение счетчика системного таймера.

Устройство с батарейным питанием, большую часть времени спит. Диапазон тактовой частоты от 32кГц до 16МГц.
Не хотелось бы модифицировать исходники, может быть есть стандартное решение?
aaarrr
Цитата(1kvi1 @ Aug 14 2011, 12:47) *
Диапазон тактовой частоты от 32кГц до 16МГц.
Не хотелось бы модифицировать исходники, может быть есть стандартное решение?

При соотношении рабочих частот 1:500 без модификации, боюсь, никак не обойтись.
zltigo
QUOTE (1kvi1 @ Aug 14 2011, 11:47) *
Устройство с батарейным питанием, большую часть времени спит. Диапазон тактовой частоты от 32кГц до 16МГц.
Не хотелось бы модифицировать исходники, может быть есть стандартное решение?

Ну и работайте всегда на 16Mhz а потом спите. Перед входом в спячку можете, конечно и тактовую сбросить. Но Работать всегда на полной. А во вторых, какая разница, какая тактовая - только системный таймер перепрограммируйте и все.
aaarrr
Цитата(zltigo @ Aug 14 2011, 21:47) *
какая разница, какая тактовая - только системный таймер перепрограммируйте и все.

Это в случае 1-16МГц можно было бы, а тут 32кГц снизу. Впрочем, случись мне экономить электричество, я бы в режиме 32кГц просто выключал бы ОС за ненадобностью.
zltigo
QUOTE (aaarrr @ Aug 14 2011, 20:28) *
Это в случае 1-16МГц можно было бы, а тут 32кГц снизу.

Разница, если, конечно, за системный тик контекст успеет переключиться ну и поработать еще немного sm.gif. Другое дело, что запускать систему на таких частотах крайне странно. Чем не утраивает сон на приличных мегагерцах - неведомо sad.gif.
1kvi1
Вариант с стабильной максимальной частотой и сном при простое - подходит для большинства задач.

Другое дело в следующей ситуации

устройство ждет нажатия кнопки и спит,
кнопку нажали - взвели флаг и снова спать,
кнопку отпустили - работаем

Зачем запускать осциллятор на 16 МГц чтобы взвести флаг? Ведь можно от внешнего часового кварца (уже есть и постоянно включен) работать и не тратить лишнего времени...

Операционная система тут не участвует - задача сама легла спать, сама проснулась - как Freertos'у сообщить что прошло уже 10 секунд, а не 10 милисекунд как она считает (тактовая частота была выключена), и что пора все задачи разбудить давно...

Уважаемые ГУРУ - есть вопрос - большая просьба - дайте на него ответ, не нужно спрашивать почему вопрос возник...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.