fk0, легенда (18.10.2011 17:38, просмотров: 1739)
Предположим есть STM32F100xxx Есть задача просыпаться раз в несколько секунд на десяток миллисекунд, включать 2.4ГГц трансивер, ничего не принимать и засыпать. Либо включаться на полную мощность, надолго и с большой и тяжёлой программой (редко). STM32F100 имеет режимы SLEEP, STOP и STANDBY. Нахождение микроконтроллера в режиме STOP в промежутках между обслуживанием трансивера с точки зрения батареи -- накладно (десятки мкА). Выгодней STANDBY. Но при использовании STANDBY (когда снимается питание RAM), если микроконтроллер исполняет единую монолитную и большую C-программу (которая работает редко, а не раз в несколько секунд), вызывает необходимость исполнять C-стартап с инициализацией переменных и т.п. при каждом включении, а это достаточно долго (и не нужно). Вот где PIC лучше... Какие могут быть решения?
Можно, например, было бы модифицировать скрипты линкера и разместить в памяти две независимые программы (уже достаточно тяжело), так чтоб изначально запускалась легковесная для обслуживания трансивера, которая могла бы при необходимости запустить вторую тяжёлую. Ещё вектора прерываний мешаются (можно разместить в ОЗУ).
Не инициализировать переменные в большой программе и т.п. -- не решение. Программа достаточно большая и сложная, полагается на C-библиотеку и т.д. и т.п.
Можно программу, обслуживающую трансивер, запускать из init-секции (до выполнения C-стартапа). Библиотека ей не нужна, и без C-стартапа можно обойтись.
Другие варианты?
[ZX]