Главная Статьи Проекты

Разработка Производство Обслуживание

Многозадачность на микроконтроллере

"Многозадачность на микроконтроллере"

Многозадачность на микроконтроллере

Современный уровень технического развития диктует новые стандарты высокой функциональности электронным изделиям. Возлагаемые на современную электронику задачи для своего решения требуют организации одновременного выполнения большого количества независимых процессов с одной стороны, и низкую стоимость всей системы - с другой. Последнее во многом достигается за счёт оптимизации схемотехники системы путём исключения ряда её компонентов и перехода на более низкостоимостную элементную базу, что, в свою очередь, приводит к увеличению функциональной нагрузки на оставшиеся компоненты системы, и, в конечном итоге - на управляющий микропроцессор. Поскольку дальнейшее снижение стоимости системы часто осуществляется путём отказа от использования дорогостоящих микропроцессоров и перехода к более дешёвой их альтернативе - микроконтроллерам, то становится актуальной задача построения эффективных сложносоставных систем на основе микроконтроллеров.

Сложносоставные системы характеризуются необходимостью эффективного распределения машинного времени управляющего микроконтроллера между компонентами системы. Эта задача фактически сводится к реализации некоторого количества одновременно выполняющихся участков кода управляющей программы, для обеспечения чего необходимо учитывать имеющиеся в распоряжении ресурсы микроконтроллера и распределять их между процессами в соответствии с приоритетами этих процессов. Механизм такого распределения усложняется с ростом числа задач, в связи с чем при разработке сложных многофункциональных систем приходится уделять немало времени данному вопросу.

Для обеспечения эффективного функционирования современной системы управляющему микроконтроллеру необходимо одновременно производить математическую обработку данных и осуществлять постоянный контроль и управление несколькими периферийными блоками системы (интерфейс пользователя, опрос датчиков, приёмо-передача данных и т.п.). В общем случае каждая из этих задач реализуется посредством выполнения индивидуального алгоритма, имеющего собственный набор параметров, к числу которых относятся требуемая скорость смены шагов алгоритма и величины временных задержек. При классическом подходе совмещённая организация подобных операций на одном микроконтроллере достигается за счёт специальных приёмов, существенно усложняющих структуру программы введением многоуровневой системы машинных состояний, характерных для совмещаемых процессов.

C целью упрощения описания структуры, совмещающей алгоритмы разных типов, и исключения из неё дополнительных ветвей в последнее время всё чаще стали применяться диспетчеры задач - программы, обеспечивающие псевдопараллельное выполнение нескольких подпрограмм пользователя за счёт разделения выполняемых подпрограммных инструкций во времени. Преимущество такого подхода заключается в уменьшении влияния задач друг на друга и в отсутствии необходимости заботиться о своевременном выполнении каждого из процессов (т.к. за этим теперь следит диспетчер), что даёт возможность составлять программы по простому, единообразному принципу и уделять больше внимания функциональному, а не методическому аспекту задачи. В результате резко сокращается время разработки управляющей программы микроконтроллера, существенно облегчается процесс отладки, повышается надёжность системы. Недостатком использования диспетчеров является естественное снижение производительности микроконтроллера, вызванное дополнительным расходом машинного времени, требуемого на переключение между задачами, анализ приоритетов и обеспечение бесконфликтного совместного функционирования разных приложений. По этой причине возникает необходимость в разработках высокоэффективных диспетчеров, обеспечивающих наиболее полное использование ресурсов микроконтроллера управляющей программой в условиях поставленной задачи, что позволило бы в наибольшей степени снизить стоимость микроконтроллерной системы и расходы на её обслуживание.

Программная структура типовой микроконтроллерной системы под управлением диспетчера многозадачности

Рис. 1. Программная структура типовой микроконтроллерной системы под управлением диспетчера многозадачности

В настоящей статье рассматривается диспетчер вытесняющей многозадачности реального времени "MatrixTasks", разработанный специалистами VELECT. Данный диспетчер ориентирован на микроконтроллеры семейства AVR и позволяет организовывать до 256 одновременно выполняющихся процессов, причём для каждого из процессов приоритет задаётся индивидуально и может динамически изменяться в процессе работы приложения. Переключение между задачами осуществляется тремя механизмами: системным прерыванием таймера (по истечении отведённого выполняемой задаче кванта времени), системным прерыванием периферии (при возникновении аппаратных событий) и вызовом системной подпрограммы (по готовности выполняемой в данный момент задачи досрочно предоставить машинное время другим задачам). Возможность выполнения задач с отличными друг от друга уровнями приоритетов достигается за счёт управления очерёдностью переключаемых задач и выделения различного времени выполнения под каждую задачу. Смена задач осуществляется благодаря выделению для каждого из приложений отдельного стека, в котором диспетчер сохраняет наработанное к моменту прерывания выполнения задачи содержимое основных регистров микроконтроллера. Далее производится подмена стека, из которого затем восстанавливается содержимое регистров, относящееся уже к следующей задаче, которой передаётся управление.

С целью повышения эффективности распределения машинного времени микроконтроллера в диспетчере "MatrixTasks" реализован планировщик процессов, позволяющий каждому приложению задавать событие или время отсрочки его последующего вызова. Это позволяет, во-первых, использовать время простоя одной задачи для выполнения других - исключая потери быстродействия системы в циклах ожидания процессов даже с приоритетом реального времени, и, во-вторых, обеспечивает каждое из приложений собственным независимым счётчиком времени, позволяющим организовывать временные задержки, характерные для алгоритмов работы с периферией микроконтроллерной системы. Данным набором средств обеспечивается возможность эффективного совмещения произвольного числа алгоритмов с любыми наборами индивидуальных временных параметров: от непрерывного управления быстродействующей периферией (например, приёмо-передача или математическая обработка данных) до операций, требующих длительных временных задержек (таймеры, ожидание команды пользователя и т.п.). Во многих случаях это также позволяет обойтись без использования обработчиков прерываний, что значительно упрощает процесс разработки периферийных драйверов, сводя его к классическому процедурному кодированию.

Очерёдность выполнения разделяемых во времени задач при организации отсрочек с помощью планировщика событий

Рис. 2. Очерёдность выполнения разделяемых во времени задач при организации отсрочек с помощью планировщика событий

Важной особенностью реализации независимых счётчиков времени в диспетчере "MatrixTasks" является интерфейсная и функциональная совместимость с механизмом учёта времени, применяемым при разработке управляющих программ классическим, однозадачным способом. Это достигается за счёт эмуляции диспетчером счётчиков времени, значения которых вычисляются индивидуально для каждого из выполняемых процессов таким образом, как если бы каждый из этих счётчиков работал в составе однозадачной системы. Вычисления значений эмулируемых счётчиков производятся на основе показаний общего счётчика системного времени диспетчера, благодаря чему появляется возможность синхронизации всех приложений привязкой к единой временной сетке. Расчёт значения эмулируемого счётчика производится только в момент обращения приложения к данному счётчику, что позволяет организовывать неограниченное число одновременно работающих независимых счётчиков времени с наивысшей дискретностью отсчёта, т.к. при такой реализации машинное время микроконтроллера затрачивается только на перерасчёт системного времени диспетчера и не расходуется на регулярное изменение содержимого каждого из счётчиков.

С целью обеспечения возможности привязки независимых приложений к единой временной сетке в диспетчере "MatrixTasks" предусмотрена функция автоматической коррекции времени текущей задержки, которая также позволяет компенсировать характерную для многозадачных систем ошибку запаздывания передачи управления приложению, возникающую и накапливающуюся в моменты пребывания приложения в состоянии готовности. Данное состояние возникает в тех случаях, когда одновременно несколько приложений нуждаются в передаче им управления, но в силу того обстоятельства, что управляющий микроконтроллер только один, в каждый конкретный момент времени его ресурсы могут быть предоставлены для выполнения только одному из приложений. При возникновении такой ситуации диспетчер начинает разделять инструкции выполняемых приложений во времени, поочерёдно предоставляя ресурсы управляющего микроконтроллера всем требующим того приложениям, вследствие чего в каждый отдельный момент времени одно из приложений оказывается выполняющимся, а все остальные приостановлены до выделения им кванта машинного времени микроконтроллера. В результате возникает непрогнозируемое запаздывание моментов выполнения ключевых операций оказывающихся в состоянии готовности приложений относительно изначально запланированного хода событий, что часто оказывается неприемлемым для систем реального времени.

