Программирование микроконтроллеров 1986ВЕ9x компании Миландр. Контрольные вопросы для самопроверки. Предназначено для студентов технических высших учебных заведений очной и заочной формы обучения, аспирантов, инженерно-технических работников
26 ради оптимизации кода. Комментарии бывают многострочными (начинаются с символов /* и заканчиваются символами */) и однострочными (начинаются с символов //). /* Многострочный комментарий нередко размещают в начале файла, где он содержит имя автора и описание программы */ #include "MDR32Fx.h" // Подключаем заголовочный файл MDR32Fx.h Построим проект, нажав клавишу F7. Под построением понимают компиляцию всех модулей, входящих в состав проекта, их ассемблирование и компоновку. То же действие доступно и через пункт главного меню Project – Build target или через кнопку на панели инструментов. Заметим, что иногда полезно бывает полностью перестроить проект, выбрав пункт меню Project – Rebuild all target files или нажав кнопку (горячая клавиша не предусмотрена). Разница между построением и перестроением проекта заключается в том, что в процессе перестроения заново компилируются все модули, а при построении – только те, которые подверглись изменению после последней компиляции. Перестроение занимает больше времени, но работает надежней. Результатом построения проекта является так называемый HEX-файл, предназначенный для загрузки в память микроконтроллера. Формат HEX, предложенный в свое время фирмой Intel, предназначен для представления произвольных двоичных данных в текстовом виде. Если открыть такой файл обычным текстовым редактором, то он будет состоять из строк шестнадцатеричных цифр, поэтому его и называют «HEX» – от английского слова «hexadecimal» – «шестнадцатеричная система счисления». Результаты построения отображаются в нижнем окне Build Output. Далее приведен в сокращенном виде пример сообщений, полученных при полном перестроении проекта.
27 Rebuild target 'MDR32F92QI' compiling main.c... compiling led.c... compiling rst.c... compiling MDR32F9Qx_it.c... compiling MDR32F9Qx_port.c... compiling MDR32F9Qx_rst_clk.c... assembling startup_MDR32F9Qx.s... compiling Retarget.c... compiling RTX_Conf_CM.c... linking... Program Size: Code=4524 RO-data=268 RW-data=44 ZI-data=6820 ".\MDR32F92QI\MDR32F92QI.axf" - 0 Errors, 0 Warning(s). Как видно из примера, сначала были откомпилированы все модули на языке Си (файлы с расширением *.c) и ассемблирован вспомогательный модуль startup_MDR32F9Qx.s, написанный на языке ассемблер. Затем все модули были скомпонованы. Процесс построения прошел без ошибок и замечаний: 0 Errors, 0 Warning(s). Если же в процессе компиляции или компоновки возникнут ошибки, что часто бывает в процессе написания и отладки программ, то соответствующие сообщения появятся в этом окне. В строке Program Size приводятся важнейшие характеристики полученной программы – занимаемая ей память и ее объем: Code=4572 – программный код занимает 4572 байта флеш-памяти; RO-data=268 – постоянные данные (различные константы) занимают 268 байт флеш-памяти; RW-data=44 – оперативные данные (переменные), которые инициализируются ненулевыми значениями, занимают 44 байта ОЗУ. Для хранения инициализационных значений также приходится выделить 44 байта во флеш-памяти; ZI-data=6820 – оперативные данные (переменные), которые инициализируются нулями, занимают 6820 байта ОЗУ. Таким образом, общий объем требуемой флеш-памяти составляет: Code + RO + RW = 4572 + 268 + 44 = 4884 (байта). Общий объем требуемой оперативной памяти составляет: ZI + RW = 6820 + 44 = 6864 (байта).
28 Создавая проект надо всегда помнить, что объем памяти микроконтроллера ограничен, и нужно укладываться в установленные рамки. Напомним, что для нашего микроконтроллера K1986ВЕ92QI объем флешпамяти программ составляет 128 Кбайт, а оперативной памяти данных – 32 Кбайт. Кроме того, в ознакомительной версии Keil µVision MDK-ARM, которой вы сейчас пользуетесь, установлено ограничение в 32 Кбайта флеш-памяти. Вплотную к этим показателям приближаться не следует. Лучше всегда иметь запас хотя бы в 10%. Если памяти не хватает, то можно порекомендовать такие действия: оптимизировать программный код по объему, используя соответствующую директиву компилятора; использовать микроконтроллер того же семейства, но с большим объемом флеш-памяти программ или ОЗУ; использовать менее ресурсоемкие алгоритмы. Результатом построения проекта являются файлы Lab1_1.axf и Lab1_1.hex . Файл Lab1_1.axf содержит в себе исполняемый код и необходимую отладочную информацию. Он применяется для отладки программы в среде Keil. Файл Lab1_1.hex, как уже говорилось, содержит готовую «прошивку» для микроконтроллера в формате HEX. Стоит отметить, что имея готовый HEX-файл, можно загружать в микроконтроллер программу и без среды Keil, используя другие программные средства. 1.7. Структура проекта в Keil µVision Проект программы для микроконтроллера в среде Keil µVision представляет собой достаточно сложную совокупность файлов, каталогов и настроек. Поэтому при начальном знакомстве со средой Keil µVision рекомендуется не создавать новый проект, проводя многочисленные настройки, а воспользоваться уже созданным проектом, внеся в него необходимые изменения. Впрочем, такой подход широко используется и при разработке серьезных приложений. 1.7.1. Модули проекта Во-первых, проект состоит из модулей, написанных на языках Си, С++ или ассемблер. Напомним, что модуль на языке Си, как правило, состоит из