Программирование микропроцессорных систем
Основные составляющие компьютерной системы. История развития, особенности применения микропроцессоров. Устройство и работа D-триггера. Принципиальная электрическая схема, директивы, операторы и описание программы для микропроцессоров, виды отладчиков.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | методичка |
Язык | русский |
Дата добавления | 27.11.2011 |
Размер файла | 2,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Аппаратный отладчик
Определение. Второй вид отладчиков -- аппаратный отладчик. Основа такого отладчика -- специальная плата, подключаемая к компьютеру, работающая под его управлением и имитирующая работу реальной микросхемы микроконтроллера. Плата имеет выводы, соответствующие выводам реальной микросхемы, на которых в процессе отладки появляются реальные сигналы.
При помощи этих выводов отладочная плата может быть включена в реальную схему. Возникающие в процессе отладки электрические сигналы можно наблюдать при помощи осциллографа. Можно нажимать реальные кнопки и наблюдать работу светодиодов и других индикаторов.
В то же самое время на экране компьютера мы так же, как и в предыдущем случае, можем видеть всю информации об отлаживаемой программе:
· наблюдать содержимое регистров, ОЗУ, портов ввода-вывода;
· контролировать ход выполнения программы.
В аппаратном отладчике мы можем так же, как и в программном, выполнять программу в пошаговом режиме и применять точки останова. Недостатком аппаратного отладчика является его высокая стоимость.
Полнофункциональные программные имитаторы электронных устройств
Существует и третий вид отладчиков. Это полнофункциональные программные имитаторы электронных устройств. Такие программы позволяют на экране компьютера «собрать» любую электронную схему, включающую в себя самые разные электронные компоненты:
· транзисторы;
· резисторы;
· конденсаторы;
· операционные усилители;
· логические и цифровые микросхемы, в том числе и микроконтроллеры.
Такие программы обычно содержат обширные базы электронных компонентов и конструктор электронных схем. Собрав схему, вы можете виртуально записать в память микроконтроллера вашу программу, а затем «запустить» всю схему в работу.
Для контроля результатов работы схемы имитатор имеет виртуальные вольтметры, амперметры и осциллографы, которые вы можете «подключать» к любой точке вашей схемы, «измерять» различные напряжения, а также «снимать» временные диаграммы.
Такие программы в настоящее время получают все большее распространение. Они позволяют разработать любую схему с микроконтроллером или без него, без использования паяльника и реальных деталей. На экране компьютера можно полностью отладить свою схему и лишь потом браться за паяльник.
Недостатком данного отладчика является то, что он требует значительных вычислительных ресурсов. Особенно в том случае, когда отлаживается схема, включающая как микроконтроллер, так и некоторую аналоговую часть. Кроме того, имитатор не всегда верно имитирует работу некоторых устройств. Однако подобные программы имеют очень большие перспективы. В рамках данной книги я не буду рассматривать подобную программу, так как такая задача достойна отдельной книги.
Внутренний отладчик микроконтроллеров AVR
Еще один аппаратный способ отладки заложен конструктивно в некоторые модели микроконтроллеров AVR. В частности, микроконтроллер ATtiny2313 поддерживает такой способ отладки.
Для обеспечения возможности аппаратной отладки такие микроконтроллеры имеют, во-первых, специальную однопроводную линию debugWIRE, которая обычно совмещена с входом RESET. Эта линия используется специальной платой-отладчиком для управления микроконтроллером в процессе отладки. Кроме того, в систему команд такого микроконтроллера включена команда break, которая может использоваться для создания программных точек останова.
Для того, чтобы использовать подобный режим отладки, необходимо иметь в своем распоряжении специальную отладочную плату, которая должна поддерживать этот режим. Кроме того, подобный режим должна поддерживать и инструментальная программа-отладчик.
В процессе отладки программист проставляет на экране компьютера в нужных местах отлаживаемой программы точки останова. Затем он запускает эту программу под управлением отладчика. Отладчик автоматически вставляет в отлаживаемую программу команды break в тех местах, где программист поставил точки останова. А команды, которые должны быть записаны в месте вставки команд break, запоминает в своей памяти.
Затем он автоматически «прошивает» полученный таким образом текст программы в программную память отлаживаемого микроконтроллера и запускает ее в работу. Микроконтроллер выполняет заложенную в него программу до тех пор, пока не встретится команда break. Получив эту команду, микроконтроллер приостанавливает выполнение программы и передает управление отладчику.
Далее отладчик управляет микроконтроллером при помощи интерфейса debugWIRE. Этот интерфейс позволяет считать содержимое всех регистров микроконтроллера и других видов памяти. Прочитанная информация отображается на экране компьютера. Затем отладчик ждет команд от оператора. Под управлением отладчика микроконтроллер может принудительно выполнить любую команду из своей системы команд.
Это дает возможность легко реализовать пошаговое выполнение программы, а также выполнение тех команд, которые были заменены на break. Все управление осуществляется посредством интерфейса debugWIRE, который позволяет передавать информацию как от отладчика в микроконтроллер, так и в обратном направлении.
Преимуществом такого способа отладки является то, что в данном случае происходит не имитация микроконтроллера, а используется реальная микросхема. При этом работа в режиме отладки наиболее полно приближается к реальному режиму работы.
Недостаток -- частое «перешивание» программной памяти микроконтроллера. Изменять содержимое этой памяти приходится каждый раз при установке новых или снятии старых точек останова. Если учесть, что допустимое количество перезаписи программной памяти составляет 10000 циклов, то при длительном процессе отладки это количество может исчерпаться, и микросхема выйдет из строя.
Программная среда «AVR Studio»
Фирма Atmel, разработчик микроконтроллеров AVR, очень хорошо позаботилась о сопровождении своей продукции. Для написания программ, их отладки, трансляции и прошивки в память микроконтроллера фирма разработала и бесплатно распространяет специализированную среду разработчика под названием «AVR Studio». Инсталляционный пакет этой инструментальной программы можно свободно скачать с сайта фирмы. Адрес страницы для скачивания программ: http://www.atmel.ru/Software/Software.htm.
Программная среда «AVR Studio» -- это мощный современный программный продукт, позволяющий производить все этапы разработки программ для любых микроконтроллеров серии AVR. Пакет включает в себя специализированный текстовый редактор для написания программ, мощный программный отладчик.
Кроме того, «AVR Studio» позволяет управлять целым рядом подключаемых к компьютеру внешних устройств, позволяющих выполнять аппаратную отладку, а также программирование («прошивку») микросхем AVR.
Познакомимся подробнее с этим удобным программным инструментом для программистов. Программная среда «AVR Studio» работает не просто с программами, а с проектами. Для каждого проекта должен быть отведен свой отдельный каталог на жестком диске. В AVR Studio одновременно может быть загружен только один проект.
При загрузке нового проекта предыдущий проект автоматически выгружается. Проект содержит всю информацию о разрабатываемой программе и применяемом микроконтроллере. Он состоит из целого набора файлов.
Главный из них -- файл проекта. Он имеет расширение aps. Файл проекта содержит сведения о типе процессора, частоте тактового генератора и т. д. Он также содержит описание всех остальных файлов, входящих в проект. Все эти сведения используются при отладке и трансляции программы.
Кроме файла aps, проект должен содержать хотя бы один файл с текстом программы. Такой файл имеет расширение asm. Недостаточно просто поместить файл asm в директорию проекта. Его нужно еще включить в проект. Как это делается, мы увидим чуть позже. Проект может содержать несколько файлов asm. При этом один из них является главным. Остальные могут вызываться из главного при помощи оператора.include. На этом заканчивается список файлов проекта, которые создаются при участии программиста.
Но типичный проект имеет гораздо больше файлов. Остальные файлы проекта появляются в процессе трансляции. Если ваша программа не содержит критических ошибок и процесс трансляции прошел успешно, то в директории проекта автоматически появляются следующие файлы: файл, содержащий результирующий код трансляции в hex формате, файл тар, содержащий все символьные имена транслируемой программы со своими значениями, листинг-трансляции (lst) и другие вспомогательные файлы. Однако для нас будет важен лишь hex-файл (файл с расширением hex). Именно он будет служить источником данных при прошивке программы в программную память микроконтроллера.
Описание интерфейса
Главная панель программы «AVR Studio»
На рис. 5.1 показано, как выглядит главная панель программы «AVR Studio». На самом деле «AVR Studio» имеет очень гибкий интерфейс, и внешний вид может сильно отличаться от варианта, показанного на рисунке. Но мы будем рассматривать случай, когда выбраны установки по умолчанию.
Главная панель программы AVR Studio разделена на три основных окна. На рис. 5.1 они обозначены цифрами 1,2 и 3. Первые два окна -- вспомогательные. Окно 1 предоставляет нам полную информацию о текущем проекте. По умолчанию это окно включает в себя три вкладки. «Корешки» этих вкладок вы можете видеть в нижней части окна.
Первая вкладка называется «Info». Она содержит справочную информацию по используемому микроконтроллеру, такую как описание векторов прерываний, описание выводов для разных корпусов и краткое описание регистров.
Следующая вкладка называется «Project». Она содержит полную информацию по текущему загруженному проекту. Информация представлена в виде дерева. Разные ветви этого дерева описывают все исходные и результирующие файлы проекта, все метки, процедуры и присоединяемые файлы.
Последняя вкладка окна номер 1 называется «I/O View» (просмотр ввода-- вывода). Это самая полезная вкладка. На ней в графическом виде показаны все ресурсы микроконтроллера:
· порты ввода--вывода;
· таймеры;
· компараторы;
· АЦП;
· регистры общего назначения и т, д.
Вся информация также представлена в виде дерева. Каждая «ветвь» этого дерева -- это отдельный элемент. Если какой-либо элемент состоит из других элементов, то его можно раскрыть и увидеть эти элементы.
Элементы, появляющиеся в результате раскрытия ветви, в свою очередь также могут быть раскрыты, если они имеют свое содержимое. На рис. 2 в увеличенном виде показано дерево ресурсов микроконтроллера ATtiny2313. На рисунке несколько ветвей специально раскрыты, чтобы можно было увидеть их состав.
Если какая-либо ветвь может быть раскрыта, то в своем основании она имеет квадратик с плюсиком внутри. Двойной щелчок на этом плюсике раскрывает ветвь. В раскрытой ветви плюсик превращается в минус. Повторный двойной щелчок по квадратику закрывает раскрытую ветвь.
На рис. 2 для наглядности раскрыты ветви всех трех портов ввода--вывода и регистры, связанные с EEPROM. Вы можете видеть:
· полный состав управляющих регистров для каждого из устройств;
· их названия и адреса;
· состав и название каждого бита (если биты имеют свои названия).
Для наглядности на рис. 2 раскрыта ветвь, соответствующая регистру EECR, и вы можете видеть все его биты.
В процессе отладки в этом окне вы увидите не только название и состав всех ресурсов, но и их содержимое. Содержимое будет отображаться как в шестнадцатеричном виде, так и путем затемнения квадратиков, отображающих отдельные биты конкретных регистров.
Затемненный квадратик означает, что бит, равен единице. Светлый квадратик говорит о том, что бит, равен нулю. Вы также можете оперативно менять это содержимое прямо в этом окне. Для изменения значения бита достаточно двойного щелчка мышки в соответствующем квадратике. Существуют и другие способы изменения содержимого различных регистров и ячеек памяти в процессе отладки.
В нижней части главной панели находится второе вспомогательное окно (окно 2 на рис. 1). Это окно служит, в основном, для вывода различных сообщений. Оно также содержит ряд вкладок. По умолчанию их четыре. Первая вкладка называется «Build». На вкладке «Build» отражается процесс трансляции. На эту вкладку выводятся сообщения об различных этапах трансляции, сообщения о синтаксических ошибках и различные предупреждения (Warnings).
Если трансляция заканчивается нормально (отсутствуют критические ошибки), то сюда же выводятся статистические данные о полученном результирующем коде. Эти данные показывают размеры и процент использования всех видов памяти микроконтроллера. Например, после трансляции нашего примера №11 (листинг 4.21) программа выдаст следующее сообщение:
ATtiny2313 memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
----------------------------------------------------------------------------------------
[.cseg] 0x000000 0x0004f2 508 758 1266 2048 61.8%
[.dseg] 0x000060 0x00009d 0 61 61 128 47.7% [.eseg] 0x000008 0x000045 0 61 61 128 47.7%
Assembly complete, 0 errors. 0 warnings
Сообщение означает, что в программном сегменте использованы ячейки с адреса 0x000000 по адрес 0x0004f2. При этом собственно код программы занимает 508 байт. Данные в программной памяти занимают 758 байт. Всего использовано в программной памяти 1266 байт (сумма предыдущих двух чисел). Размер программной памяти для этого микроконтроллера составляет 2048 байт. Процент использования программной памяти 61,8%.
Точно такие же сведения приведены для памяти данных (ОЗУ) и для EEPROM. Естественно, что два последних вида памяти не содержат программного кода. Поэтому в соответствующем столбике стоят нули. Последняя строка содержит сообщения об ошибках. В данном случае сообщение переводится так: «Ассемблирование прошло успешно, 0 ошибок, 0 предупреждений».
Следующая вкладка второго окна называется «Message». Здесь выводятся разные системные сообщения о загрузке модулей программы и т. п.
Третья вкладка второго окна называется «Find in Files» (поиск в файлах). В этом окне отражаются результаты выполнения команды «Поиск в Файлах». Эта команда позволяет производить поиск заданной последовательности символов сразу во всех файлах проекта. По окончании поиска во вкладке «Find in Files» отражаются все найденные вхождения с указанием имени файла и строки, где найдена искомая последовательность.
Последняя вкладка называется «Breakpoints and Tracepoints» (точки останова и точки трассировки). Эти точки проставляются в тексте программы перед началом процесса отладки и дублируются в данном окне. Как проставлять точки останова, мы узнаем чуть позже.
Точки останова используются для того, чтобы приостановить выполнение программы в том или ином месте программы для того, чтобы убедиться, что программа выполняется правильно. При создании точки останова в тексте программы она автоматически появляется во вкладке «Breakpoints and Tracepoints».
Вкладка позволяет увидеть все точки останова программы в одном месте. Кроме того, на вкладке против каждой записи, описывающей точку останова, автоматически появляется «Check box» (поле выбора), при помощи которого можно в любой момент временно отключить любую точку останова.
Точки трассировки используются для управления процессом трассировки.
Определение. Трассировка -- это особый вид отладочного процесса, когда программа запускается и выполняется в автоматическом режиме.
Но в процессе работы она оставляет сообщения в специальном окне. Сообщения отражают каждый шаг выполняемой программы. Точки трассировки могут отменить и заново разрешить трассировку на разных участках программы.
Программная среда «AVR Studio» поддерживает трассировку только при работе с отладочной платой ICE50. Это достаточно дорогое устройство. Поэтому в этой книге мы остановимся лишь на программном отладчике без применения каких-либо аппаратных средств отладки.
Поверьте, этого вполне достаточно для разработки микропроцессорных устройств практически любой сложности. Аппаратные отладчики необходимы в условиях промышленного производства для ускорения работ по разработке новых изделий.
Любую из вкладок любого вышеописанного окна можно скрыть или, наоборот, превратить в отдельное свободно перемещаемое окно. Для этого достаточно щелкнуть правой клавишей мыши по заголовку соответствующей вкладки и выбрать в открывшемся меню нужный режим. Пункт «Hide» этого меню означает «Скрытое» (невидимое), «Floating» означает «Свободное» (перемещающееся), «Docking» -- «Закрепленное».
Для некоторых пользователей бывает затруднительно вернуть вкладку на место после того, как она прекратится и свободно перемещаемое окно. В программе «AVR Studio» используется нестандартный, довольно оригинальный механизм управления окнами. Предположим, что мы случайно превратили в плавающее окно вкладку «Breakpoints and Tracepoints» окна номер два. Посмотрим, как можно поставить ее на место.
Если перемещать это окно при помощи мыши (удерживая его за заголовок), то на основной панели программы появляются специальные указатели размещения, так как это показано на рис. 3. Они представляют собой стилизованные стрелки синего цвета, расположенные по всему полю главного окна программы. Одновременно появляются восемь таких стрелок. Четыре из них объединены в центральный блок, в который включена еще и круглая кнопка посередине.
Этот блок автоматически располагается в центре того окна, в пределах которого в данный момент перемещается курсор. На рис. 3 этот указатель расположен в центре окна номер два. Оставшиеся четыре стрелки располагаются сверху, снизу, -справа и слева основного окна программы. Достаточно переместить курсор мыши вместе с перемещаемым плавающим окном на одну из этих стрелок и отпустить кнопку мыши, и окно тут же встроится в одно из вспомогательных окон программы в виде вкладки либо образует новое вспомогательное окно. Причем вы еще до отпускания кнопки мыши можете увидеть, куда попадет окно.
Как только ваш курсор совместится с одной из стрелок, программа закрасит синим цветом эту область. Поэкспериментируйте сами с размещением окон. Помните только, что стрелки превращают ваше плавающее окно в еще одно фиксированное дополнительное окно в разных частях интерфейса. А круглая кнопка посреди центрального блока превращает плавающее окно в дополнительную вкладку уже существующего окна. Именно при помощи этой кнопки оторванное от своего привычного места плавающее окно на рис. 3 можно вернуть на свое место.
Дополнительные окна 1 и 2 позволяют легко изменять свои размеры. Для изменения размера достаточно перетащить границу окна при помощи мыши. Можно даже скрыть любое из этих окон, закрыв все его вкладки. Закрыть вкладку можно двумя способами. Либо щелкнуть по ее «корешку» правой кнопкой мыши, а в появившемся меню выбрать пункт «Hide». Либо щелкнуть мышью в крестик в верхнем правом углу вкладки. Открыть закрытые вкладки можно при помощи меню «View/Toolbars».
Особую роль играет окно 3. Это даже не окно, а оставшаяся часть от главного окна программы. Если закрыть окна 1 и 2, окно 3 займет все пространство программной панели. В окне 3 появляются различные рабочие окна.
Во-первых, это окна с текстами программ на Ассемблере. А во-вторых, здесь могут появляться окна любых открытых программой файлов. Это могут быть текстовые файлы или файлы других программ. Каждый такой файл по умолчанию открывается в виде отдельного плавающего окна. Для определенности будем называть такие окна текстовыми окнами. Текстовые окна будут «плавать» только внутри окна 3.
Для каждого нового текстового окна в нижней части окна 3 появляется «корешок», при помощи которого можно быстро перейти к нужному окну, если оно не находится на переднем плане. Если произвести двойной щелчок левой кнопкой мыши по заголовку любого текстового окна, оно раскроется на всю ширину окна 3. Иногда именно так удобно работать с тестами программ.
В окне 3 можно открывать не только все тексты ассемблерных программ текущего проекта, но и тексты программ других проектов, а также тексты программ, написанных на других языках программирования. Такой прием очень удобен, если нужно переделать программу, написанную для старого микроконтроллера на старой версии Ассемблера, на новый лад. Все открытые текстовые окна запоминаются и затем открываются автоматически при открытии проекта.
Любое текстовое окно имеет подсветку синтаксиса. Разные части помещенного туда текста программы подсвечиваются разными цветами. Так, все операторы Ассемблера высвечиваются голубым цветом. Комментарии выделяются зеленым. Остальной текст (параметры команд, псевдооператоры, метки, переменные и константы) остается черным. Это очень удобно. Если написанный вами оператор окрасился в голубой цвет, то это значит, что вы не ошиблись в синтаксисе. Если вы написали комментарий, но перед текстом комментария забыли поставить точку с запятой, то этот комментарий не окрасится в зеленый цвет. Таким образом, многие ошибки видны уже в процессе написания программы.
Кроме двух вспомогательных и одного основного окна, главная панель программы имеет строку меню (отмечена цифрой 4 на рис. 1), а также несколько инструментальных панелей (отмечены цифрой 5). Как и в любой другой программе под Windows, при помощи меню вызываются все функции программы AVR Studio и переключаются все ее режимы. Панели инструментов дублируют часто используемые функции меню.
Создание проекта
Предположим, что программа AVR Studio установлена на ваш компьютер, запущена и находится в исходном состоянии (все вкладки окон 1 и 2 пусты, окно 3 не содержит открытых файлов). Приступим к созданию нового проекта.
Для этого выберем в меню «Project» пункт «New Project». На экране появится окно построителя. В поле «Project Type:» выбираем тип будущего проекта. Программа предлагает два варианта:
· проект на Ассемблере (Atmel AVR Assembler);
· проект на языке СИ++ (AVR GCC).
Выбираем Ассемблер. Затем в поле «Project name:» выбираем имя проекта. Например, Progl. Сразу под полем с именем проекта расположены два элемента выбора режимов. Так называемые «Чек-боксы» (Check box). По умолчанию оба чек-бокса выбраны (то есть, в соответствующих квадратиках проставлены «галочки»).
Первый чек-бокс (Create initialize file) определяет, нужно ли автоматически создавать главный программный файл. Если у вас уже есть файл с тестом программы на Ассемблере и вы просто хотите создать проект, а затем подключить туда готовый программный файл, снимите соответствующую «галочку». Если вы создаете проект «с нуля», оставьте «галочку» нетронутой.
Второй чек-бокс (Create folder) определяет, нужно ли автоматически создавать отдельный каталог для данного проекта. Если вы заранее уже создали нужный каталог средствами Windows, снимите пометку. Если нет, оставьте. Следующее поле называется «Initial file». Оно должно содержать имя файла, куда будет записываться текст программы. По умолчанию имя файла уже вписано в это поле. Оно соответствует имени проекта. Советую оставить его без изменений.
Еще одно поле, требующее нашего вмешательства, - это поле «Location». Здесь вы должны указать путь к тому месту на вашем жестком диске, где будет храниться проект. Путь нельзя ввести непосредственно с клавиатуры. Для изменения пути нужно нажать кнопку справа, на которой в качестве названия поставлено многоточие («...»).
Откроется диалог «Select folder», при помощи которого вы и должны выбрать директорию. Просто войдите в нужную директорию и нажмите кнопку «Select». При выборе директории нужно учитывать значение чек-бокса «Create folder». Если там стоит «галочка», то при выборе в качестве Location каталога «c:\AVR\myprog», программа поместит ваш проект в каталог «с:\ AVR\mypr og\Prog I».
На этом можно закончить работу с первым окном построителя. Но прежде, чем нажимать кнопку «Next>>», обратите внимание, что в нижней части окна имеется еще один чек-бокс. Он называется «Show dialog at startup». При выборе этого элемента, диалог создания проекта будет автоматически запускаться каждый раз при запуске программы AVR Studio.
Для перехода к следующему этапу построения проекта нажмите кнопку «Next> >». Содержимое окна построителя изменится. Появятся два больших поля под общим названием «Select debug platform and device» (Выбор отладочной платформы и микроконтроллера). В списке Отладочных платформ («Debug platform») перечислены все отладочные платы, которые поддерживает данная программа.
Мы не будем использовать внешних плат, поэтому выберем пункт «AVR Simulator» (Программный имитатор AVR). В поле «Device» выбираем нужный тип микросхемы. В нашем случае это ATtiny2313. Теперь все настройки закончены. Для завершения процесса нажмите кнопку «Finish». После нажатия этой кнопки программа создает проект и записывает его в выбранную вами директорию.
Сразу после создания новый проект состоит всего из двух файлов:
· собственно файл проекта Progl. aps;
· файл, куда будет помещен текст программы на Ассемблере Progl. asm.
Файл текста программы автоматически открывается в окне 3. Причем он пока абсолютно пустой. Теперь вы можете приступать к набору этого текста. Если речь идет о программе Progl, то просто наберите текст, приведенный в листинге 4.1. При наборе текста вы можете пользоваться всеми возможностями, какие обычно предоставляет любой современный текстовый редактор.
Встроенный текстовый редактор программы AVR Studio поддерживает все необходимые сервисные функции:
· выделение текстовых фрагментов;
· вырезание;
· копирование;
· вставку;
· перетаскивание мышью;
· поиск и замену и многое другое.
Для управления всеми этими возможностями используется стандартный интерфейс, знакомый вам по многим текстовым редакторам, в частности, по популярному редактору Microsoft Word. Набранный тест программы не забудьте записать на диск при помощи команды «Save» меню «File» или при помощи соответствующей кнопки на панели инструментов ( ). Кнопка позволяет записать сразу все открытые текстовые файлы.
Для программ, приведенных в этой книге, проекты создавать не обязательно. Достаточно скачать файл с электронными версиями программ с сайта http:// book.microprocessor.by.ru, распаковать архив и поместить его содержимое в любую подходящую директорию.
Например, в директорию c:\AVR\myprog\. После распаковки у вас появится целый набор директорий, в каждой из которых помещен свой проект. Причем архив содержит не только проекты на Ассемблере, но и на СИ. Любой проект на Ассемблере можно открыть при помощи пункта «Open Project» меню «Project».
Трансляция программы
Форматы файлов
После того, как текст программы набран и записан на жесткий диск, необходимо произвести трансляцию программы. В процессе трансляции создается результирующий файл, который представляет собой ту же программу, но в машинных кодах, предназначенную для записи в программную память микроконтроллера. Результирующий файл имеет расширение hex.
Кроме hex-файла транслятор создает еще несколько вспомогательных файлов. И главное, файл с расширением еер. Этот файл имеет точно такую же внутреннюю структуру, как файл hex. А содержит он информацию, предназначенную для записи в EEPROM. Такая информация появляется в том случае, когда в тексте программы переменным, размещенным в сегменте eeprom, присвоены начальные значение. В наших примерах мы этого не делали. Поэтому файле расширением еер во всех проектах будет пустой (содержать лишь завершающую строку).
Теперь немного разберемся с форматом файлов hex и еер. В обоих случаях применяется так называемый НЕХ-формат, который практически является стандартом для записи результатов транслирования различных программ. Он поддерживается практически всеми трансляторами с любого языка программирования.
В принципе, программисту не обязательно знать структуру этого формата. Достаточно понимать, что в hex-файле определенным способом закодирована программа в машинных кодах. Именно этот файл используется программатором для «прошивки» программной памяти микроконтроллера. Любой программатор поддерживает hex-формат и распознает записанные туда коды автоматически. Однако для тех, кому это интересно, приведу краткое описание hex-формата.
Формат НЕХ-файла
Если вы посмотрите содержимое такого файла при помощи редактора «Блокнот», то вы увидите, что это текстовый файл, в котором данные закодированы в виде текстовых строк. Ниже приведено содержимое hex-файла, полученного в результате трансляции программы
:020000020000FC
:100000000FE70DBF00E806BD00E006BD01BB0FEF26
:1000100007BB08BB02BBOOE808B900B308BBFDCFB3
:0000Q001FF
Как видите, данный файл состоит из четырех строк. Первая и последняя строки несут служебную информацию. Наличие первой строки необязательно. Система AVR Studio при трансляции программы всегда добавляет в hex-файл первую строку именно такого содержания. Последняя строка -- это стандартный конец для любого hex-файла.
Оставшиеся две строки как раз и содержат информацию о кодах программы. В каждой такой строке закодирована цепочка байтов и адрес в памяти, где эти байты должны размещаться.
Строка начинается с двоеточия. Двоеточие -- обязательный элемент, который служит для идентификации hex-формата. Все остальные символы в строке -- это шестнадцатеричные числа, записанные слитно без пробелов. Отдельные числа отличают по их позиции в строке. Так первые два знака занимает шестнадцатеричное число, означающее длину цепочки.
В нашем случае длина обеих цепочек равна 0x10 (то есть 16) байт. Следующие четыре символа -- это начальный адрес, куда эти байты должны быть помещены. Первая цепочка будет размещена в памяти, начиная с нулевого адреса. Вторая цепочка -- с адреса 0x0010. Очередные два знака занимает код вида строки. В интересующих нас строках он равен «00», что означает, что эти строки предназначены для записи данных (в первой строке такой код равен «02», а в последней «01»).
Сразу после кода вида строки начинаются собственно данные. Каждый байт данных занимает два знака. Самые последние два символа -- это контрольная сумма. Она рассчитывается по специальной формуле с использованием значений всех байтов цепочки и служит для проверки на отсутствие ошибок.
Процедура трансляции
Но вернемся к процедуре трансляции. Для того, чтобы запустить процесс трансляции текущего проекта, нужно выбрать в меню «Build» пункт, который тоже называется «Build», или нажать кнопку. Длительность процесса трансляции зависит от размеров программы. Сразу же после начала процесса вкладка «Build» в окне 2 выходит на передний план.
В процессе трансляции сюда выводятся служебные сообщения. К таким сообщениям относятся: сообщения о завершении различных этапов трансляции, сообщения об ошибках (Error), а также предупреждения (Warning). В готовой отлаженной программе ошибок и предупреждений быть не должно. Если программа обнаружит критическую ошибку (Error), то процесс трансляции будет приостановлен, и результирующие файлы созданы не будут. В этом случае необходимо устранить ошибки и повторить трансляцию. Естественно, транслятор не в состоянии найти все виды ошибок. Он находит только явные ошибки, которые можно найти автоматически. К таким ошибкам относятся;
· ошибки синтаксиса (неправильное написание имени команды);
· неверное количество параметров у оператора;
· попытка использования неописанных переменных и т. п.
Например, сообщение «Unknown instruction or macro» означает, что найдена «Неизвестная инструкция или макрокоманда».
Предупреждения -- это тоже ошибки, но некритические. При возникновении некритической ошибки процесс трансляции завершается как обычно. Все результирующие файлы создаются в полном объеме. Однако прежде чем зашивать такую программу в микроконтроллер, тщательно проанализируйте сообщение и постарайтесь определить, как оно повлияет на результаты работы. В любом случае, лучше изменить программу таким образом, чтобы устранить все предупреждения.
Все сообщения во вкладке «Build» появляются по мере их поступления. Для наглядности каждое сообщение помечено цветным кружочком в начале строки:
· сообщения об ошибках помечаются кружочком красного цвета;
· предупреждения -- желтым кружочком;
· сообщения об успешном выполнении каждого очередного этапа трансляции помечаются зеленым кружочком.
Если сообщения не вмещаются в окно, то они скрываются в верхней его части. Однако, используя полосу прокрутки, их всегда можно просмотреть. В случае успешного завершения процесса трансляции в качестве последнего сообщения выводится статистическая информация (см. раздел 9.1.2). Каждое сообщение об ошибке во вкладке «Build» содержит точное указание места в программе, где произошла эта ошибка. При этом указывается:
· имя файла;
· номер строки;
· фрагмент текста программы, содержащий ошибку;
· ее расшифровка.
Для того, чтобы быстро перейти к фрагменту программы, содержащему эту ошибку, достаточно двойного щелчка по сообщению об ошибке. Окно с текстом программы выйдет на передний план, и в этом окне автоматически отобразится нужный участок текста. На левой границе окна напротив строки, содержащей ошибку, вы увидите синюю стрелочку -- указатель ошибки.
Иногда программа неверно определяет место, где возникла ошибка. Это происходит из-за несовершенства анализатора синтаксиса. Дело в том, что очень сложно разработать идеальный алгоритм анализа ошибок. Если в какой-либо строке транслятор показывает ошибку, а вы ошибок не наблюдаете, посмотрите на предыдущие строки. Возможно, ошибка где-то там.
Отладка программы
Ошибки алгоритма и его реализации
Если вы исправили все ошибки и добились отсутствия предупреждений, то это значит, что программа успешно оттранслирована. В принципе, вы можете записывать ее в программную память и пробовать ее работу «в железе». Но в большинстве случаев отсутствие синтаксических ошибок еще не означает отсутствие ошибок как таковых. Можно написать команду правильно, да не ту. Но самая главная неприятность -- ошибки алгоритма или его реализации.
Программист может упустить какой-либо шаг или неправильно поставить условие. Всех возможных ошибок алгоритма не перечесть. Но в результате программа может работать неправильно либо совсем не работать. По этой причине перед тем, как записывать программу в программную память микроконтроллера, необходимо попытаться выявить все эти ошибки.
Вообще, процесс написания программы процентов на 60--70 состоит из поиска и устранения ошибок. И основное количество ошибок выявляется при отладке программы. Все программные примеры, приведенные в этой книге, прежде чем появились на ее страницах, прошли процесс отладки.
И несмотря на простоту этих программ и достаточный опыт в программировании, мне пришлось исправить немало ошибок. По этому поводу существует народная программистская шутка: «Если ты написал программу и транслятор не обнаружил в ней ни одной ошибки, посмотри, все ли в порядке с транслятором!».
С большим юмором подошли к этому вопросу англичане. По-английски процесс отладки называется Debug (Дебаг). Слово «Bug» -- означает блоха. A «Debug» -- это процесс избавления от ошибок или процесс ловли блох. Именно этим вам и придется заняться.
Этапы процесса отладки
Процесс отладки начинается с перевода программы в соответствующий режим. Если проект открыт, а все его программы записаны и оттранслированы, то для перехода в режим отладки выберите пункт «Start Debugging» в меню «Debug» или нажмите кнопку ( ) на панели задач.
Программа начнет процесс подготовки. Процесс длительный. Пока идет подготовка, в нижней части основной панели будет двигаться полоса, показывающая процент выполнения операции. По окончании процесса подготовки программа переходит в новый режим. В окне 1 на передний план выходит вкладка «I/O View» (см. рис. 4), которая теперь будет использоваться для просмотра содержимого всех регистров. Причем внешний вид этой вкладки немного изменяется. Для каждого элемента в дереве ресурсов появляется поле, отображающее его содержимое.
В окне 2 на передний план выходит вкладка «Breakpoints and Tracepoints», где теперь будут отображаться все точки останова. В панели инструментов активизируются все инструменты, относящиеся к режиму отладки (до этого они были неактивны). В окне 3 на первый план выходит текст главного программного файла. На левой границе окна этого файла появляется желтая стрелка -- указатель текущей выполняемой команды. Указатель установится в начало программы (напротив первой исполняемой команды). Теперь все готово для отладки.
Отладка может выполняться разными методами. Самый простой метод - пошаговое выполнение. Для того, чтобы сделать один шаг, выберите в меню «Debug» пункт «Step into» («Шаг в») либо нажмите кнопку на панели инструментов.
Можно также просто нажать кнопку «F11». В результате программа выполнит одну текущую команду. Указатель текущей команды (желтая стрелка) переместится в следующую позицию. Содержимое регистров изменится в соответствии с выполненной операцией.
Вы можете это проверить, найдя нужный регистр в окне 1. Убедившись, что команда выполнена правильно, делайте следующий шаг. И так далее. При этом вы можете проследить последовательность выполнения операций, правильность выполнения условных переходов и многое другое.
В любой момент вы можете вручную изменить содержимое любого из элементов в дереве ресурсов. Причем можно изменять как содержимое любого отдельного разряда, так и всего регистра в целом. Для изменения содержимого разряда достаточно щелкнуть при помощи мыши по одному из квадратиков, символизирующему нужный разряд (см. рис. 4).
При этом состояние квадратика изменится на противоположное (единица изменится на ноль либо наоборот). Для изменения значения всего регистра необходимо произвести двойной щелчок мышью по изображению содержимого регистра (в шестнадцатеричном виде). Откроется окно содержимого. В этом окне вы можете выбрать одну из четырех форм представления числа (шестнадцатеричное, десятичное, восьмеричное или двоичное) и изменить это значение в выбранном вами формате. Затем нажмите кнопку «Ok» и изменение «запишется» в соответствующий регистр.
Изменяя содержимое регистра, вы можете моделировать различные ситуации. Например, имитировать изменение сигналов на входе порта или принудительно изменять значение счетного регистра таймера, чтобы не ждать, пока он досчитает до нужного значения.
Кроме директивы «Шаг в», имеется еще несколько ее модификаций. Их назначение и способы вызова приведены в табл. 1.
Таблица 1.
Директива «Шаг через» используется в том случае, если при пошаговом выполнении программы встретится команда вызова подпрограммы. Если вы не хотите пошагово выполнять всю подпрограмму, вы можете выполнить ее за один шаг. При этом желательно, чтобы подпрограмма не содержала ошибок.
Директива «Шаг из» применяется в том случае, если вы все же вошли в подпрограмму, но затем поняли, что ее пошаговое выполнение излишне. Выбрав данную директиву, можно за один шаг выполнить все оставшиеся команды подпрограммы.
Директива «Выполнить до» применяется в том случае, когда какая-либо часть программы не оформлена в виде подпрограммы, но ее желательно выполнить за один шаг. В этом случае в конце выбранного фрагмента вы можете установить текстовый курсор (мигающую вертикальную полоску) и выбрать директиву «Выполнить до». Отладчик за один шаг выполнит все команды, начиная с текущей (отмеченной желтой стрелкой) и вплоть до текстового курсора. Команда в строке с курсором выполняться не будет. Она станет текущей (на нее теперь будет указывать желтая стрелка).
Применение точек останова
Пошаговый метод отладки удобен для отладки небольших несложных программ или отдельных участков большой программы. Но представьте себе, что ваша программа содержит цикл, который должен быть выполнен большое количество раз. Для того, чтобы проверить правильность выполнения всего этого цикла в пошаговом режиме, вам пришлось бы очень долго щелкать мышкой! В подобных случаях применяются точки останова (Breakpoint).
Определение. Точка останова -- это специальная метка, которую в отладочном режиме программист может поставить против любой строки программы.
Затем программа запускается под управлением отладчика. Но это -- не реальная работа. Это лишь имитация работы микроконтроллера. Программа выполняется строка за строкой, пока в очередной строке не встретится точка останова. Обнаружив такую точку, отладчик приостанавливает выполнение программы.
Выглядит это таким образом, как-будто за один шаг вы выполнили большой кусок программы. Теперь вы можете снова просмотреть и (или) изменить содержимое любого регистра. А затем продолжить отладку. Причем, вы можете продолжить ее как в пошаговом режиме, так и запустить программу в режиме автоматического выполнения до следующей точки останова.
Для управления точками останова программа имеет несколько встроенных директив, которые показаны в таблице 2.
Таблица 2.
Директивы управления точками останова
Для того, чтобы поставить точку останова в какой-либо строке программы, нужно сначала поместить в эту строку текстовый курсор. Затем выбрать директиву «Поставить точку останова» (см. табл. 2). Точка останова выглядит как коричневый кружочек напротив выбранной строки программы на левой границе текстового окна.
Если поместить курсор в строку, где уже есть точка останова, и выполнить еще раз директиву «Поставить точку останова», то точка убирается. Убрать сразу все поставленные точки останова можно при помощи директивы «Убрать все точки останова».
Второй способ простановки точек останова -- задание их через меню. Предназначенный для этого пункт «New Breakpoints» меню «Debug» имеет два подпункта. При помощи подпункта «Program Breakpoint» можно устанавливать программные точки останова. То есть точно такие, какие мы ставили предыдущим способом.
Отличие способа постановки точек через меню в том, что их местоположение в программе вы определяете путем заполнения полей в специальной форме. В этой форме, кроме номера строки или адреса программы, где вы хотите поставить точку останова, вы можете указать количество проходов.
Для этого вам необходимо заполнить поле «Break execution after: -- hits» («Остановить выполнение после: -- проходов»). Если число в этом поле не равно нулю, то программа остановится в данной точке останова не с первого раза, а лишь тогда, когда пройдет через нее указанное количество раз.
Если вы установили вашу точку останова не через меню, а напрямую в тексте программы, вы все равно можете вызвать описанный выше диалог и изменить в нем количество проходов, щелкнув мышью по строке с описанием нужной точки останова во вкладке «Breakpoints and Tracepoints».
При помощи подпункта «Data Breakpoint» пункта «New Breakpoints» меню «Debug» можно задавать точки останова по данным. При выборе этого пункта меню открывается диалог, в котором вы можете выбрать любую из переменных вашей программы или любой ресурс микроконтроллера (из открывающегося списка) и поставить точку останова по обращению к этой переменной (ресурсу).
Программа позволяет выбрать целый ряд условий, при которых наступит останов программы. По умолчанию останов происходит при любом обращении к этой переменной как в режиме чтения, так и в режиме записи. Вы можете выбрать другое условие. Например, при равенстве переменной определенному значению. Выбор условия производится при помощи поля «Break when:» («Остановиться если:») и поля «Access type» («Тип доступа»). Имя переменной выбирается при помощи поля «Location».
Диалог простановки точек останова обоих видов можно вызывать не только через меню. В верхней левой части вкладки «Breakpoints and Tracepoints» для этого имеется специальная кнопка.
После того, как вы проставили все точки останова, вы можете запускать программу в режиме автоматического выполнения. Для управления отладчиком в этом режиме программа AVR Studio также имеет несколько специальных директив (см. табл. 3). Запуск автоматического выполнения программы производится при помощи директивы «Пуск».
Пока программа находится в режиме автоматического выполнения, новое состояние регистров не отображается. Указатель текущей команды также отсутствует. В нижней строке главной панели программы в правой ее стороне находится индикатор состояния. В режиме останова это желтый кружочек с минусом посередине. Слева от него находится слово «Stopped» (Остановлено). В режиме автоматического выполнения программы желтый кружочек превращается в зеленый с плюсом внутри. Вместо слова «Stopped» появляется слово «Running» (Запущено).
Если вы неправильно поставили точку останови либо и вовсе забыли ее поставить, программа будет находиться в режиме автоматического выполнения бесконечно долго. Для досрочной остановки программы используется директива «Остановить». Если в процессе отладки программы понадобится начать все сначала (сымитировать сброс микроконтроллера), это можно сделать при помощи директивы «Сброс». По окончании отладки программы необходимо перейти в режим редактирования. Для этого служит директива «Закончить отладку».
Таблица 3.
Просмотр и изменение содержимого введенных переменных
Для оперативного просмотра и изменения содержимого введенных вами переменных в процессе отладки можно открыть специальное окно. Для этого достаточно выбрать пункт «Watch» в меню «View». Окно имеет четыре вкладки. Поэтому можно иметь четыре разных набора переменных.
Для того чтобы включить какую-либо переменную в текущее окно «Watch», необходимо установить курсор мыши на имя этой переменной в тексте программы и нажать правую кнопку мыши. Допустим, вы установили курсор на переменную temp. Тогда в открывшемся меню вы увидите пункт «Add Watch»: «temp». Выберите этот пункт, и переменная будет включена в список «Watch.
Точно так же можно оперативно просматривать содержимое любого вида памяти. Для этого выберите пункт «Memory» в меню «View». Откроется новое окно под названием «Memory». По умолчанию в этом окне в виде дампа будет представлено содержимое программной памяти. При помощи выпадающего списка в левой верхней части этого окна можно выбрать другой вид памяти. Память данных (Data), EEPROM или даже содержимое РОН или портов вода/вывода. В процессе отладки вы всегда будете видеть в этом окне все изменения выбранной части памяти. Если вы желаете видеть одновременно содержимое сразу нескольких видов памяти, то вы можете открыть второе и даже третье подобное окно. Для этого выберите пункт «Memory2» или «МетогуЗ» в меню «View».
Исправление ошибок
Все программы, приведенные в данной книге, уже отлажены, и изменения в них не требуется. Однако в том случае, если вы захотите доработать программу либо написать новую, вам придется много раз переписывать ее, искать различные фрагменты, заменять их на другие и т. д. Редактор программы AVR Studio дает полный спектр стандартных средств редактирования. Одно из таких средств -- это простановка закладок. Поставив закладку в любом месте в тексте программы, вы можете спокойно листать этот текст дальше. В случае необходимости вы можете в любой момент вернуться к закладке. В табл. 4 приведены все директивы работы с закладками.
Для создания новой закладки нужно установить в нужной строке текстовый курсор и выбрать директиву «Поставить закладку». При повторном вызове этой директивы в той же строке, закладка убирается. Проставив несколько закладок, можно передвигаться по ним при помощи директив «Перейти к следующей закладке» и «Перейти к предыдущей закладке». При помощи соответствующей директивы можно убрать все закладки.
Таблица 4.
Размещено на Allbest.ru
Подобные документы
Анализ развития и производства микропроцессоров. История их появления. Типология основные пользовательские характеристики и принцип их действия. Перспективы развития современных микропроцессорных технологий и особенности мирового рынка полупроводников.
курсовая работа [337,5 K], добавлен 17.03.2015Основные характеристики микропроцессоров: тактовая частота, кэш память, дополнительные инструкции, разрядность, архитектура, количество ядер. История развития микропроцессоров, главные фирмы-производители. Разработка программы работы с массивом.
курсовая работа [139,4 K], добавлен 24.06.2011Краткая история развития микропроцессора как важнейшего элемента любого персонального компьютера. Сущность, значение, функциональные возможности процессоров. Особенности микропроцессоров Pentium, Intel i80386 и i80486. Применение и значение сопроцессора.
курсовая работа [27,5 K], добавлен 09.11.2010Экскурс в историю развития компьютерных микропроцессоров. Основные характеристики, свойства и технологии производства. Первые процессоры, революционная "трешка". Основные конкуренты Intel на рынке микропроцессоров. Революция номер два: шестое поколение.
реферат [338,6 K], добавлен 17.12.2010Технологии производства микропроцессоров: основные этапы производства. Выращивание диоксида кремния и создание проводящих областей и тестирование. Особенности производства микропроцессоров. Производство подложек, легирование, диффузия, фотолитография.
курсовая работа [4,7 M], добавлен 26.03.2009Классификации архитектур вычислительных систем. Организация компьютерных систем. Устройство центрального процессора. Принципы разработки современных компьютеров. Эволюция микропроцессорных систем. Увеличение числа и состава функциональных устройств.
дипломная работа [1,4 M], добавлен 29.01.2009Логические функции и структура микропроцессоров, их классификация. История создания архитектуры микропроцессоров x86 компании AMD. Описание К10, система обозначений процессоров AMD. Особенности четырёхъядерных процессоров с микроархитектурой К10 и К10.5.
курсовая работа [28,9 K], добавлен 17.06.2011Характеристика микропроцессоров Intel и AMD. Развитие и сравнение производительности микропроцессоров. Штаб-квартира компании AMD, ее производственные мощности. Описание бесплатной операционной системы Linux и ее возможности. Способы ввода информации.
контрольная работа [25,4 K], добавлен 19.02.2009Понятия и принцип работы процессора. Устройство центрального процессора. Типы архитектур микропроцессоров. Однокристальные микроконтроллеры. Секционные микропроцессоры. Процессоры цифровой обработки сигналов. Эволюция развития микропроцессоров Intel.
реферат [158,8 K], добавлен 25.06.2015Семь поколений процессоров. Технология производства микропроцессоров. Сравнительные характеристики процессоров AMD и Intel на ядре Clarkdale. Квазимеханические решения на основе нанотрубок. Одновременная работа с Firefox и Windows Media Encoder.
дипломная работа [2,2 M], добавлен 11.06.2012