Типовая рассинхронизация независимо выполняющихся приложений, воспроизводящих видеоролики с различными фрагментами одной сцены Типовая рассинхронизация независимо выполняющихся приложений, воспроизводящих видеоролики с различными фрагментами одной сцены Типовая рассинхронизация независимо выполняющихся приложений, воспроизводящих видеоролики с различными фрагментами одной сцены
Типовая рассинхронизация независимо выполняющихся приложений, воспроизводящих видеоролики с различными фрагментами одной сцены Типовая рассинхронизация независимо выполняющихся приложений, воспроизводящих видеоролики с различными фрагментами одной сцены Типовая рассинхронизация независимо выполняющихся приложений, воспроизводящих видеоролики с различными фрагментами одной сцены
Типовая рассинхронизация независимо выполняющихся приложений, воспроизводящих видеоролики с различными фрагментами одной сцены Типовая рассинхронизация независимо выполняющихся приложений, воспроизводящих видеоролики с различными фрагментами одной сцены Типовая рассинхронизация независимо выполняющихся приложений, воспроизводящих видеоролики с различными фрагментами одной сцены

Рис. 3. Типовая рассинхронизация независимо выполняющихся приложений, воспроизводящих видеоролики с различными фрагментами одной сцены

В диспетчере "MatrixTasks" предусмотрена возможность устранения рассинхронизации выполнения приложений с помощью функции автоматической коррекции времени текущей задержки, суть которой заключена в привязке моментов выполнения ключевых операций приложений к единому для всей системы счётчику времени диспетчера. Важной особенностью реализации этого механизма в диспетчере "MatrixTasks" является совместимость с однозадачно-ориентированной структурой приложения, что позволяет применять данную функцию коррекции к тем приложениям, которые разрабатывались без учёта возможности выполнения в многозадачной системе. Такая совместимость достигается за счёт того, что управление сеткой ключевых операций приложения осуществляется диспетчером посредством коррекции значений независимых эмулируемых счётчиков времени, используемых данным приложением. Здесь используется то обстоятельство, что с точки зрения однозадачно-ориентированного приложения используемый им счётчик времени является обычным таймером, отсчитывающим назначенные данным приложением интервалы до выполнения ключевых операций, таких как опрос датчиков, переключение состояний управляющих сигналов, перерасчёт данных и т.п. С учётом данной интерпретации значения счётчика времени и изменения хода выполнения приложения, обусловленного работой в составе многозадачной системы, диспетчер вносит поправку в предоставляемое приложению значение счётчика времени, что позволяет устранить ошибку набегающего запаздывания передачи управления приложению и одновременно привязать моменты истечения заданных приложением временных интервалов к единой временной сетке системы. При планировании и учёте времени данным способом эмулируемый счётчик является для использующего его приложения шлюзом, через который на самом деле осуществляется привязка выполняемых приложением операций к системному счётчику, для которого момент истечения очередного временного интервала приложения рассчитывается как приращение на величину данного интервала относительно момента истечения предыдущего интервала, ранее затребованного данным приложением. Такое решение обеспечивает сохранение привязки к заданной временной сетке моментов выполнения ключевых операций приложения даже для тех приложений, которые выполняются с наинизшим уровнем приоритета в условиях полной загрузки управляющего микроконтроллера. В свою очередь, это позволяет реализовывать взаимосвязанные по времени многопараметрические циклы при помощи нескольких независимых процессов, что в значительной степени упрощает описание периодических функций сложносоставных систем реального времени.

Синхронизированное выполнение независимых приложений за счёт привязки к единой временной сетке моментов смены кадров видеороликов

Рис. 4. Синхронизированное выполнение независимых приложений за счёт привязки к единой временной сетке моментов смены кадров видеороликов

Как уже отмечалось, помимо функции приостановки приложения до истечения заданного интервала времени в диспетчере "MatrixTasks" реализован механизм событийного управления выполнением приложений, позволяющий каждому приложению в произвольный момент времени назначать в качестве условия продолжения его выполнения возникновение любого из 256 организуемых в диспетчере событий. Определение (т.е. сигнализирование о возникновении либо отмене) событий осуществляется при помощи системной функции, которая может быть вызвана из произвольного места управляющей программы, будь то любое из приложений или обработчик прерывания. Это открывает возможности для организации условного выполнения процессов в зависимости от состояния других процессов или аппаратных блоков микроконтроллерной периферии, что позволяет добиваться эффективного взаимодействия процессов с точки зрения использования машинного времени микроконтроллера, используя при разработке программ простые и удобные приёмы событийного описания.

Благодаря тому, что планировщик процессов отслеживает моменты простоя выполняющихся приложений, появляется возможность автоматического управления энергопотреблением микроконтроллера: в моменты бездействия системы (когда все выполняющиеся приложения находятся в состоянии ожидания) диспетчер переводит микроконтроллер в режим пониженного энергопотребления, что позволяет минимизировать потребление микроконтроллера и использовать энергию элемента питания только для выполнения полезных инструкций приложений. В результате достигается минимально возможное потребление микроконтроллера при одновременном предоставлении каждому из приложений требуемой производительности микроконтроллера, т.е. при полном сохранении скорости и очерёдности выполняемых микроконтроллером операций потребление системы оказывается значительно ниже. Осуществление автоматического управления производительностью микроконтроллера со стороны диспетчера в значительной степени упрощает процесс разработки приложений многозадачных микроконтроллерных систем низкого энергопотребления, т.к. при разработке таких приложений отпадает необходимость уделять время реализации механизмов управления режимами энергопотребления микроконтроллера. Данное решение оказывается наиболее значимым для тех микроконтроллерных систем, которые предназначены для круглосуточной работы в условиях питания от автономных источников, т.к. эффективное использование режима пониженного энергопотребления микроконтроллера может во много раз продлить срок службы элементов питания.

Зависимость потребления от степени загрузки микроконтроллера ATmega168, работающего под управлением диспетчера MatrixTasks на тактовой частоте 20 МГц

Рис. 5. Зависимость потребления от степени загрузки микроконтроллера ATmega 168, работающего под управлением диспетчера "MatrixTasks" на тактовой частоте 20 МГц

Рассмотренные возможности и особенности диспетчера "MatrixTasks" позволяют использовать в качестве совмещаемых процессов подпрограммы, разработанные для применения в однозадачной среде практически без какой-либо адаптации к многозадачной системе. Благодаря этому появляется возможность простого интегрирования разработанных классическим способом алгоритмов или даже законченных программ в состав многозадачной системы, что позволяет использовать накопленный мировой опыт однозадачного программирования при разработке многозадачных систем и освобождает от необходимости повторной разработки уже существующих программ или их фрагментов, составленных без учёта правил построения многозадачной системы. С другой стороны, учёт данных правил при разработке многозадачных систем на основе диспетчера "MatrixTasks" позволяет использовать предоставляемые диспетчером функции, способы описания и механизмы взаимодействия процессов, что в значительной степени упрощает программную структуру создаваемой системы, и, как следствие, сокращает время её разработки, тестирования и подготовки обновлений. В свою очередь, сокращение затрачиваемого времени существенно снижает общую стоимость разработки, поддержки и обслуживания системы, а благодаря упрощению структуры системы повышается её надёжность.

Рассмотренные преимущества реализованного в диспетчере "MatrixTasks" подхода к построению сложносоставных систем реального времени позволяют вывести процесс разработок программного обеспечения микроконтроллеров на качественно новый уровень по сравнению с традиционным программированием, что, в совокупности с современными требованиями, предъявляемыми к типовой микроконтроллерной системе, обеспечивает широкое применение данного диспетчера в составе разработанной на его основе многозадачной операционной системе реального времени.



НОВОСТИ

31.12.2009 заработал синоним сайта "www.velekt.ru"

15.11.2009 выпущена плата "MATRIX-RG"

10.10.2009 добавлена статья "многозадачность на микроконтроллере"

25.07.2009 изготовлена установка "LAMINA-QUAD"
ПАРТНЁРЫ
Теплицы из поликарбоната
© 2009–2016 Встраиваемая электроника. Все права защищены.
Копирование материалов возможно только с установкой активной гиперсcылки на сайт www.velect.ru.
Языковая поддержка сайта — english-lessons-moscow.ru.