Реклама на сайте | Помощь сайту   English version | Free likes 
KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Отладка программы микроконтроллера семейства MCS-51 с помощью эмулятора ПЗУ

Отладка программы микроконтроллера семейства MCS-51 с помощью эмулятора ПЗУ



Раздел: Средства разработки

С появлением микропроцессоров в технике проектирования электронных устройств появился новый раздел: программирование. Сложность рабочей программы микропроцессора стала определять сложность разработки устройства в целом. В микроконтроллерах (МК), интегрировавших в себе память и некоторые периферийные устройства, эта тенденция проявляется наиболее сильно.
    Сложность и трудоемкость процессов отладки программного обеспечения МК определяется следующими факторами [1]:
  • отладка программной и аппаратной частей системы сильно взаимосвязаны;
  • отсутствует непосредственный доступ к внутренним ресурсам и контрольным точкам МК;
  • многоразрядный характер сигналов, сложно распределенных во времени;
  • непериодичность или большая скважность появления сигналов в системе;
  • большое разнообразие внешних устройств и протоколов обмена информацией с ними.

    В связи с этим традиционная контрольно-измерительная аппаратура (например, осциллограф) может лишь в ограниченной степени использоваться для отладки программы МК.
    Простейший и одновременно самый неэффективный способ отладки программы МК это "метод проб и ошибок": загрузка программы в репрограммируемое постоянное запоминающее устройство (ПЗУ), попытка ее выполнения, обнаружение и исправление ошибок в программе, стирание информации и т.д. Процессы стирания и программирования микросхемы ПЗУ являются достаточно медленными и после определенного количества циклов перепрограммирования она выходит из строя. Многократные установки и извлечения микросхемы снижают надежность электрических контактов в розетке ПЗУ. Возможность получения отладочной информации о системе практически отсутствует.
    Поэтому в настоящее время отладку программы МК проводят обычно кросс-средствами на базе управляющего компьютера. Это позволяет в минимальной степени отвлекать ресурсы МК и обеспечивает поддержку системы в процессе ее отладки. Отлаживаемое устройство соединяется с управляющим компьютером через некоторое инструментальное средство, например, эмулятор ПЗУ, загружаемый управляющим компьютером и подключенный к розетке ПЗУ отлаживаемого устройства. Отладочный комплекс, построенный таким образом, позволяет загружать и редактировать программу, вводить в нее тестовые модули, получать определенную отладочную информацию о системе и многое другое, о чем мы расскажем в этой статье.
    Хотя эмулятор ПЗУ является не единственным и не самым мощным отладочным средством, его популярность и "долголетие" обеспечиваются следующими достоинствами:

  • универсальность применения независимо от типа МК (необходима только возможность работы с внешней памятью программ);
  • работа в реальном масштабе времени;
  • невысокая цена и доступность широкому кругу профессиональных разработчиков и радиолюбителей.

    Рассмотрим особенности отладки рабочей программы с помощью эмулятора ПЗУ на примере МК семейства 8051 (1816ВЕ31(51), 1830ВЕ31(51), 80(С)31(51) и т.п.). Для визуального контроля сигналов в отлаживаемом устройстве будем пользоваться осциллографом.
    Приступая к отладке, необходимо проверить работоспособность аппаратной части системы и прежде всего самого МК. Для этого воспользуемся тестами "свободного счета" [2], которые заключаются в переборе всех возможных кодовых комбинаций на линиях портов МК.
    Прежде всего убедитесь по схеме отлаживаемого устройства, что линии портов МК не нагружены на выходы других элементов и временно отсоедините такие нагрузки, если они есть. Это необходимо сделать потому, что в процессе тестирования линии портов МК будут устанавливаться в состояние вывода. Загрузите эмулятор ПЗУ кодами 00h в пределах адресного пространства программ МК. При выполнении такой тестовой программы МК последовательно перебирает все адреса программной памяти, выполняя на каждом шаге команду "нет операции". Запустив программу на выполнение, проконтролируйте осциллографом сигналы ALE, PME и портов P0, P2. Вид сигналов на линиях портов должен соответствовать временным диаграммам двоичного счетчика с учетом мультиплексирования младшего байта адреса и данных на порте P0.
    Далее проверьте порты P1 и P3, загрузив эмулятор ПЗУ следующей тестовой программой:

mov     p1,#0     ; (P1):=0mov     p3,#0     ; (P3):=0mark:inc     p1        ; (P1):=(P1)+1inc     p3        ; (P3):=(P3)+1sjmp    mark      ; Переход на метку mark

    Эта программа выводит на линии указанных портов последовательность кодов от 00h до FFh, моделируя восьмиразрядный двоичный счетчик. Если временные диаграммы сигналов на линиях портов P1 и P3 соответствуют требуемым, восстановите отключенные нагрузки портов и переходите к отладке программы МК. Помните, что вы отлаживаете одновременно программную и аппаратную часть системы, и не забывайте периодически контролировать осциллографом ее сигналы в контрольных точках. Несоответствие вида сигналов вашим представлениям о них - повод для серьезных размышлений и дополнительных проверок.
    При разработке и отладке рабочей программы МК следует придерживаться модульного принципа, то есть разделять ее на части по функциональному признаку. Это позволяет легко перемещать отдельные программные модули и применять их в других проектах. Модуль, в который передается управление после включения питания или сброса МК, называется главным или основным.
    Во избежание непредсказуемых результатов работы программы инициализируйте все переменные перед их первым использованием. В некоторых случаях может потребоваться инициализация периферийного оборудования. Блок инициализации может быть помещен как в начало основного программного модуля, так и перед ним, в зависимости от конкретного алгоритма работы отлаживаемого устройства.
    В начале отладки основной модуль содержит только точку входа в программу и обработчик ситуации выхода из программы. Несмотря на то, что в микроконтроллерных системах выход из программы встречается крайне редко, такую возможность необходимо предусмотреть для корректного завершения аварийных ситуаций. Пример основного программного модуля в начале отладки приведен ниже.

start:         ; Точка входа в программу...     ...    ; Команды основного программного модуляend:...     ...    ; Команды обработчика ситуации выхода из программыljmp    end    ; Переход на метку end

    Передачу управления на точку входа в программу следует проводить командой перехода, а не вызова подпрограммы, чтобы не засорять стек адресом возврата. В приведенном примере при выходе из программы произведено зацикливание, имея в виду что перезапуск системы сигналом "СБРОС" ("RESET") выведет ее из этого состояния.
    В процессе отладки к основному модулю по мере готовности добавляются другие программные модули, причем порядок их отладки и подключения играет важную роль.
    Отладку следует начинать с драйверов устройств вывода информации (дисплей, цифро-аналоговый преобразователь и т.п.), поместив вызов драйвера в основной модуль. Затем отлаживаются драйверы остальных периферийных устройств, подпрограммы обработки данных, и лишь после этого совместная работа всех программных модулей. При наличии дисплея его драйвер отлаживается в первую очередь и используется в дальнейшем для вывода отладочной информации, например, содержимого внутренней памяти данных МК. Если используемый вами эмулятор ПЗУ позволяет записывать и считывать информацию как управляющим компьютером, так и отлаживаемым устройством, то отладочную информацию можно выводить на дисплей управляющего компьютера, используя эмулятор ПЗУ в качестве внешней памяти данных МК. Для этого содержимое внутренней памяти данных МК копируется в свободную область памяти эмулятора ПЗУ, а затем считывается управляющим компьютером и выводится на его дисплей. Например, чтобы вывести содержимое внутреннего ОЗУ данных МК, подключите его выход сигнала записи во внешнюю память данных WR к входу сигнала записи эмулятора ПЗУ и используйте следующую подпрограмму.

