97
КОМПОНЕНТЫ И ТЕХНОЛОГИИ •
№ 9 '2011
www.kite.ru
компоненты
микроконтроллеры
Андрей Курниц
kurnits@stim.by
Что представляет собой
сопрограмма?
В предыдущих публикациях [1] мы говори-
ли о FreeRTOS как о многозадачной операци-
онной системе, и в центре нашего внимания
находилась задача (task) — базовая единица
программы, работающей под управлением
FreeRTOS. Речь шла о том, что программа,
работающая под управлением FreeRTOS,
разбивается на совокупность задач. Задача
представляет собой отдельный поток команд
процессора и реализуется в виде функции
языка Си. Каждая задача отвечает за неболь-
шую часть функциональности всей програм-
мы. Каждая задача выполняется независимо
от остальных, но взаимодействует с осталь-
ными задачами через механизмы межзадач-
ного взаимодействия.
Начиная с версии v4.0.0 во FreeRTOS по-
явилась поддержка сопрограмм (co-routines).
Сопрограмма сходна с задачей, она также пред-
ставляет собой независимый поток команд
процессора, и ее можно использовать как базо-
вую единицу программы. То есть программа,
работающая под управлением FreeRTOS, мо-
жет состоять из совокупности сопрограмм.
Когда следует использовать сопрограммы?
Главное преимущество сопрограмм перед
задачами — это то, что использование со-
программ позволяет достичь значительной
экономии оперативной памяти по сравне-
нию с использованием задач.
Каждой задаче для корректной работы
ядро выделяет участок памяти, в которой
размещаются стек задачи и структура управ-
ления задачей (Task Control Block). Размер
этого участка памяти за счет размещения
в нем стека оказывается значительным. Так
как объем оперативной памяти в микрокон-
троллерах ограничен, то его может оказать-
ся недостаточно для размещения всех задач.
В таких случаях одним из возможных ре-
шений будет замена всех (или части) задач
на сопрограммы. В этом случае программа
будет представлять собой совокупность неза-
висимых друг от друга и взаимодействую-
щих друг с другом сопрограмм.
Сопрограммам по сравнению с задачами
присущ ряд существенных ограничений, по-
этому использование сопрограмм оправдано
только в случаях, когда объема оперативной
памяти оказывается недостаточно. Следует
отметить, что в программе допускается со-
вместное использование как задач, так и со-
программ.
Особенности сопрограмм:
1. Использование стека. Все сопрограммы
в программе используют один и тот же
стек, это позволяет добиться значительной
экономии оперативной памяти по сравне-
нию с использованием задач, но налагает
ряд ограничений при программировании
сопрограмм.
2. Планирование и приоритеты. Сопрограммы
в отличие от задач выполняются в режиме
кооперативной многозадачности с приори-
тетами. Кооперативная многозадачность
в отношении сопрограмм автоматически
устраняет проблему реентерабельности
функций, но негативно сказывается на вре-
мени реакции микроконтроллерной систе-
мы на внешние события.
3. Сочетание с задачами. Сопрограммы мо-
гут выполняться одновременно с задачами,
которые обслуживаются планировщиком
с вытесняющей многозадачностью. При
этом задачи выполняются в первую очередь,
и только если нет готовых к выполнению за-
дач, процессор занят выполнением сопро-
грамм. Важно, что во FreeRTOS не существу-
ет встроенного механизма взаимодействия
между задачами и сопрограммами.
4. Примитивность. По сравнению с задача-
ми сопрограммы не допускают целый ряд
операций.
– Операции с семафорами и мьютексами
не представлены для сопрограмм.
– Набор операций с очередями ограничен
по сравнению с набором операций для
задач.
– Сопрограмму после создания нельзя уни-
чтожить или изменить ее приоритет.
5. Ограничения в использовании:
– Внутри сопрограмм нельзя использовать
локальные переменные.
– Существуют строгие требования к ме-
сту вызова API-функций внутри сопро-
грамм.
Достарыңызбен бөлісу: