Читаем Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С полностью

• Запрет на прерывания: Прерывания блокируются, когда задача выполняет критическую часть программного кода. В микроконтроллере 68HC12 это выполняется с помощью команды SEI (установить маскирование прерывания). Как только критическая часть кода закончена, прерывания могут быть снова разрешены командой CLI (очистить маскирование прерывания).

• Использование семафоров или блокировок; семафор или блокировка может использоваться, чтобы указать, что критический ресурс не доступен для использования, потому что это используется в настоящее время другой задачей. Регулировщики с флажками из нашего рассказа как раз и использовали семафоры (знаки «остановиться» и «продолжать осторожное движение») чтобы запрещать или разрешать доступ к критическому ресурсу. Прежде, чем часть программы сможет использовать критическую часть кода, она должна выяснить, доступен ли ресурс.

<p>8.6.2. Повторная входимость</p>

Тесно связана с концепцией конкуренции проблема повторных входов. Функция считается повторно используемой, если она всегда работает правильно и сохраняет данные даже после прерывания и перезапуска. И снова возникают проблемы, когда задача с низким приоритетом прерывается прежде, чем завершает свою работу функция. Если более высокоприоритетная задача использует ту же самую функцию, функция перезапустится прежде, чем она закончит задачу с более низким приоритетом.

Следующие методы могут использоваться, чтобы создать повторно используемую функцию:

• Запрет на прерывания: Прерывания заблокированы при выполнении критических частей некоторой функции.

• Использование локальных переменных: Вспомним, что локальные переменные хранятся в стеках. Если высокоприоритетная задача выгружает задачу с низким приоритетом, переменные безопасно сохранены в стеке.

• Использование регистров микропроцессора: регистры микропроцессора могут использоваться, чтобы сохранить критические переменные внутри повторно используемой функции. Если функция прервана, переменные автоматически сохраняются в стеке микропроцессора.

• Комбинация методов: чтобы создать повторно используемую функцию, может использоваться комбинация этих методов.

<p>8.6.3. Межзадачные связи</p>

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

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

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

<p>8.6.4. Безопасность, проверка и безотказная работа</p>

Одной из наиболее критичных проблем, усложняющих работу ОСРВ, является проблема безопасности. Мы уже обсудили часть стандартов, касающихся измерений и безопасности. В зависимости от того, где используется ОСРВ (связь, медицинское изделие, коммерческое изделие, авиация, и т.д.), имеются различные требования безопасности, которые должны быть выполнены. Безопасность операционной системы должна быть подтверждена документацией и испытаниями. Кроме того, в случае сбоя, система должна переходить в безопасный режим — предотвращающий травматизм персонала и повреждение оборудования.

Пример: Если мы должны были использовать ОСРВ, чтобы управлять светофором на оживленном перекрестке, безопасным режимом при любых сбоях системы будет красный свет для обоих направлений движения. Нетрудно представить, что выбор для безопасного режима зеленого света сразу приведет к катастрофическим последствиям.

Проблема безопасности — ключевой фактор при решении вопроса: написать ли вам собственную операционную систему или приобрести стандартную.

<p>8.6.5. Главный вопрос</p>
Перейти на страницу:

Похожие книги

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных