Каталог файлов

Главная » Все файлы » Книги по электронике (Электронная библиотека)

Выберите файл!!!


ПРОГРАММИРУЕМ МИКРОКОНТРОЛЛЕРЫ Z8 М.Гладштейн г.Рыбинск Часть 4. Универсальные утилиты объектных файлов
17.12.2009, 01:25
загрузка...
ПРОГРАММИРУЕМ МИКРОКОНТРОЛЛЕРЫ Z8
М.Гладштейн г.Рыбинск
Часть 4. Универсальные утилиты объектных файлов
Универсальные утилиты объектных файлов - это часть кросс- -системы программного обеспечения фирмы Zilog. Эти утилиты позволяют программисту компоновать, отображать и загружать объектные модули. Эти утилиты универсальны в том смысле, что они могут обрабатывать объектные модули, производимые любым ассемблером или компилятором в формате MUFOM [1].
Перечень утилит и их назначение приведены в табл. 1 [2]. Кроме упомянутых в [1], в набор утилит входят: преобразователь объектного формата mconv, дампер объектного кода mdump, утилиты для обслуживания библиотек объектных модулей mlib и mlorder, утилита связи с эмулятором protocol. Вместе с утилитами предлагается и библиотека стандартных подпрограмм для микроконтроллеров(МК) Z8, куда входят подпрограммы двоичной и двоично-десятичной арифметики, преобразований кодов, манипулирования битами и использования таймеров/счетчиков. Перечень стандартных подпрограмм приведен в табл.2.
Утилиты объектных файлов могут быть использованы различными способами. Для вызова утилиты необходимо указать в командной строке ее имя и параметры. Для задания последовательности выполнения утилит используют пакетные файлы. Так, например, рекомендуемый Zilog пакетный файл для разработки программ, состоящих из одного модуля, содержит следующие командные строки:
asmS8 -l -r -os -on -o %1.out -s asmS8 %1.s
mlink %1.out -k 3 -o %1.lnk
mload -i %1.lnk -o %1.hex
mnm -l -s -o %1.sym %1.lnk
mlist -o %1.lst -l %1.lnk
При запуске пакетного файла в командной строке надо указать имя пакетного файла и имя исходного файла программы (он должен иметь расширение ".s", которое не указывается).
Первая строка - это вызов ассемблера asmS8. Параметры, указанные в строке, имеют следующий смысл:
-l - формировать файл листинга с именем, указанным в
строке вызова пакетного файла, и расширением
".l";
-r - установить систему команд Z8;
-os - формировать объектный файл с исходными строками
в комментарии уровня 2;
-on - формировать объектный файл с именем файла и но-
мерами строк в комментарии уровня 1;
-o %1.out - присвоить выходному файлу объектного модуля имя
исходного с расширением ".out";
-s asmS8 - взять таблицу инициализации из файла asmS8;
%1.s - исходный файл - это файл с именем, указанным
при вызове пакета, и расширением ".s".
Вторая строка - это вызов компоновщика. Параметры, указанные в строке, имеют следующий смысл:
%1.out - входной файл компоновщика - это выходной файл
ассемблера;
-k 3 - сохранить комментарий до 3 уровня включительно
в выходном файле;
-o %1.lnk - присвоить выходному файлу компоновщика имя исходного с расширением ".lnk".
Третья строка - это вызов загрузчика. Параметры, указанные в строке, имеют следующий смысл:
-i - формировать загрузочный модуль в Intel Hex формате;
%1.lnk - входной файл загрузчика- это выходной файл компоновщика;
-o %1.hex - присвоить выходному файлу загрузчика имя исходного файла и расширение ".hex".
Четвертая строка - это вызов формирователя списка символов. Параметры, указанные в строке, имеют следующий смысл:
-l - включить локальные символы в список;
-s - свопинговый формат с именем, следующим первым в
строке (т.е. формат, где значение и имя переставлены местами, от слова swapping - перестановка);
-o %1.sym - присвоить выходному файлу имя исходного с рас¬ширением ".sym";
%1.lnk - входной файл - это выходной файл компоновщика.
Пятая строка - это вызов формирователя листинга объектного модуля. Параметры, указанные в строке, имеют следующий смысл:
-o %1.lst - присвоить выходному файлу имя исходного с расширением ".lst";
-l - длинный формат;
%1.lnk - входной файл - это выходной файл компоновщика.
Таким образом, если исходный файл был file.s, то в результате запуска пакетного файла будут сформированы следующие файлы:
file.out - ассемблированный объектный модуль;
file.l - листинг ассемблера;
file.lnk - скомпонованный объектный модуль;
file.hex - загрузочный модуль;
file.sym - файл символов;
file.lst - листинг программы.
Это полностью соответствует схеме разработки программ, приведенной в [1]. Примеры исходного файла, листинга ассемблера с ошибками, файла символов, загрузочного модуля и листинга программы для демонстрационного примера МИГАНИЕ СВЕТОДИОДА (рис.1) приведены на рис. 2 - 6.
Демонстрационная программа обеспечивает управление миганием светодиода VD с частотой 1 Гц с длительностью засветки и длительностью паузы в 0,5 сек. Светодиод VD подключен к выводу P00 МК
( см. рис.1а ). Структура алгоритма ( см. рис.1б) включает глобальную инициализацию после включения питания и рабочий цикл полупериода индикации. При каждом проходе цикла происходит инициализация вычитающего счетчика времени полупериода и инвертирование выходного сигнала на выводе P00. В рабочий цикл вложен цикл отсчета времени. Квант отсчета времени составляет 10 мсек и фиксируется по прерыванию от таймера T1, работающего в циклическом режиме. Пока таймер считает, МК переводится в режим останова HALT. Прерывание от таймера никакой специальной обработки не требует, однако, после возврата в основную программу необходимо учесть очередной квант времени и проверить факт окончания полупериода.
Исходный файл demo.s демонстрационной программы ( см. рис.2) содержит заголовок с названием программы ( BLINKING - МИГАНИЕ ), объявление используемых регистров (Registers), констант (Cons¬tants), задание векторов прерывания (Interrupt Vectors), текст главной программы (Main Program) и подпрограммы обработки прерывания (Interrupt Service Routine). Вычитающий счетчик time размещен в регистре r4 рабочей группы регистров 0. Рабочая частота F задана в программе 8000 кГц. Для заданной частоты (она может быть впоследствии изменена) ассемблер будет вычислять значение модуля modulo1 предделителя PRE1 по заданному целочисленному выражению. Согласно этому выражению, период следования импульсов на выходе предделителя составит 50 мксек. Поэтому уставка таймера timer1 должна быть 200 (200*50=10000 мксек). Удобно, с точки зрения последующих коррекций программы, задать символами: управляющий байт для загрузки и пуска таймера T1 (run_tmr), уставку счетчика времени полупериода (t_blink) и маску вывода порта P0 (p00mask). Вектора прерывания размещаются с адреса 0000h (псевдокоманда .org). Каждый вектор задается псевдокомандой .word, в которой указывается адрес подпрограммы обработки соответствующего прерывания. Для неиспользуемых прерываний указан адрес 000Ch, соответствующий началу главной программы. Это сделано для того, чтобы в случае сбойной реакции на прерывание МК начал исполнять главную программу. В главной программе в качестве комментариев использованы номера операторов схемы алгоритма (см. рис.1б). Это сделано потому, что ассемблер не пропускает буквы русского алфавита. Для ясного понимания текста программы его следует анализировать совместно со схемой алгоритма (см. рис.1б), на которой приведены метки программы в точках ветвления. Подпрограмма обработки прерывания от таймера T1 содержит только команду возврата из прерывания iret, поскольку использована только функция задержки по времени и никакой обработки не требуется. Заканчивается текст программы псевдокомандой .end.
В файле листинга demo.l ассемблера (см. рис.3) зафиксировано четыре сообщения об ошибках (ERROR), которые вызваны тремя фактическими синтаксическими ошибками:
- в строке 33 в операнде ошибочно указана шестнадцатеричная система счисления (постфикс h) вместо двоичной (постфикс b), что привело к выходу значения из допустимого диапазона;
- в строке 34 пропущена буква u в операнде, в результате чего ассемблер посчитал его неопределенным символом;
- в строке 42 ошибка в мнемонике команды - вместо djnz написано dinz, в результате чего ассемблер не нашел кода операции в строке, а символ dinz квалифицировал как неопределенный (сразу два сообщения об ошибке).
После редактирования исходного файла и повторной обработки были получены список символов demo.sym (см. рис.4), загрузочный модуль в Intel Hex формате demo.hex (см.рис.5) и окончательный листинг demo.lst (см.рис.6).
Для программы, состоящей из двух модулей, следует использовать более сложный пакетный файл:
asms8 -l -r -os -on -o %1.out -s asms8 %1.s
asms8 -l -r -os -on -o %2.out -s asms8 %2.s
mlink %1.out %2.out -k 3 -o %3.lnk
mload -i %3.lnk -o %3.hex
mnm -l -s -o %3.sym %3.lnk
mlist -o %3.lst -l %3.lnk
При вызове этого пакетного файла в командной строке следует указать его имя и три параметра: имя файла первого модуля, имя файла второго модуля и имя файла всей программы (без расширений).
Аналогично можно составить пакетный файл для программы, состоящей из любого количества модулей, которое ограничивается толь¬ко размерами памяти компьютера.
Таким образом, программное обеспечение, включающее ассемблер и универсальные утилиты объектных файлов, позволяет создавать, документировать и сопровождать сложные прикладные программы, создавать, модифицировать и пополнять библиотеки типовых процедур.
ЛИТЕРАТУРА
1. Гладштейн М.А. Программируем микроконтроллеры Z8. Часть 2. Кроссредства для разработки прикладных программ микроконтроллеров.
2. Z8 Microcontrollers. User's Manual. - Zilog Inc., 1995.
Категория: Книги по электронике (Электронная библиотека) | Добавил: Администратор
Просмотров: 927 | Загрузок: 16 | Рейтинг: 0.0/0

Пожалуйста оставьте свои комментарии !!!!

Имя *:
Email:
Все смайлы
Код *:

Все ссылки на книги и журналы, представлены на этом сайте, исключительно для ознакомления, авторские права на эти публикации принадлежат авторам книг и издательствам журналов! Подробно тут!


Copyright Zloy Soft (Company) © 2008 - 2020