Рябов В.Т. - Устройство и программирование однокристальных микроконтроллеров (1041592), страница 16
Текст из файла (страница 16)
Наконец, следит за временем выполнения программы. Выпустить такой кристалл под силу только фирмам, выпускающим основную серию, да и то не всем, поскольку он сложнее серийного. Такойэмулятор полностью имитирует работу микроконтроллера, включенного по портовой илишинной архитектуре, не накладывая никаких ограничений.На другом полюсе расположен простой эмулятор, состоящий из двух стандартныхмикроконтроллеров. Один из них выполняет функции эмуляции, но работает не с резидентным РПЗУ, а с внешней памятью программ, представляющей собой статическое двупортовое ОЗУ, способное взаимодействовать с двумя источниками чтения и записи.
Другой микроконтроллер содержит программу монитор, также работающую с двух портовымОЗУ и выполняющую во взаимодействии с программой эмулятором выше стоящей персональной ЭВМ все перечисленные ранее функции отладки. Такой эмулятор может прекрасно справиться с эмуляцией микроконтроллера, включенного по шинной архитектуре,но все же, несмотря на все ухищрения, не вполне адекватен микроконтроллеру в портовой50архитектуре.Программная среда, поставляемая вместе с внутрисхемным эмулятором, содержитвнешнюю оболочку, обеспечивающую сквозную поддержку процесса разработки ПО: менеджер проектов, текстовый редактор, компиляторы с ассемблера и С, программный симулятор, отладчик с развитым сервисом и т.п.Программируя в специальной среде или пользуясь универсальными «открытыми»компиляторами, важно структурировать программное обеспечение.
Существует целый рядкоротких подпрограмм или утилит общего применения, которые применяются практически в каждой программе. Они составляют так называемое ядро или базовую операционную систему. Это:− программа тестирования микроконтроллера;− утилиты двойной арифметики там, где необходимы двухбайтовые целые;− утилиты арифметики с плавающей запятой, если это потребуется;− утилиты проверки целостности управляющей программы;− утилиты настройки приемопередатчика на стандартные протоколы обмена и утилиты реализации обмена;− диспетчер процессов или квантов в «жестком» реальном времени− утилиты расчета управляющих воздействий по типовым законам управления и т.п.Программа тестирования микроконтроллера является универсальной утилитой,проверяющей его работу (выполнение регламентированных операций) и поставляетсяфирмой – изготовителем МК.Утилиты двойной арифметики и утилиты арифметики с плавающей запятой такжеуниверсальны и коллектив разработчиков ПО обычно располагает проверенным комплектом таких подпрограмм.
То же можно сказать и об утилитах настройки приемопередатчика на стандартные протоколы обмена и реализации обмена.Для проверки целостности управляющей программы обычно всякий раз при включении просчитывают сумму ее кодов с нарастающим итогом и сравнивают с фактическойвеличиной суммы, которая просчитана заранее и записана в РПЗУ. При этом используюткоманду чтения в аккумулятор содержимого памяти программ:MOVC A, @A+DPTR.Управляющие программы следует писать, как совокупность отдельных взаимодействующих процессов или квантов (участков кода, выполняемых процессором непрерывно), запускаемых и выполняемых под управлением диспетчера. Такое написание лучшепереносится из программы в программу, допускает раздельную отладку, поэтому и прощеотлаживается и является естественным для процессов управления.
Далее рассмотрим процесс разработки такого диспетчера.Контрольные вопросы.1. Этапы и выполняемые работы при разработке программного обеспечения микроконтроллеров.2. Обеспечение работы ПО ЛМК в жестком реальном времени.3. Особенности разработки программного обеспечения ЛМК.4. Ошибки ПО на логическом и физическом уровне и методы их устранения.515.2. Диспетчер процессов для МК семейства MCS-51.Функции диспетчера процессов.Диспетчер процессов является минимальным ядром базовой операционной системы«жесткого» реального времени. Хороший диспетчер процессов должен:1) представлять пользователю гибкий программный интерфейс для управления очередностью запуска процессов во времени (синхрокванты) и запускать процессы взависимости от внешних событий в порядке очереди (интеркванты), либо безочереди (экстракванты);2) занимать минимальный объем резидентного ОЗУ, не ограничивать пользователя виспользовании регистров общего назначения и других ресурсов микроконтроллера;3) минимально загружать процессор процессом диспетчирования.Проектируемый диспетчер предназначен для управления синхроквантами, рядом интерквантов, перезапускаемых внешними событиями и экстраквантами, запускаемыми отдвух входов прерываний.Реальное время будет отсчитываться в диспетчере процессов с помощью коротких«тиков» с длительностью, определяемой пользователем и способной изменяться в пределахот долей миллисекунды до нескольких десятков миллисекунд и длинных тиков, длительность которых в 256 раз больше, чем у коротких.
Может быть, несколько странная системаотсчета времени по сравнению с привычными секундами, минутами и часами, но удобнаядля реализации в микроконтроллере. Реальное время будет фиксироваться и обрабатываться программой обработки прерываний таймера Т/С0. Этот таймер занят базовой операционной системой.
Пользователь в своей управляющей программе свободно может использоватьтаймер Т/С1.Процессы (синхрокванты) могут быть запущены на выполнение с задержкой до 255тиков (коротких или длинных). Тогда реализуемая диспетчером задержка синхроквантабудет составлять от одной миллисекунды (при тике в 1 мс) до минуты (65,536 с).Синхроквант будет управляться двумя флагами – статусом кванта и флагом кванта.Статус кванта предусмотрен для управления им из программы пользователя, флаг таймерабудет устанавливаться таймером при истечении заданной в кванте задержки времени.Квант будет запущен диспетчером, если установлены его статус и флаг.Распределение переменных диспетчера в памяти МКЕсли при программировании на языках высокого уровня переменным просто задаются символические имена и определяется их тип, при программировании на ассемблереесть возможность явно определить расположение переменных в адресном пространстверезидентной оперативной памяти МК.
Это повышает эффективность использования памяти и быстродействие программы.Проведем распределение переменных в памяти, отведем для хранения статусов ифлагов два байта из зоны битового процессора, что позволит нам эффективно работать сотдельными битами (очищать CLR bit и устанавливать их SETB bit командами битовогопроцессора).Ячейка резидентной памяти микроконтроллера с адресом 20h будет регистромстатусов квантов, каждый ее бит содержит статус соответствующего кванта в соответствиис таблицей 1. Биты этого регистра устанавливаются программно пользователем. Если пользователь хочет запустить какой-либо квант или периодически перезапускать его по истечениизаданной задержки, он должен установить в единицу статус этого кванта.
Если квант запускать не нужно – очистить соответствующий бит.52Таблица 5.1.Содержимое регистра статусов квантов (ячейки 20h)№ бита7Адрес бита 7Назначение SPR766SPR655SPR544SPR433SPR322SPR211SPR100SPR0Ячейка резидентной памяти микроконтроллера с адресом 21h будет регистромфлагов квантов, каждый ее бит содержит флаг соответствующего кванта в соответствиис таблицей 2. Флаги квантов устанавливаются в подпрограмме обработки прерыванийтаймера Т/С0. Такое двойное управление квантом с помощью флагов и статусов сделанодля того, чтобы максимально сократить время обработки прерывания. В подпрограммедля всех возможных квантов уменьшаются задержки и устанавливаются флаги, когда задержка истечет, а решение о запуске кванта примет диспетчер, если пользователем в своей программе установлен статус соответствующего кванта.Таблица 5.2.Содержимое регистра флагов квантов (ячейки 21h)№ бита7Адрес бита FhНазначение FPR76EhFPR65DhFPR54ChFPR43BhFPR32AhFPR219FPR108FPR0Ячейка с адресом 22h будет регистром размерности задержек квантов (устанавливается пользователем).
Если в соответствующий кванту бит записана единица, задержка отсчитывается в больших тиках, если ноль, в малых.Таблица 5.3.Содержимое регистра разрядности задержек квантов (ячейки 22h)№ бита76543210Адрес бита 17h16h15h14h13h12h11h10hНазначение RPR7RPR6RPR5RPR4RPR3RPR2RPR1RPR0Ячейка с адресом 23h – счетный регистр малых тиков. Система отсчета времениведется в малых тиках, период которых может быть настроен пользователем (исходнодлительность малого тика 1 мс) и в больших тиках, содержащих 256 малых. Тик, совпадающий с обнулением ячейки 23h, считается большим.Создадим систему отсчета реального времени. Таймер микроконтроллера может работать в четырех режимах (см. гл. 3.2).