ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
953665 Топик полностью
Vit (18.10.2019 14:36, просмотров: 942) ответил fk0 на Выскажу ещё раз: FreeRTOS сырая недоделка, смысла особого, без реализации ряда перечисленного (см. ниже) не имеет и, хуже того, наоборот вносит существенные ограничения для программиста. Если бы стояла задача выбрать ОС для МК, то я бы скорей
Спасибо. Любопытно. Есть моменты для обсуждения. Событийная система в кооперативном варианте Quantum Leaps проложена, но приоритетов не видел. У меня самописное кооперативное аналогичное есть для мелкожрательности (и не только) с флагами. В связи с мелкожрательностью задачи подписываются на события (выставляют флаги в дескрипторе задачи), задают желаемый уровень энергопотребления (тоже в дескрипторе задачи), и делают yield(), менеджер питания проверяет, нет ли необработанных ожидающих флагов, которые возникают большей частью в обработчиках прерываний (механизм отложенной обработки прерываний в фоне) и на которые подписались, далее при отсутствии необработанных флагов и заказанном уровне энергопотребления (аукцион между уровнями потребления в дескрипторах обслуживаемых задач) укладывает систему в спячку с разрешенными прерываниями. Наличие необработанных флагов пробуждает (или не дает заснуть) эту шнягу, а далее специальный мониторчик копирует raw-набор флагов событий, оббегает все дескрипторы и ставит флаг активности задачам, подписанным на набор событий в копии. После этого запускаются только активные задачи а-ля укороченный биглуп. Тут есть тонкость - дескрипторы неактивных задач тоже просматриваются, флаги и уровни потребления принимают участие в работе менеджера питания. Параллельно с этой системой событий работает голландский аукцион "времен регулярной побудки" и заряжаются значения в таймер (time-triggered системы), от которого тоже есть флаг события (для поллинга таймаутов) - неточно, зато дешево и практично:) О приоритетах событий у меня думают приложения - внешний решатель-запускатель не может изменять список дескрипторов. Пока не может, но я подумаю - вдруг в каких-нибудь сценариях использования мне это понадобится, тогда заделаю. Пока это работало на MSP430 (начиная со 128 байт ОЗУ и 1 кБ флеш), AVR (m128, m2560) и на Corteх-M0, 0+, 3, 4. Минимально - переписывается монитор питания и таймер. Доставляют короткие LP-таймеры с countdown:) В MSP был модуль перекалибровки низкочастотного RC-генератора по высокочастотному и длинный счетчик с разрешением 1 мкс - нужно было интервалы порядком 20 часов довольно точно отсчитывать, а часовой кварц в одном случае, некуда подключать, в другом забажен генератор... В STM32L476 пришлось рожать переключение тактовой частоты (и генераторов) на ходу (USB любит 48 МГц, LWIP-у у меня достаточно 16 MHz, всё остальное делается на 4 МГц, или нафиг спим) - ещё тот секас. Был объемный пласт написанного прикладного ПО (благо было сделано на этой платформе, но сначала без использования собственно управления потреблением) и пришлось лечить неинвазивно:) - не переписывать прототипы функций задержек, а сделать функции задержек независимыми от тактовой..., в разных масштабах шкал... Аккуратный инит/деинит USB на ходу был камнем преткновения - если бы не осилил, то всё остальное было бы ненужно...