savedata:anl     psw,#0E7h     ; Выбор регистрового банка 0mov     dptr,#8000h   ; Занесение в DPTR начального адреса       ; внешней памяти данныхmov     a,r0          ; Пересылка содержимого R0 вmovx    @dptr,a       ; эмулятор ПЗУinc     dptr          ; Увеличение адреса внешней памяти данныхmov     a,r1          ; Пересылка содержимого R1 вmovx    @dptr,a       ; эмулятор ПЗУmov     r1,#7Eh       ; Загрузка счетчика циклаmov     r0,#1h        ; Загрузка адреса внутреннего ОЗУ данныхloop:inc     r0            ; Увеличение адреса внутреннего ОЗУ данныхinc     dptr          ; Увеличение адреса внешней памяти данныхmov     a,@r0         ; Пересылка содержимого внутреннегоmovx    @dptr,a       ; ОЗУ данных в эмулятор ПЗУdjnz    r1,loop       ; Проверка завершения циклаret

    В подпрограмме предполагается, что объем памяти программ отлаживаемого устройства не превышает 32 кбайт, поэтому свободная область памяти эмулятора ПЗУ, используемая для вывода отладочной информации начинается с адреса 8000h. Содержимое регистров R0 и R1 пересылается отдельно, так как в дальнейшем они используются в подпрограмме для организации цикла. После выполнения подпрограммы вывода отладочной информации делают останов и считывают управляющим компьютером содержимое 128 байт памяти эмулятора ПЗУ с начального адреса 8000h. Эта информация выводится на дисплей управляющего компьютера и анализируется. Аналогичным образом может быть выведено содержимое других программно доступных регистров МК.
    Приступая к отладке драйвера периферийного устройства, отключите его управляющие сигналы, вырабатываемые МК, чтобы избежать возможного выхода устройства из строя. Если процесс носит однократный характер, "зациклите" программу и запрограммируйте при необходимости сигнал синхронизации для осциллографа. Отлаживайте драйвер, контролируя осциллографом формируемые МК сигналы. Убедившись в соответствии временных диаграмм управляющих сигналов требуемым, подключите периферийное устройство и продолжите отладку драйвера на реальной аппаратуре. В заключение удалите из программного модуля отладочные элементы и проверьте его работу в окончательном виде.
    Отлаженный модуль не следует удалять из программы, даже если он в данный момент не используется. Пользование общими ресурсами МК довольно часто приводит к тому, что полностью отлаженная подпрограмма перестает работать при добавлении другой подпрограммы. Поэтому после отладки очередного программного модуля убедитесь, что ранее отлаженные драйверы и подпрограммы работают правильно. При использовании прерываний не запрещайте их без крайней необходимости после отладки и подключения соответствующей подпрограммы.
    При "зависании" отлаживаемой программы пригодится следующий метод локализации ошибки: введите в программу контрольные точки путем вывода на дисплей последовательного набора чисел. После выполнения ("зависания") такой программы на дисплее отобразится число, соответствующее последней успешно пройденной контрольной точке. Если несколько контрольных точек попали в бесконечный цикл, то на дисплее будет отображаться быстрая смена чисел. Для того чтобы определить какие именно контрольные точки попали в цикл, установите программную задержку при выводе каждого числа, например в виде холостого цикла. При отсутствии встроенного дисплея отладочную информацию можно вывести на дисплей управляющего компьютера через свободную область памяти эмулятора ПЗУ.
    Отладив все драйверы устройств, приступайте к отладке прочих подпрограмм. Если подпрограмма реализует сложный алгоритм обработки или преобразования данных, то при отладке такого программного модуля могут возникнуть затруднения. Вывод на дисплей одного или нескольких промежуточных значений переменных дает мало информации для анализа ошибок. Преодолеть трудности поможет запись отладочной информации необходимого объема в свободную область памяти эмулятора ПЗУ с последующим считыванием и выводом на дисплей управляющего компьютера.
    Когда все программные модули работают, можно отлаживать их совместно. Возникающие при этом трудности подразделяются на две группы. К первой группе относятся проблемы, возникающие при использовании общих ресурсов МК, таких как арифметико-логическое устройство, память данных, порты ввода-вывода и др. Вторая группа трудностей связана с работой микроконтроллерных устройств в реальном масштабе времени. Системы реального времени обычно являются многопоточными, то есть несколько программных задач (потоков) выполняются параллельно во времени, взаимодействуя друг с другом и используя общие ресурсы, так как в каждый момент времени МК может решать только одну задачу. Последовательность выполнения задач определяется их приоритетами, при активизации задачи с более высоким приоритетом ей передается управление и ресурсы. При этом возможны конфликты между выполняемыми потоками как из-за использования общих ресурсов МК, так и из-за дефицита времени на обработку данных. Поэтому обращайте особое внимание на состояние ресурсов МК, используемых в программных модулях, контролируйте изменения их состояния путем вывода отладочной информации. Старайтесь уменьшить число глобальных переменных, по возможности заменив их локальными. Следите за состоянием стека. Оценивайте время выполнения критичных участков программы, проверяйте систему при различных значениях входных сигналов, возможных на практике.
    С помощью эмулятора ПЗУ можно отладить программу МК, размещаемую и во внутренней памяти, если на этапе проектирования временно разместить ее во внешней памяти программ. При этом занимаются порты P0 и Р2 и, если оставшихся линий ввода-вывода МК не достаточно, то на этапе отладки используются стандартные схемы расширения портов ввода-вывода, адресуемые как ячейки внешней памяти данных. В простейших случаях для увеличения линий вывода применяются регистры, а для увеличения линий ввода - элементы с третьим состоянием на выходе.
    Отладив программу МК с помощью эмулятора, удалите из нее отладочные элементы, запрограммируйте ПЗУ (или МК с внутренней памятью программ) и проверьте работу устройства в окончательном виде.
    Изложенными приемами не ограничиваются возможности отладки программ МК с помощью эмулятора ПЗУ. Процесс отладки как и проектирования в целом в определенной степени искусство, поэтому на одном и том же инструменте каждый создает свою музыку. Авторы будут благодарны читателям, которые поделятся своими оригинальными средствами и методами отладки программ МК.

ЛИТЕРАТУРА

  • Зеленко Г.В., Иванников А.Д., Сыпчук П.П. Проектирование и отладка микропроцессорных систем. М.: Машиностроение, 1982, с.30.
  • Уильямс Г.Б. Отладка микропроцессорных систем: Пер. с англ..- М.: Энергоатомиздат, 1988, с.41.

Автор: Г. Выдолоб В. Самойлов

 © 2003—2024 «Электронный портал»Обр@тная связь