Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микроконтроллеры семейства MCS-196.DOC
Скачиваний:
67
Добавлен:
02.05.2014
Размер:
1.09 Mб
Скачать

2.7. Работа с пакетом pds

Приложение PDS-96 предоставляет функции компилятора, линковщика, а также дебаггера с возможностью просмотра состояния процессора, памяти и периферийных устройств для однокристальных микро ЭВМ серии MCS-96. Оно имеет удобный интерфейс:

  • все основные команды представлены на панели инструментов (toolbar).

  • ключевые слова подсвечиваются;

  • в заголовочных файлах *.inc отождествлены имена SFR (регистры специальных функций ) и их местоположения в памяти, а также объявлены регистры общего назначения AX, AL, AH, BX и т. д.;

  • состояние каждого периферийного устройства и памяти может быть представлено в отдельном окне;

  • состояния устройств и памяти можно изменять, нажав на кнопку Modify, находящуюся рядом с заголовком соответствующего окна.

Вид панели инструментов представлен на рисунке ХХХХХ.

Рисунок ХХХХХ :1- (Open project) открыть новый проект; 2- (Make) компилирует и линкует проект при условии, что текст программы был изменён; 3 - (Build ) делает предыдущие операции в любом случае; 4 - (Tools setup) настройка инструментов (далее будет рассмотрена подробно); 5 - (Load program) загружает файл *.mce; 6- (Reload program) аналогично (3); 7- (High-level step) выполняет одну команду Си или Ассемблера; 8 - (High-level step over) выполняет одну команду Си или Ассемблера или вызов функции; 9 - (Run) запуск программы на исполнение; 10 - (Step back) переход на предыдущую команду с восстановлением состояния системы в тот момент; 11- (CPU reset) сброс процессора; 12 - (Low-level step) выполняет одну команду Ассемблера (даже если идёт трассировка СИ); 13 - (Low-level step over) выполняет одну команду Ассемблера или вызов функции;14 - (Add watch) добавить к списку просматриваемых переменных ещё одну; 15 - (Inspect) аналогично (14), но просматриваются также структуры и указатели; 16 - (Redraw screen) обновление экрана; 17 - (Auto-step/Redraw setup) настройка пауз между шагами; 18 - (Script files) Открыть командный файл (используется для эмуляции внешней среды); 19 - (Start programmer) запустить программу интерфейса с программатором

Система построена по принципу автоматического размещения сегментов программы в памяти. Существует понятие областей памяти. Сегменты программы должны быть размещены по областям памяти. По умолчанию созданы области ROM, RAM, UPPER_REGFILE (верхний регистровый файл), default_reg (нижний регистровый файл). Можно удалять текущие и добавлять свои.

Для распределения сегментов по областям нужно воспользоваться кнопкой Tools setup (4) на панели инструментов. Выбрав пункт Address areas, получаем доступ к списку областей адресного пространства. При нажатии кнопки Edit появляется окно, в котором можно изменять параметры области, а также добавлять или удалять имена размещаемых в ней сегментов. С помощью галочки (check box) рядом со строкой Allow code placement можно разрешать или запрещать размещение кода в данной области; можно также выбирать тип памяти, где располагается область (регистры процессора или внешняя память).

Чтобы определить расположение стека и его размер необходимо после нажатия кнопки Tools setup выделить пункт Linker (компоновщик) и нажать Edit. В появившемся окне будет доступна информация о стеке, а также о подключаемых библиотеках (для корректной работы с Ассемблером библиотека Ассемблера должна быть подключена, а Си - нет).

Более подробно остановимся на сегментах. Здесь их может быть два типа: абсолютный (aseg) и перемещаемый (rseg). Абсолютные сегменты имеют жесткое расположение в памяти, заданное пользователем (директива .org), а перемещаемые размещаются компоновщиком без привязки к определённому адресу. При объявлении нужно обязательно указывать расположение (reg или mem).

Итак, объявление сегмента имеет вид (.aseg| .rseg) <имя>, ( reg| mem).

Далее рассмотрим процедуры. Объявление их имеет вид .func <имя>.

Существуют зарезервированные имена процедур. Наиболее важные из них:

  • ?START – с неё всегда начинается выполнение программы аналогично main() в Си;

  • ?INTERRUPT00 - ?INTERRUPT17 – имена процедур обработки прерываний. Таким образом, если произошло прерывание, то осуществляется переход на одну из этих процедур, соответствующую прерыванию. Вектора прерываний настраиваются компилятором автоматически.

Любая процедура должна заканчиваться директивой .endf.

И в заключение рассмотрим важные для нас директивы компилятора:

  • .include ‘<имя файла>’ . Включает в текст программы содержимое файла;

  • <имя> .equ <выражение>. Присваивает имени значение выражения;

  • .public <имя>. Делает имя доступным из других модулей. Описанные выше имена;

  • ?START, ?INTERRUPT00 - ?INTERRUPT17 обязательно должны быть описанными как public;

  • <имя> .DSx [<выражение>]. Определяет переменную типа x, где х:

  • x=b – байт

  • x=w – слово

  • x=d – двойное слово;

  • .org <число>. Загружает счётчик команд (PC) указанным числом. Действует в этом виде только для сегментов типа .aseg; для .rseg нужно писать

  • .org $+<число>, где $ - текущее значение счётчика команд

  • .align <X>. Выравнивает значение счётчика команд

  • X=0 – без выравнивания

  • X=1 – по чётному значению адреса

  • X=2 – по значению адреса, делящемуся на 4;

  • необходима при выравнивании контрольного блока PTS;

  • #.sfa <имя сегмента>, #.sfe< имя сегмента > - возвращают соответственно адрес начала и конца сегмента; #.sfe необходима при загрузке указателя стека (SP);

  • .end – означает окончание текста программы.

После того, как программа будет успешно набрана и откомпилирована, необходимо сохранить объектный код. По существу, последний является образом внешней памяти и, соответственно, начинается с адреса 2000h. Сохранить код можно в меню File/Save file from CPU memory… , где Вам предложат выбрать адресный диапазон, а также имя файла для сохранения. В качестве стартового адреса, как уже было оговорено, берется 2000h. Что касается длины, то ее можно сразу взять по максимуму – 0800h, именно столько информации помещается в ОЗУ стенда, то есть, конечный адрес равен 27FFh. Тип файла – Binary image. Теперь сохраняем, и можно начать тестирование программы на реальном процессоре.