Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт
Шрифт:
Интервал:
Закладка:
• Барометром — прибором для измерения атмосферного давления. На аналоговом выходе электронного преобразователя сигнала барометра формируется напряжение в диапазоне 0…5,0 В. Давлению в 640 мм рт. ст. соответствует напряжение 0 В, давлению 810 мм рт. ст. — напряжение 5,0 В. Преобразователь обладает линейной передаточной характеристикой.
• Гигрометром — прибором для измерения влажности воздуха. Гигрометр также оснащен электронным преобразователем сигнала с линейной передаточной характеристикой. Относительной влажности 0% соответствует напряжение 0 В, влажности 100% — напряжение 5,0 В.
• Термометром — прибором для измерения температуры воздуха. Температуре 50°C соответствует напряжение 0 В, температуре +120°C — напряжение 5,0 В. Передаточная характеристика преобразователя сигнала — линейная.
• Флюгером — прибором для определения направления ветра. Напряжение на выходе электронного преобразователя прямо пропорционально углу поворота флюгера. Напряжение 0 В формируется при положении стрелки «север», далее напряжение линейно возрастает, при положении стрелки «юг» напряжение равно 2,5 В, и на повороте в 180 град. эл. продолжает линейно возрастать до 5,0 В.
Проектируемая система должна уметь делать следующее:
• Станция должна периодически, один раз в 15 мин. передавать по радиоканалу информацию об измеренных значениях величин с выхода датчиков. Если скорость ветра превышает установленное значение, защитная панель станции должна автоматически закрывать окно солнечной батареи (рис. 2.10).
Рис. 2.10. Портативная метеостанция
• Измеритель уровня осадков должен периодически очищаться.
• Кроме передачи информации об измеренных значениях с выхода датчиков, аналогичная информация должна отображаться на местном жидкокристаллическом индикаторе.
Разработайте структуру функций для управления такой станцией. Разработка передатчика не является Вашей задачей, Вы должны лишь подготовить собранные данные для передачи по радиоканалу.
3. Выберите один из домашних приборов, которые управляются встроенным контроллером. Разработайте структуру функций управления для одного из этих приложений. Выберите прибор из списка: микроволновая печь, холодильник, музыкальный центр.
4. Разработайте диаграмму действий UML для выбранного домашнего прибора.
Глава 3
ОСНОВЫ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ НА СИ
ПОСЛЕ ИЗУЧЕНИЯ ГЛАВЫ ВЫ СМОЖЕТЕ:
• Описать основные конструкции языка Си;
• Написать на Си простые программы для встроенных систем на основе микроконтроллеров;
• Объяснять последовательность действий, необходимую для получения исполняемого фрагмента кодов для МК 68HC12 и HCS12;
• Объяснить назначение отдельных программ в составе интегрированной среды разработки, позволяющие редактировать, компилировать, ассемблировать, объединять и отлаживать программные фрагменты управляющего кода будущих встраиваемых систем.
В главе 3 рассматривается технология написания и отладки программ на языке Си для микроконтроллеров 68НС12 и HCS12. На протяжении всей главы мы не будем делать различия между этими двумя типами МК и, как следствие, будем использовать для ссылок общую аббревиатуру 68HC12. Основное наше внимание будет уделено технике программирования на языке Си. Однако это не означает, что программирование на языке ассемблера может быть полностью забыто. Включение в исходный текст Си-программы фрагментов на языке ассемблера позволяет создать эффективный исполняемый код в критичных по времени исполнения задачах. Вопросы объединения программных фрагментов, записанных на Си и на ассемблере, также рассматриваются в данной главе.
Мы покажем, как из исходного текста программы, записанного на Си, создать файл исполняемого кода для микроконтроллера, используя для этого программы компилятора, ассемблера, линковщика и загрузчика в составе программного пакета ICC12 от компании Imagecraft (http:/www.imagekraft.com). Программный продукт ICC12 — достаточно простой в управлении, недорогой, но обладающий всеми необходимыми типовыми функциями программный пакет класса «интегрированная среда разработки и отладки программ управления для встраиваемых систем». Технология создания программного обеспечения для встраиваемых микроконтроллерных систем с использованием перечисленных выше программ в составе интегрированной среды разработки IDE (Integrated Development Environment) обладает достаточной степенью универсальности. Поэтому навыки создания и отладки программ для МК 68HC12, полученные с использованием пакета ICC12, могут быть использованы читателем при программировании 68HC12 или иных типов микроконтроллеров с использованием других более развитых программных пакетов IDE, например Code Warrior от компании Metrowerks (http:/www.metrowerks.com).
В этой главе мы обсудим технологию отладки программы, написанной на языке Си, в процессе ее исполнения реальным микроконтроллером. Все МК семейства 68HC12 обладают специальным режимом отладки в реальном времени BDM (Background Debug Mode). Мы рассмотрим основные свойства режима BDM в этой главе. В заключение мы приведем подробный пример преобразования исходного текста программы на Си в файл исполняемого кода для выбранного типа МК средствами программ, входящих в пакет интегрированной среды разработки IDE ICC12.
3.1. Введение в программирование на Си
В главе 2 было отмечено, что язык Си стал одним из наиболее часто используемых в техническом сообществе языков программирования высокого уровня. Связано это с тем, что при сохранении абстрактного характера представления алгоритмов и данных, которое свойственно языкам программирования высокого уровня, язык Си позволяет программистам непосредственно управлять компонентами аппаратных средств компьютеров и микроконтроллеров. Например, в Си программист имеет возможность непосредственного обращения к содержимому ячеек памяти и регистров периферийных модулей с конкретными физическими адресами, что свойственно языку ассемблер.
Для того чтобы начать программировать микроконтроллеры 68НС12 на Си, мы должны сначала изучить основные конструкции этого языка, которые и рассматриваются в следующих параграфах главы 3. Следует заметить, что в этих параграфах приведен лишь минимально необходимый набор сведений по Си. Для более полного знакомства с этим языком программирования читателю следует обратиться к специальной литературе. Список рекомендуемых авторами изданий приведен в конце главы.
Си — это структурированный язык программирования. Для записи программ на языке Си используются идентификаторы, ключевые слова, числа и операторы, которые располагаются в тексте программы в соответствие с предписанными правилами. Идентификаторы — это определяемые пользователем имена переменных, функций, меток и объектов. В языке Си для того, чтобы использовать переменную в программе, её необходимо предварительно создать. Создать переменную — это значит выделить для её хранения одну или несколько ячеек памяти и присвоить ей имя, с помощью которого можно будет ссылаться на эту. В отличие от ассемблера, в языке Си необходимо указать также тип переменной. Тип служит для того, чтобы сообщить компилятору о том, как интерпретировать значение, хранящееся в ячейках памяти, отводимых под переменную. Например, имеет ли число знак (старший бит отводится для хранения знака) или старший бит является значащим разрядом числа и т. д.
3.1.1. Глобальные и локальные переменные
Каждая объявленная в начале программы переменная должна храниться в одной или нескольких ячейках памяти в течение времени исполнения программы. В микроконтроллерах переменные могут размещаться в ОЗУ, ПЗУ и регистрах центрального процессора.
В языке Си различают два типа переменных: глобальные переменные, к которым можно обратиться из любой функции программы, и локальные переменные, которые доступны только при исполнении той функции, в которой они были объявлены. В системах на микроконтроллерах, локальные переменные обычно размещаются в области стека.
Объявление различных идентификаторов в начале программы — особенность языка Си по сравнению с языком ассемблер. Служебные слова, которые будут сопровождать объявление идентификатора, определяют правила доступа к переменной, функции, макросу или структуре, которая именована этим идентификатором. Не все идентификаторы будут доступны из любого места программы на Си. Подробное описание служебных слов для объявления классов хранения переменных выходит за рамки этой главы. Вы можете найти его в [3].
В микроконтроллерах семейства 68НС12, переменные размещаются в ячейках памяти ПЗУ или ОЗУ. Переменная, которая не изменяет своего значения в течение выполнения программы, именуется константой и хранится в ПЗУ. Переменная, значение которой изменяется в процессе исполнения программы, должна храниться в ОЗУ. Например, предположим, что некоторый контроллер связан с датчиком температуры посредством аналого цифрового преобразователя. Прикладная программа должна постоянно обновлять значение температуры в памяти контроллера. Для этого объявим переменную с именем temp (от слова temperature — температура) и разместим ее в ОЗУ МК. Приведенный ниже фрагмент программы на Си демонстрирует, как обратиться к размещенной в ОЗУ переменной temp и отобразить ее значение на дисплее. Заметим, что номера строк в приводимых фрагментах программ не являются частью записи операторов языка Си и не должны присутствовать в исходном тексте программы, подлежащем компиляции. Они введены искусственно для ссылки на отдельные операторы при обсуждении конструкций языка Си.