1kvi1 0 14 августа, 2011 Опубликовано 14 августа, 2011 · Жалоба Добрый день! Вопрос по freertos - как правильно реализовать динамическое изменение тактовой частоты и частоту смены задачи в STM32. Интересует следующий момент - есть две задачи первая меняет по заданным событиям тактовую частоту, вторая мигает светодиодом. Период мигания задается функциями vTaskDelayUntil. В общем задачу можно определить так - нужно стандартными механизмами системы обеспечивать временные интервалы при динамически меняющейся тактовой частоте. Первая мысль которая приходит в голову - определить макросы configCPU_CLOCK_HZ и configTICK_RATE_HZ как переменные, при изменении тактового сигнала менять переменные и вызывать повторно prvSetupTimerInterrupt(), сбрасывать текущее значение счетчика системного таймера. Устройство с батарейным питанием, большую часть времени спит. Диапазон тактовой частоты от 32кГц до 16МГц. Не хотелось бы модифицировать исходники, может быть есть стандартное решение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 14 августа, 2011 Опубликовано 14 августа, 2011 · Жалоба Диапазон тактовой частоты от 32кГц до 16МГц. Не хотелось бы модифицировать исходники, может быть есть стандартное решение? При соотношении рабочих частот 1:500 без модификации, боюсь, никак не обойтись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 14 августа, 2011 Опубликовано 14 августа, 2011 · Жалоба Устройство с батарейным питанием, большую часть времени спит. Диапазон тактовой частоты от 32кГц до 16МГц. Не хотелось бы модифицировать исходники, может быть есть стандартное решение? Ну и работайте всегда на 16Mhz а потом спите. Перед входом в спячку можете, конечно и тактовую сбросить. Но Работать всегда на полной. А во вторых, какая разница, какая тактовая - только системный таймер перепрограммируйте и все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 14 августа, 2011 Опубликовано 14 августа, 2011 · Жалоба какая разница, какая тактовая - только системный таймер перепрограммируйте и все. Это в случае 1-16МГц можно было бы, а тут 32кГц снизу. Впрочем, случись мне экономить электричество, я бы в режиме 32кГц просто выключал бы ОС за ненадобностью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 15 августа, 2011 Опубликовано 15 августа, 2011 · Жалоба Это в случае 1-16МГц можно было бы, а тут 32кГц снизу. Разница, если, конечно, за системный тик контекст успеет переключиться ну и поработать еще немного :). Другое дело, что запускать систему на таких частотах крайне странно. Чем не утраивает сон на приличных мегагерцах - неведомо :(. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1kvi1 0 16 августа, 2011 Опубликовано 16 августа, 2011 · Жалоба Вариант с стабильной максимальной частотой и сном при простое - подходит для большинства задач. Другое дело в следующей ситуации устройство ждет нажатия кнопки и спит, кнопку нажали - взвели флаг и снова спать, кнопку отпустили - работаем Зачем запускать осциллятор на 16 МГц чтобы взвести флаг? Ведь можно от внешнего часового кварца (уже есть и постоянно включен) работать и не тратить лишнего времени... Операционная система тут не участвует - задача сама легла спать, сама проснулась - как Freertos'у сообщить что прошло уже 10 секунд, а не 10 милисекунд как она считает (тактовая частота была выключена), и что пора все задачи разбудить давно... Уважаемые ГУРУ - есть вопрос - большая просьба - дайте на него ответ, не нужно спрашивать почему вопрос возник... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться