Расширения файлов, используемые MPASM и утилитами
Лекция 12. Разработка программного обеспечения для PIC микроконтроллеров
В этой лекции рассматриваются основные этапы разработки программного обеспечения микроконтроллеров, а также приводится обзор основных программ для разработки и отладки программного обеспечения PIC - микроконтроллеров.
Ключевые слова:разработка, программное обеспечение, ассемблер, симулятор.
Разработка программного обеспечения для PIC микроконтроллеров
Разработка программного обеспечения является центральным моментом общего процесса проектирования. Центр тяжести функциональных свойств современных цифровых систем находится именно в программных средствах.
Основным инструментом для профессиональной разработки программ является ассемблер, предполагающий детализацию на уровне команд МК. Только ассемблер позволяет максимально использовать ресурсы кристалла.
Для микроконтроллеров PIC выпущено большое количество различных средств разработки. В данной главе речь пойдет о средствах, предоставляемых фирмой Microchip, которые весьма эффективны и широко используются на практике.
Ассемблер MPASM
Ассемблер MPASM представляет собой интегрированную программную среду для разработки программных кодов PIC микроконтроллеров всех семейств. Выпускается фирмой Microchip в двух вариантах: для работы под DOS и для работы под Windows 95/98/NT. Ассемблер MPASM может использоваться как самостоятельно, так и в составе интегрированной среды разработки MPLAB. Он включает несколько программ: собственно MPASM, MPLINK и MPLIB, причем каждая из них обладает собственным интерфейсом.
Программа MPASM может использоваться для двух целей: • генерации исполняемого (абсолютного) кода, предназначенного для записи в МК с помощью программатора;
• генерации перемещаемого объектного кода, который затем будет связан с другими ассемблированными или компилированными модулями.
Исполняемый код является для MPASM выходным кодом по умолчанию. При этом все переменные источника должны быть явно описаны в тексте программы или в файле, подключаемом с помощью директивы INCLUDE <filename>. Если при ассемблировании не выявляется ошибок, то генерируется выходной .hex-файл, который может быть загружен в МК с помощью программатора.
При использовании ассемблера MPASM в режиме генерации перемещаемого объектного кода формируются объектные модули, которые могут быть впоследствии объединены с другими модулями при помощи компоновщика MPLINK. Программа-компоновщик MPLINK преобразует перемещаемые объектные коды в исполняемый бинарный код, привязанный к абсолютным адресам МК. Библиотечная утилита MPLIB позволяет для удобства работы сгруппировать перемещаемые объекты в один файл или библиотеку. Эти библиотеки могут быть связаны компоновщиком MPLINK в файл выходного объектного кода ассемблера MPASM.
Программы MPASM и MPLINK доступны через оболочку MPASM, тогда как MPLIB доступна только со своей командной строки.
Исходным файлом для ассемблера MPASM по умолчанию является файл с расширением .ASM. Текст исходного файла должен соответствовать требованиям синтаксиса, приведенным далее.
Ассемблер MPASM может быть вызван командной строкой
MPASM [/<Option>[ /«Dption>...]] <file_name>
где /<Option> означает выбор режима работы ассемблера в командной строке; <file_namc> - имя файла на ассемблирование.
Режимы работы ассемблера, выбранные по умолчанию, приведены в табл. 6.1.
Табл. 6.1.Режимы работы ассемблера по умолчанию.
Табл. 6.1.Режимы работы ассемблера по умолчанию (продолжение).
Здесь и далее используются следующие соглашения по использованию символов:
[ ] - для аргументов по выбору;
< > - для выделения специальных ключей <ТАВ>, <LSC> или дополнительного выбора;
| — для взаимоисключающих аргументов (выбор ИЛИ);
строчные символы - для обозначения типа данных.
Выбор по умолчанию, приведенный в табл. 6.1, может быть изменен командной строкой:
/<option> разрешает выбор;
/<option>+ разрешает выбор;
/<option> - запрещает выбор.
Исходный ассемблерный файл создается с использованием любого ASCII текстового редактора. Каждая линия исходного файла может содержать до четырех типов информации:
• метки (labels)
• мнемоника (mnemonics)
• операнды (operands)
• комментарий (comments)
Порядок и положение каждого типа имеет значение. Метка должна начинаться в колонке номер один. Мнемоника может начинаться в колонке два или далее. Операнды идут за мнемоникой. Комментарий может следовать за операндом, мнемоникой или меткой или может начинаться в любом столбце, если в качестве первого не пустого символа используется * или ;.
Максимальная длина строки 255 символов.
Один или несколько пробелов должны отделять метку и мнемонику или мнемонику и операнд(ы). Операнды могут отделяться запятой. Например:
List p=16C54, г=НЕХ
ORG OxIFF ;Вектор сброса
GOTO START ; Возврат на начало
ORG 0x000 ;Адрес начала исполнения программы START
MOVLW ОхОА ;Выполнение программы PIC MK
MOVLW ОхОВ ;
GOTO START ;Выполнять всегда
END
Метки
В поле метки размещается символическое имя ячейки памяти, в которой хранится отмеченный операнд. Все метки должны начинаться в колонке 1. За ними может следовать двоеточие (:), пробел, табуляция или конец строки. Комментарий может также начинаться в колонке 1, если используется одно из обозначений комментария.
Метка может начинаться с символа или нижнего тире (_) и содержать буквенные символы, числа, нижние тире и знак вопроса. Длина метки может быть до 32 символов.
Мнемоники
Мнемоники представляют собой мнемонические обозначения команды, которые непосредственно транслируются в машинный код. Мнемоники ассемблерных инструкций, директивы ассемблера и макровызовы должны начинаться, по крайней мере, в колонке 2. Если есть метка на той же линии, она должна быть отделена от этой метки двоеточием или одним или более пробелами или табуляцией.
Операнды
В этом поле определяются операнды (или операнд), участвующие в операции. Операнды должны быть отделены от мнемоники одним или более пробелами или табуляцией. Операнды отделяются друг от друга запятыми. Если операция требует фиксированного номера (числа) или операндов, то все на линии после операндов игнорируется. Комментарии разрешаются в конце линии. Если мнемоники позволяют использовать различное число операндов, конец списка операндов определяется концом строки или комментарием.
Выражения используются в поле операнда и могут содержать константы, символы или любые комбинации констант и символов, разделенных арифметическими операторами. Перед каждой константой или символом может стоять + или - , что указывает на положительное или отрицательное выражение.
В ассемблере MPASM используются следующие форматы выражений:
• текстовая строка;
• числовые константы и Radix;
• арифметические операторы и приоритеты;
• High / Low операторы.
Текстовая строка — это последовательность любых допустимых ASCII символов (в десятичном диапазоне от 0 до 127), заключенная в двойные кавычки. Строка может иметь любую длину в пределах 132 колонок. При отсутствии ограничения строки она считается до конца линии. Если строка используется как буквенный операнд, она должна иметь длину в один символ, иначе будет ошибка.
Числовая константа представляет собой число, выраженное в некоторой системе счисления. Перед константой может стоять + или -. Промежуточные величины в константах рассматриваются как 32-разрядные целые без знака.
MPASM поддерживает следующие системы счисления (представления значений или Radix): шестнадцатиричную, десятичную, восьмиричную, двоичную и символьную. По умолчанию принимается шестнадцатиричная система. Табл. 6.2 представляет различные системы счисления.
Операторы - это арифметические символы, подобные + и -, которые используются при формировании выражений. Каждый оператор имеет свой
приоритет. В общем случае приоритет устанавливается слева направо, а выражения в скобках оцениваются первыми. В табл. 6.3 приведены обозначения, описания и примеры применения основных операторов MPASM.
Табл. 6.2.Системы счисления (Radix).
Табл. 6.3.Основные арифметические операторы MPASM.
Табл. 6.3.Основные арифметические операторы MPASM (продолжение).
Операторы high, low и upper используются для получения одного байта из многобайтного значения, соответствующего метке. Применяются для
управления расчетом точек динамического перехода при чтении таблиц и записи программ.
Операторы инкремента и декремента могут применяться к переменной только в качестве единственного оператора в строке. Они не могут быть встроенным фрагментом более сложного выражения.
Комментарии
Поле комментария может использоваться программистом для текстового или символьного пояснения логической организации программы. Поле комментария полностью игнорируется ассемблером, поэтому в нем можно применять любые символы. Комментарии, которые используются в строке сами по себе, должны начинаться с символа комментария (* или ;). Комментарии в конце строки должны быть отделены от остатка строки одним или более пробелами или табуляцией.
Расширения файлов, используемые MPASM и утилитами
Существует ряд расширений файлов, применяемых по умолчанию MPASM и связанными утилитами. Назначения таких расширений приведены в табл. 6.4.
Табл. 6.4.Используемые по умолчанию назначения расширений файлов.
Табл. 6.4.Используемые по умолчанию назначения расширений файлов (продолжение).
Листинг представляет собой текстовый файл в формате ASCII, который содержит машинные коды, сгенерированные в соответствии с каждой ассемблерной командой, директивой ассемблера или макрокомандой исходного файла. Файл листинга содержит: имя продукта и версии, дату и время, номер страницы вверху каждой страницы.
В состав листинга входят также таблица символов и карта использования памяти. В таблице символов перечисляются все символы, которые есть в программе, и где они определены. Карта использования памяти дает графическое представление о расходовании памяти МК.
Директивы языка
Директивы языка - это ассемблерные команды, которые встречаются в исходном коде, но не транслируются прямо в исполняемые коды. Они используются ассемблером при трактовке мнемоники входного файла, размещении данных и формировании файла листинга.
Существует четыре основных типа директив в М PAS M:
• директивы данных;
• директивы листинга;
• управляющие директивы;
• макро-директивы.
Директивы данных управляют распределением памяти и обеспечивают доступ к символическим обозначениям данных.
Директивы листинга управляют листингом файла MPASM и форматом. Они определяют спецификацию заголовков, генерацию страниц и другие функции управления листингом.
Директивы управления позволяют произвести секционирование обычного ассемблерного кода.
Макро-директивы управляют исполнением и распределением данных в пределах определений макротела.
Ниже приводится описание некоторых директив ассемблера MPASM, используемых в данном учебном пособии.
CODE- начало секции объектного кода Синтаксис:
[<label>] code [ROM address>]
Используется при генерации объектных модулей. Объявляет начало секции программного кода. Если <label> не указана, секция будет названа .code Стартовый адрес устанавливается равным указанному значению или нулю, если адрес не был указан.
Пример:
RESET code H'OtFF goto START
#DEFINE - определить метку замены текста Синтаксис:
«define <name> [<string>]
Директива задает строку <string>, замещающую метку <name> всякий раз, когда та будет встречаться в исходном тексте.
Символы, которые определены директивой #DEFINE, не могут быть просмотрены симулятором. Используйте вместо этой директивы EQU.
Пример:
#define length 20
tfdefine control 0x19,7
tfdefine position (X.YZ) (y-(2 * Z +X)).
testjabel dw position(1, length, 512)
bsf control ; установить в 1 бит 7 в f 19
END - конец программного блока Синтаксис:
end
Определяет конец программы. После остановки программы таблица символов сбрасывается в файл листинга. Пример:
start ;исполняемый код
end ; конец программы
EQU - определить ассемблерную константу Синтаксис:
<label> equ <expr>
Здесь <ехрг> — это правильное MPASM выражение. Значение выражения присваивается метке <label>. Пример:
four equ 4 ; присваивает численное значение метке four
INCLUDE- включить дополнительный файл источника Синтаксис:
include «include_file» include "<include_file>"
Определяемый файл считывается как источник кода. По окончании включаемого файла будет продолжаться ассемблирование исходника. Допускается до шести уровней вложенности. <include_file> может быть заключен в кавычки или угловые скобки. Если указан полный пуп. к файлу, то поиск будет происходить только по этому пути. В противном случае порядок поиска следующий: текущий рабочий каталог, каталог, в котором находится исходник, каталог MPASM.
Пример:
include "c:\sys\sysdefs.inc"; system defs include <addmain.asm> ; register defs
LIST — установить параметры листинга Синтаксис:
list [<list_option>, , <list_option>]
Директива <list> разрешает вывод листинга, если он до этого был запрещен. Кроме того, один из параметров листинга может быть изменен для управления процессом ассемблирования в соответствии с табл. 6.5.
Табл. 6.5. Параметры, используемые директивой list.
NOLIST - выключить выход листинга Синтаксис:
NOLIST
ORG - установить начальный адрес программы Синтаксис:
<label> org <expr>
Устанавливает начальный адрес программы для последующего кода в соответствии с адресом в <expr>. MPASM выводит перемещаемый объектный код, a MPLINK разместит код по определенному адресу. Если метка <label> определена, то ей будет присвоена величина <ехрг>. По умолчанию начальный адрес имеет нулевое значение. Директива может не использоваться, если создается объектный модуль.
Пример:
int_1 org 0x20; Переход по вектору 20 int_2 org int_1+0x10; Переход по вектору 30
PROCESSOR - установить тип процессора Синтаксис:
processor <processor_type>
Устанавливает тип используемого процессора <processor_type>: [16С54 | 16С55 | 16С56 | 16С57 | 16С71 | 16С84 | 16F84 | 17С42]. Общие процессорные семейства могут быть выбраны как:[16С5Х| 16СХХ| 17СХХ| Для поддержания совместимости с новыми изделиями выбирается максимум доступной памяти.
SET - определить ассемблерную переменную Синтаксис:
<label> set <expr>
Директива SET функционально эквивалентна дирсктмнс I (.)(I, i.i исключением того, что величина, определяемая SET, можс? ьыи, и шгшмш директивой SET.
Пример:
area set 0 widthset 0x12 length set 0x14
area set length * width length set length + 1
TITLE— Определить программный заголовок Синтаксис:
title "<title_text>"
Эта директива устанавливает текст, который используется в верхней линии страницы листинга.<1Ше_1ех1> - это печатная ASCII последовательность, заключенная в двойные скобки. Она может быть до 60 символов длиной.
Пример
title "operational code, rev 5.0"
Компоновщик MPLINK
Абсолютный (неперемещаемый) код программы генерируется непосредственно при ассемблировании и располагается в программной памяти в порядке следования операторов программы. Операторы перехода на метку сразу же заменяются соответствующим кодом перехода на адрес метки.
При генерации перемещаемого кода каждая секция программного кода должна предваряться директивой CODE. Окончательное размещение программных кодов, расстановку физических адресов переходов выполняет компоновщик MPLINK.
Компоновщик MPLINK выполняет следующие задачи:
• распределяет коды и данные, т.е. определяет, в какой части программной памяти будут размещены коды и в какую область ОЗУ будут помещены переменные;
• распределяет адреса, т.е. присваивает ссылкам на внешние объекты в объектном файле конкретные физические адреса;
• генерирует исполняемый код, т.е. выдает файл в формате .hex, который может быть записан в память МК;
• отслеживает конфликты адресов, т.е. гарантирует, что программа или данные не будут размещаться в пространстве адресов, которое уже занято;
• предоставляет символьную информацию для отладки.
Для более подробного изучения работы компоновщика следует обратиться к специальной литературе.
Дата добавления: 2016-01-07; просмотров: 1076;