___МЕТОДИЧКИ_2013 / Пособие по ОСМПС (pdf) / 4_Технология программирования и отладки программ для МПС
.pdf4. ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ И ОТЛАДКИ ПРОГРАММ ДЛЯ МИКРОКОНТРОЛЛЕРОВ
4.1. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Технология разработки программ для микроконтроллеров включает в себя следующие этапы:
•написание текста программы;
•трансляция;
•отладка;
•прошивка программного кода в программную память микроконтроллера;
•опробование работоспособности программы на реальной схеме;
•анализ выявленных ошибок;
•корректировка программы по результатам опробования и повторная отладка. Рассмотрим эти этапы подробнее. Текст программы пишется на компьютере при
помощи обычного текстового редактора. Однако не каждый редактор подойдет для этой цели. Используемый вами редактор должен иметь возможность создавать текстовые файлы именно в том формате, который совместим с выбранным вами транслятором. В следующем разделе мы подробно коснемся этого вопроса. Написанная вами программа будет содержать ошибки. Этого не стоит пугаться. Даже опытный программист при написании программы практически всегда допускает ошибки.
Ошибки могут быть двух типов. Первый вид - это ошибки синтаксиса. То есть неправильное написание команд, ошибки в количестве параметров и т.д. Второй вид ошибок - это ошибки алгоритма. В этом случае текст с точки зрения синтаксиса написан правильно, но программа в результате делает не то, что вы от нее ожидаете. Первый тип ошибок транслятор обнаруживает автоматически в процессе трансляции и сообщает о них программисту. Второй тип ошибок транслятор обнаружить не может. Откуда ему знать, чего вы хотите от программы? Такие ошибки выявляются в процессе отладки программы.
Отладкой программы называют поэтапное выполнение написанной вами программы под управлением специальной программы - отладчика. Различают два вида отладчиков: программный и программно-аппаратный. Самый эффективный - это про- граммно-аппаратный отладчик (внутрисхемный эмулятор). Он представляет собой некую специальную схему, которая имитирует работу микроконтроллера. Эта схема управляется при помощи компьютера и специальной управляющей программы. Такая схема может выполнять программу точно так же, как и имитируемый ею микроконтроллер. Кроме этого, схема имеет ряд дополнительных возможностей, связанных с отладкой программ, таких как:
•Возможность выполнения отлаживаемой программы в пошаговом режиме.
•Возможность оперативного просмотра всех регистров микроконтроллера на экране компьютера.
•Возможность установки точек перехвата.
Внутрисхемный эмулятор будет подробно рассмотрен в разделе 11. Пошаговый режим - это такой режим, когда ход выполнения программы берется
под полный контроль управляющей программы. Программист дает команду «Сделать очередной шаг» и микроконтроллер выполняет одну очередную команду отлаживаемой программы. Это дает возможность шаг за шагом прогонять отлаживаемую программу, наблюдая при этом на экране компьютера ход ее выполнения и содержимое всех регистров процессора. Одновременно можно проверять по осциллографу или другими способами правильность формирования сигналов на всех выводах микроконтроллера.
Если отлаживаемая программа имеет достаточно большой размер, то для ее отладки пошаговый режим не всегда подходит. Если действовать только пошаговым способом, то пришлось бы слишком долго «шагать» до нужного места. В этом случае применяется прием постановки точек перехвата.
Точка перехвата - это некий адрес в программной памяти, в котором выполнение программы должно приостановиться. Любой отладчик способен запомнить несколько таких точек останова. После определения точки останова программа под управлением отладчика запускается на выполнение в автоматическом режиме. Если в ходе выполнения программы она дойдет до одного из адресов, отмеченных как точка останова, выполнение отлаживаемой программы приостановится. Отладчик покажет текущее содержимое регистров. Дальнейшая отладка возможна как в пошаговом режиме, так и повторный запуск программы в автоматическом режиме до следующей точки перехвата. Общий смысл всех этих действий - выявить те места программы, где ход ее выполнения не соответствует задуманному алгоритму.
Программно-аппаратный отладчик - это сложное и дорогое устройство. Его целесообразно применять на промышленных предприятиях и в научно-исследовательских учреждениях. Для индивидуальной и мелкосерийной разработки вполне можно обойтись программным отладчиком (симулятором). Он представляет собой программу, имитирующую работу процессора. Действует он аналогично программно-аппаратному варианту. Однако никаких сигналов не формируется. При отладке на таком отладчике можно проверить лишь ход выполнения программы. Оценить формируемые внешние сигналы можно только теоретически, косвенным путем.
После отладки программы нужно записать ее в программную память микроконтроллера и опробовать ее работу в реальной схеме. На техническом жаргоне это называется «прошить» микросхему. Для прошивки микроконтроллера применяется программатор. Программатор подключается к компьютеру и работает под управлением специальной управляющей программы. Программируемая микросхема вставляется в специальную панельку программатора. Затем, при помощи управляющей программы, вы запускаете процесс программирования.
Существуют разновидности микроконтроллеров с возможностью внутрисхемного программирования. В этом случае микроконтроллер программируется прямо в составе целевого устройства, а специальный программатор не нужен. Требуется лишь сравнительно простой загрузочный кабель, подключаемый к одному из портов ПК и к разъему внутрисхемного программирования на целевой плате.
Существуют программаторы разной степени сложности. Полнофункциональный программатор умеет выполнять следующие операции:
•записывать коды программы в программную память микроконтроллера;
•считывать коды из этой памяти;
•читать код производителя микросхемы;
•прошивать защитные биты, запрещающие чтение программы из памяти микросхемы;
•стирать программную память (одновременная очистка защитных битов). Защитные биты предохраняют вашу программу от несанкционированного копи-
рования. Если ваши конкуренты захотят повторить вашу конструкцию, то программу им придется писать заново.
Более простые программаторы не поддерживают полный набор вышеперечисленных функций. Они обычно имеют только самые необходимые из них. Например, программатор может производить лишь одну комбинированную операцию. За один запуск он сначала стирает программную память, а затем зашивает туда указанный вами про-
граммный код. В процессе отладки программы приходится «перешивать» программную память процессора множество раз.
Для разработки программ различных микропроцессорных устройств рекомендуется придерживаться определенной методики. Не нужно стараться создать сразу весь текст программы. Разработку программы удобнее делать по частям. Удобнее всего начать с программы вывода на индикатор. Создайте простейшую программу, выводящую на индикаторы любую подходящую надпись. Это будет лишь заготовка вашей будущей программы. Однако она должна иметь законченный вид и выводить на индикатор задуманную вами надпись.
Отладьте эту программу в отладчике. Запишите в микросхему и попробуйте на реальной схеме. Добейтесь, чтобы на индикаторе появилась задуманная вами надпись. Далее, когда программа вывода на индикатор будет готова, можно дополнить ее программой ввода с клавиатуры. Программу добавьте таким образом, чтобы при нажатии разных кнопок клавиатуры на индикатор выводились бы их номера. Снова отладьте получившийся кусок программы в отладчике. Прошейте эту усовершенствованную программу в программную память микроконтроллера.
Теперь вы можете проверять работу программы ввода с клавиатуры, нажимая кнопки и наблюдая за индикаторами. Таким же образом постепенно добавляйте к программе все новые и новые модули, но в такой последовательности, в какой это удобнее для проверки каждой вновь добавляемой части. Старайтесь при добавлении нового модуля программы не затрагивать уже отлаженные части. Тогда, если после очередного изменения ваша программа откажется работать, вы будете знать в каком месте программы искать ошибку.
Добавляя в программу новый модуль, не закладывайте сразу все возможности, которые он должен выполнять. Создайте сначала упрощенный вариант. Отладьте, проверьте его в работе. А затем усовершенствуйте его, но тоже не сразу, а поэтапно, постепенно приближаясь к окончательному варианту.
4.2. ТРАНСЛЯТОР С ЯЗЫКА АССЕМБЛЕР
Рассмотрим отдельные инструментальные программы.
Текст программы нужно писать в текстовом редакторе, позволяющем получить выходной файл в ASCII-кодах (американский стандартный код обмена информацией), т.е. в DOS-кодировке. Каким бы редактором вы не пользовались, при записи вашей программы на диск необходимо позаботиться о том, чтобы полученный файл имел расширение asm.
После того, как текст программы написан, приступаем к процессу трансляции. Для трансляции программ применяют ассемблер для соответствующего типа микроконтроллера. Пусть, например, разрабатывается программа управления спортивным табло для микроконтроллера AT89S8252 (MCS-51) под названием tablo.asm.
Для трансляции программ используем кроссассемблер фирмы «MetaLink», версии 1.2. Эта программа предназначена для работы под управлением операционной системы DOS. Она написана в старом стиле. Имя файла для трансляции передается как параметр при запуске транслятора. Все сообщения выводятся в окно DOS. Поэтому запускать программу удобнее при помощи DOS-ориентированного файлового менеджера. Файловый менеджер - это целый класс программ, начало которому положил легендарный Norton Commander. В настоящее время существует множество программ, являющихся его клонами. Это такие программы, как Windows Commander, Volkov Commander, FAR, Dos Navigator и т. д.
Для запуска транслятора наберите в командной строке, находящейся сразу под файловыми панелями, следующую команду:
asm51 tablo
Затем нажмите клавишу Enter. Если вы все сделали правильно, запустится процесс трансляции. Обратите внимание, что команда состоит из двух слов, разделенных пробелом. Первое слово - это имя программы-транслятора (asm51.exe). Второе слово - это имя файла вашей программы на ассемблере (tablo.asm). Причем оба имени допускается писать как с расширением, так и без. Если вы запишите asm51.exe tablo.asm, то результат будет точно такой же.
Процесс трансляции на современных компьютерах происходит почти мгновенно. Если в вашей программе не было никаких ошибок, по завершении работы транслятора на экране появится следующая надпись:
C:\PROG\ASM51>asm51 tablo 8051 Cross-Assembler, Version 1.2h (с) Copyright 1984, 1985, 1986, 1987, 1988, 1989, 1990 by MetaLink Corporation First pass Second pass ASSEMBLY COMPLETE, 0 ERRORS FOUND
Втом случае, если вы работаете в Windows Commander, эта надпись появится в отдельно открывшемся окне и останется на экране, пока вы не закроете это окно вручную.
Вслучае отсутствия ошибок процесс трансляции можно считать законченным и переходить к отладке. При успешной трансляции в той же директории появятся два новых файла, с тем же именем, что и транслируемая программа, но с другими расширениями:
tablo.lst - листинг программы;
tablo.hex - оттранслированная программа в НЕХ-формате.
Но такого результата вы сможете достигнуть, скорее всего, не сразу. Если в процессе трансляции транслятор обнаружит в вашей программе какие-либо ошибки, то он покажет их общее количество в последней строке своего сообщения. При этом файл с расширением hex сформирован не будет. Более подробное описание ошибок транслятор помещает в листинг трансляции (файл с расширением lst). Прежде, чем продолжить нашу тему, необходимо понять, что такое листинг программы.
Листинг программы - это специальный файл, где в наглядном виде показан весь процесс трансляции. Файл листинга тоже имеет текстовый формат. Вы можете просмотреть его при помощи встроенного просмотрщика вашего файлового менеджера. Для этого вы должны выбрать этот файл в файловой панели менеджера и нажать клавишу F3. В результате вы увидите приблизительно следующее:
0058 |
0044 |
|
SPORT_TABLO: |
|
|
0059 |
0044 |
78 40 |
|
MOV R0, #TABLO_DAT |
|
0060 |
0046 |
E6 |
|
MOV A, @R0 |
; счет первой команды |
0061 |
0047 |
FA |
|
MOV R2, A |
; сохраняем счет в R2 |
0062 |
0048 |
C4 |
|
SWAP A |
; меняем местами цифры |
0063 |
0049 |
54 0F |
|
ANL A, #0Fh |
; выделяем старшую цифру |
0064 |
004B |
70 12 |
|
JNZ MET3 |
; если цифра ненулевая |
0065 |
004D |
|
|
|
|
0066 |
004D |
75 80 FF |
MOV P0, #0FFh |
; пробел в старший разряд |
|
0067 |
0050 |
75 90 F0 |
MOV P1, #0F0h |
; в регистр D5 |
|
0068 |
0053 |
75 90 F9 |
MOV P1, #0F9h |
|
|
0069 |
0056 |
75 90 F1 |
MOV P1, #0F1h |
; в регистр D6 |
|
0070 |
0059 |
75 90 F9 |
MOV P1, #0F9h |
|
|
0071 |
005C |
02 00 78 |
LJMP MET4 |
|
|
0072 |
005F |
|
|
|
|
0073 |
005F |
23 |
MET3: RL A |
; циклический сдвиг влево |
0074 |
0060 |
FC |
MOV |
R4, A |
|
|
0075 |
0061 |
90 |
00 30 |
MOV DPTR, #TABZNAK |
; смещение в таблице |
|
0076 |
0064 |
93 |
|
MOVC A, @A+DPTR |
|
|
0077 |
0065 |
F5 80 |
MOV P0, A |
; вывод младшего байта |
||
0078 |
0067 |
75 |
90 F0 |
MOV P1, #0F0h |
; запись в RG D5 |
|
0079 |
006A |
75 |
90 F9 |
MOV P1, #0F9h |
|
|
0080 |
006D |
EC |
MOV A, R4 |
; смещение старшего байта |
||
0081 |
006E |
04 |
|
INC A |
|
|
0082 |
006F |
93 |
|
MOVC A, @A+DPTR |
|
|
0083 |
0070 |
F5 80 |
MOV P0, A |
; вывод старшего байта |
||
0084 |
0072 |
75 |
90 F1 |
MOV P1, #0F1h |
; запись в регистр D6 |
|
0085 |
0075 |
75 |
90 F9 |
MOV P1, #0F9h |
|
|
0086 |
0078 |
|
|
|
|
|
0087 |
0078 |
EA MET4: MOV A, R2 |
; счет первой команды |
|||
0088 |
0079 |
54 |
0F |
ANL A, #0Fh |
; выделяем младшую цифру |
|
0089 |
007B |
23 |
|
RL A |
|
; удвоение |
0090 |
007C |
|
|
|
|
|
0091 |
007C |
FC |
MOV R4, A |
|
||
0092 |
007D |
90 |
00 30 |
MOV DPTR, #TABZNAK |
; смещение в таблице |
|
0093 |
0080 |
93 |
|
MOVC A, @A+DPTR |
|
|
0094 |
0081 |
F5 80 |
MOV P0, A |
; вывод младшего байта |
||
0095 |
0083 |
75 |
90 F2 |
MOV P1, #0F2h |
; запись в RG D5 |
|
0096 |
0086 |
75 |
90 F9 |
MOV P1, #0F9h |
|
|
0097 |
0089 |
EC |
MOV A, R4 |
; смещение старшего байта |
||
0098 |
008A |
04 |
|
INC A |
|
Приведенный фрагмент представляет собой листинг трансляции управляющей программы спортивного табло. Для наглядности приведен фрагмент из середины программы. Как видите, листинг - это тот же текст программы, дополненный с левой стороны еще тремя столбцами. Первый столбец - это просто номер строки. Второй столбец - это адрес в памяти, куда помещаются коды конкретной команды, записанной далее в этой же строке. Еще один новый столбец - это сами коды команды. И адрес и коды записываются в шестнадцатеричном виде. Номер строки используется для быстрого поиска ошибки. Коды ошибок и номера строк, где они были обнаружены, приводятся в самом конце листинга.
Каждая обнаруженная ошибка дополнительно помечается непосредственно в той строке, где она обнаружена. Это сообщение выглядит следующим образом:
0000 |
12 bank0 EQU 00000000В |
0008 |
13 bank1 EQU 00001000B |
0010 |
14 bank2 EQU 00010000B |
|
15 bank3 FQU 00011000В |
****_________________^
****ERROR #23: Illegal or missing directive
Импровизированная стрелка показывает место, где в тексте найдена ошибка. В приведенном примере программа обнаружила незнакомый оператор. На самом деле это просто опечатка. Вместо буквы Е случайно была набрана буква F. В результате транслятор обнаружил эту ошибку. По классификации транслятора этот вид ошибки имеет номер 23. Краткое описание ошибки: «Illegal or missing directive». Что в переводе означает «Недопустимый или неверно записанный оператор».
В конце листинга кроме полного списка ошибок приводится также список всех констант и переменных вашей программы с указанием их значений, а также полный список меток, также со значениями. Используя листинг, программист может обнаружить и исправить все ошибки синтаксиса.
Если процесс трансляции прошел нормально, то его результат помещается в специальный файл, имеющий расширение hex. Файл в НЕХ-формате - это тот самый машинный код, который мы и должны получить в результате трансляции, предназначенный для записи в память микроконтроллера. НЕХ-формат - это специальный формат для записи машинных кодов, принятый во всех подобных трансляторах. Это тоже, по сути, текстовый файл, где каждый байт полученного кода записывается специальным образом в шестнадцатеричном виде. Там же содержится информация об адресах, куда эти коды должны быть помещены. Вот фрагмент такого файла:
:040000000200303298
:03000B000203DC11 :0100130032ВА :03001В0002034697 :0100230032АА
:10003000758800C2097532BF7506BF75815F75DOBE
:10004000087B7F7C2875D0007533007534007539C6 :1000500096753А0075281СС200С201С202С20АС2СВ
Не будем вдаваться в подробности кодирования. Нужно просто понимать, что именно здесь хранится оттранслированная программа. Именно файл в НЕХ-формате прямым или косвенным способом используется программатором для прошивки микросхем.
Программы для управления программатором в качестве входного используют либо НЕХ-файл, либо файл в BIN-формате. BIN-формат - это еще один способ хранения оттранслированных данных. Он представляет собой просто набор тех самых кодов, которые и составляют программу для процессора. Для получения BIN-формата существуют программы - перекодировщики. В интернете можно найти программы hex2bin.exe и bin2hex.exe. Одна из них предназначена для перекодировки файла, записанного в НЕХ-формате, в - BIN-формат. А другая - для обратной перекодировки.
4.3. ОТЛАДКА С ПОМОЩЬЮ СИМУЛЯТОРА
4.3.1. Принципы использования симуляторов
После того, как текст программы написан и оттранслирован без ошибок, можно приступать к проверке правильности ее функционирования. Для такой проверки применяется специальная программа – отладчик-симулятор.
Симулятор - программное средство, способное имитировать работу микрокон-
троллера и его памяти. Как правило, симулятор содержит в своем составе:
•отладчик;
•модель ЦПУ и памяти.
Более продвинутые симуляторы содержат в своем составе модели встроенных периферийных устройств, таких, как таймеры, порты, АЦП, и системы прерываний.
Симулятор должен уметь загружать файлы программ во всех популярных форматах, максимально полно отображать информацию о состоянии ресурсов симулируемого микроконтроллера, а также предоставлять возможности по симуляции выполнения за-
груженной программы в различных режимах. В процессе отладки модель "выполняет" программу, и на экране компьютера отображается текущее состояние модели.
Загрузив программу в симулятор, пользователь имеет возможность запускать ее в пошаговом или непрерывном режимах, задавать условные или безусловные точки останова, контролировать и свободно модифицировать содержимое ячеек памяти и регистров симулируемого микропроцессора. С помощью симулятора можно быстро проверить логику выполнения программы, правильность выполнения арифметических операций.
Взависимости от класса используемого отладчика, различные симуляторы могут поддерживать высокоуровневую символьную отладку программ.
Некоторые модели симуляторов могут содержать ряд дополнительных программных средств, таких например как: интерфейс внешней среды, встроенную интегрированную среду разработки.
Вреальной системе микроконтроллер обычно занимается считыванием информации с подключенных внешних устройств (датчиков), обработкой этой информации и выдачей управляющих воздействий на исполнительные устройства. Чтобы в симуляторе, не обладающем интерфейсом внешней среды, смоделировать работу датчика, нужно вручную изменять текущее состояние модели периферийного устройства, к которому в реальной системе подключен датчик. Если, например, при приеме байта через последовательный порт взводится некоторый флажок, а сам байт попадает в определенный регистр, то оба эти действия нужно производить в таком симуляторе вручную. Наличие же интерфейса внешней среды позволяет пользователю создавать и гибко использовать модель внешней среды микроконтроллера, функционирующую и взаимодействующую
сотлаживаемой программой по заданному алгоритму.
4.3.2. Современные симуляторы
За несколько лет симуляторы прошли в своем развитии довольно большой путь, в значительной степени благодаря повышению мощности персональных компьютеров и операционных систем с графическими интерфейсами пользователя. Симуляторы - это средство моделирования поведения процессора целевой системы чисто программным способом. Симуляторы позволяют "запустить" программу и полностью проследить ее исполнение.
Поскольку моделирование осуществляется программным способом, программа, естественно, исполняется не в реальном масштабе времени, причем все сигналы ввода/вывода должны генерироваться специальными подпрограммами, разработанными для имитации периферийных устройств и других ресурсов процессора. Большинство коммерческих симуляторов в состоянии моделировать работу самых разных процессоров различных семейств.
В состав современных симуляторов входят также отладчики на языках высокого уровня, поскольку в комплект поставки, как правило, входит и соответствующий компилятор. Теперь симулятор может охватывать все фазы разработки проекта, однако его неспособность обрабатывать события и сигналы реального времени означает, что как средство отладки он может использоваться только для разработки самых простейших программ. К этому следует добавить, что если программа должна взаимодействовать с другими устройствами как внутрикристальными, так и внешними периферийными устройствами, сложность их моделирования практически сводит на нет все преимущества этого подхода.
Сила симуляторов в их способности исполнять отлаживаемое программное обеспечение (целиком или частично) повторяемым образом с заранее определенными сигналами. С помощью симулятора можно проводить блочное тестирование исходного
модуля или функции. Таким образом, тестирование новой функции перед включением ее в состав разрабатываемой системы позволяет заранее устранить многие потенциальные проблемы с серьезными последствиями в будущем.
Благодаря низкой стоимости симуляторов и отсутствию необходимости во внешнем оборудовании, симуляторы стали очень популярными. Ныне их поставляет множество производителей эмуляторов и компиляторов, в то время как традиционные поставщики - производители интегральных схем предпочитают покидать этот рынок, заказывая разработку симуляторов, компиляторов и эмуляторов для новых устройств у сторонних поставщиков инструментальных средств.
4.4. ПРИМЕР ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОТЛАДЧИКАСИМУЛЯТОРА
Возможности "реального" отладчика-симулятора проиллюстрируем на примере простой модели ACS51 «Advanced Micro Controller High Speed Simulator» Version 1.02 by Intelligent Designer Tools Moscow, разработанной под DOS для отладки устройств на микроконтроллерах серии MCS-51.
Процесс отладки происходит следующим образом. Сначала запускается симулятор. Затем в него загружается наша оттранслированная программа. Все дальнейшие операции производятся под управлением отладчика. В качестве входного файла для отладчика используется выходной файл транслятора в НЕХ-формате.
Теперь рассмотрим подробнее последовательность работы с программой отладчика. Для отладки программы удобно внутри директории отлаживаемой программы создать специальную директорию для отладчика. Назовем ее acs5l. В эту директорию помещается программа-отладчик (файл fd51.exe). Туда же, перед началом отладки нужно поместить отлаживаемый файл в НЕХ-формате. Для запуска отладчика сначала, при помощи файлового менеджера, откройте директорию asc5l. Установите указатель выбора файлов на файл fd51.exe и нажмите Enter. Отладчик запустится, и вы увидите на экране его рабочее поле (рис. 4.1).
Рис. 4.1. Программа-отладчик ACS51 в рабочем режиме
На рабочем поле наглядно отображается полная информация о текущем состоянии имитируемого контроллера. Рабочее поле программы разделено на восемь отдельных окон. Каждое окно имеет свое назначение.
Самое большое окно в верхней части экрана называется «Special Function Registers». Оно постоянно отражает содержимое всех внутренних регистров процессора, как регистров общего назначения, так и специальных регистров. Текущий банк регистров общего назначения выделяется более ярким цветом. Если выполнять программу пошагово, то на каждом шаге вы сможете визуально наблюдать, как меняется содержимое регистров.
В левом нижнем окне (без названия) всегда отображается фрагмент программы, записанный в виде команд Ассемблера. Запись очень похожа на листинг программы. Этот текст получен из кодов программы путем так называемого «дизассемблирования». Дизассемблирование - это процесс обратный трансляции. Мнемокоды программ определяются по их машинным кодам. Однако здесь вы не увидите ни меток, ни имен переменных и констант, ни комментариев. Все это осталось в тексте программы. Вместо этого вы увидите конкретные адреса и числа в шестнадцатеричном коде. Вторая сверху строка этого окна выделена голубым цветом. В процессе выполнения команд весь текст в окне смещается вверх таким образом, что в этой строке всегда находится текущая выполняемая команда. В самой верхней строке находится только что выполненная команда.
Следующее окно называется INT RAM. Оно отображает текущее состояние ОЗУ контроллера. Левый столбец четырехразрядных шестнадцатеричных чисел, выделенный голубым цветом, отображает адреса ячеек памяти. Остальные двухразрядные числа зеленого цвета - это содержимое этих ячеек. Такой способ отображения называется дампом памяти. Адрес в начале каждой строки относится только к первой ячейке этой самой строки. Каждая последующая ячейка имеет адрес на единицу больший, чем у предыдущей. В окне видна лишь часть ячеек памяти. Но при помощи команд управления можно выбрать другой начальный адрес просмотра и увидеть любую другую часть ОЗУ. Естественно, в этом окне можно увидеть также те ячейки, которые одновременно являются регистрами. Их содержимое будет одинаковым.
Маленькое окно PSW отображает текущее состояние всех флагов регистра слова состояния процессора PSW. В верхнем, самом большом окне мы также можем видеть регистр PSW. Но там его содержимое отображается в виде одного шестнадцатеричного числа. А в специальном окне все флаги отображаются по отдельности.
Окно PGM ROM отображает в виде дампа программную память контроллера. Мы уже рассматривали окно, в котором та же самая информация отображается в виде текста на Ассемблере. Данное же окно дублирует предыдущее, но уже в другой форме.
Окно предназначено в основном для того, чтобы наблюдать те ячейки программной памяти, в которых хранятся данные. В окне PGM ROM также отображается только часть всей программной памяти. Но при помощи команд навигации можно посмотреть любую ее область.
Окно «Stack» отображает текущее состояние стека. Столбец слева, окрашенный в голубой цвет - это номер ячейки стековой памяти, начиная с его вершины. В столбце справа показано текущее содержимое каждой ячейки.
Следующее окно - это окно ввода команд. В нем вы увидите надпись CMD (сокращение от Command) и мигающий курсор. В это окно вы можете вводить различные команды, при помощи которых происходит управления всеми режимами отладки. Каждая такая команда состоит из одной буквы. За этой буквой записывается один или нескольких параметров. Полный набор команд описан в краткой справке, которая вызывается по команде «Н» (без параметров). Наберите Н на клавиатуре и нажмите Enter.
Появится окно справки, где в кратком виде на английском языке будут даны описания команд и некоторая другая информация. В пакет программы отладчика, который вы можете скачать на сайте «Цифровые микросхемы и микропроцессоры», входит текстовый файл на русском языке с описанием всех команд. Этот файл является переводом текста встроенной помощи.
И последнее маленькое окошко служит для оценки реального времени выполнения программы. Время считается в секундах, миллисекундах и микросекундах, о чем свидетельствуют надписи «s», «ms» и «mcs» в заголовке этого окна.
Кроме команд, которые должны вводиться в командной строке, существует ряд команд, которые вводятся при нажатии одной из функциональных клавиш (F1...F10). Эти клавиши часто называют «Горячими клавишами», так как нажатие любой из них вызывает немедленное выполнение закрепленной за клавишей функции. Для удобства работы в нижней части окна отладчика помещена строка подсказки, где в краткой форме поясняются команды, закрепленные за каждой из этих клавиш. Более развернутое описание для всех этих команд приведено в табл. 4.1.
Таблица 4.1. «Горячие клавиши» отладчика FD51
Клавиша |
Название |
Описание |
|
|
|
|
|
F1 |
Step |
«Шаг» (при нажатии на эту клавишу выполняется одна текущая |
|
команда) |
|||
|
|
||
F2 |
Proc |
Запуск программы в режиме автоматического выполнения |
|
|
Reg:DEC |
Переключение режимов отображения содержимого регистров |
|
|
контроллера (в окне «Special Function Registers»). Форма ото- |
||
F3 |
Reg:BIN |
бражения при каждом нажатии последовательно меняется. |
|
|
Reg:HEX |
Данные отображаются в десятичной, двоичной и шестнадцате- |
|
|
|
ричной формах |
|
|
|
Переключение окна INT RAM в режим отображение внешнего |
|
F4 |
In/Ex |
ОЗУ. Этот режим предназначен для отладки программ под |
|
микросхемы INTEL iMCS-51, у которых имеется возможность |
|||
|
|
подключения внешнего ОЗУ. В нашем случае эта команда не |
|
|
|
применяется |
|
F5 |
SetBrk |
Включение режима определения точек останова (см. далее) |
|
F6 |
Mem:BIN |
Переключение режимов отображения содержимого ОЗУ (окно |
|
Mem:HEX |
INT RAM). Содержимое ОЗУ может отображаться либо в дво- |
||
|
|
ичном, либо в шестнадцатеричном виде |
|
F7 |
I/E ↑ |
вверхЛистание окна отображения ОЗУ (окно INT RAM) на страницу |
|
F8 |
Pgm ↑ |
вверхЛистание окна памяти программ (окно PGM ROM) на страницу |
|
F9 |
I/E ↓ |
Листание окна отображения ОЗУ (окно INT RAM) на страницу |
|
вниз |
|||
|
|
||
F10 |
Pgm ↓ |
Листание окна памяти программ (окно PGM ROM) на страницу |
|
|
|
вниз |
Кроме того, в отладчике имеется режим прямого ввода адреса или содержимого регистра. Для этого нужно сделать пустой ввод (нажать клавишу Enter, когда в окне команд ничего не написано). Сразу после этого включится режим прямого ввода. О том, что режим включился, будет свидетельствовать изменение формы курсора.