|
|
  |
FreeRTOS - динамическое изменение тактовой частоты |
|
|
|
Aug 14 2011, 08:47
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 5-12-10
Пользователь №: 61 414

|
Добрый день!
Вопрос по freertos - как правильно реализовать динамическое изменение тактовой частоты и частоту смены задачи в STM32.
Интересует следующий момент - есть две задачи первая меняет по заданным событиям тактовую частоту, вторая мигает светодиодом. Период мигания задается функциями vTaskDelayUntil.
В общем задачу можно определить так - нужно стандартными механизмами системы обеспечивать временные интервалы при динамически меняющейся тактовой частоте.
Первая мысль которая приходит в голову - определить макросы configCPU_CLOCK_HZ и configTICK_RATE_HZ как переменные, при изменении тактового сигнала менять переменные и вызывать повторно prvSetupTimerInterrupt(), сбрасывать текущее значение счетчика системного таймера.
Устройство с батарейным питанием, большую часть времени спит. Диапазон тактовой частоты от 32кГц до 16МГц. Не хотелось бы модифицировать исходники, может быть есть стандартное решение?
|
|
|
|
|
Aug 14 2011, 17:47
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (1kvi1 @ Aug 14 2011, 11:47)  Устройство с батарейным питанием, большую часть времени спит. Диапазон тактовой частоты от 32кГц до 16МГц. Не хотелось бы модифицировать исходники, может быть есть стандартное решение? Ну и работайте всегда на 16Mhz а потом спите. Перед входом в спячку можете, конечно и тактовую сбросить. Но Работать всегда на полной. А во вторых, какая разница, какая тактовая - только системный таймер перепрограммируйте и все.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 15 2011, 11:35
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (aaarrr @ Aug 14 2011, 20:28)  Это в случае 1-16МГц можно было бы, а тут 32кГц снизу. Разница, если, конечно, за системный тик контекст успеет переключиться ну и поработать еще немного  . Другое дело, что запускать систему на таких частотах крайне странно. Чем не утраивает сон на приличных мегагерцах - неведомо  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 16 2011, 03:16
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 5-12-10
Пользователь №: 61 414

|
Вариант с стабильной максимальной частотой и сном при простое - подходит для большинства задач.
Другое дело в следующей ситуации
устройство ждет нажатия кнопки и спит, кнопку нажали - взвели флаг и снова спать, кнопку отпустили - работаем
Зачем запускать осциллятор на 16 МГц чтобы взвести флаг? Ведь можно от внешнего часового кварца (уже есть и постоянно включен) работать и не тратить лишнего времени...
Операционная система тут не участвует - задача сама легла спать, сама проснулась - как Freertos'у сообщить что прошло уже 10 секунд, а не 10 милисекунд как она считает (тактовая частота была выключена), и что пора все задачи разбудить давно...
Уважаемые ГУРУ - есть вопрос - большая просьба - дайте на него ответ, не нужно спрашивать почему вопрос возник...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|