Курсовая работа
«Микроконтроллеры дляначинающих. И не только»
Введение
Микроконтро́ллер (англ. MicroControllerUnit, MCU) – микросхема,предназначенная для управления электронными устройствами. Типичныймикроконтроллер сочетает в себе функции процессора и периферийных устройств,может содержать ОЗУ и ПЗУ. По сути, это однокристальный компьютер, способныйвыполнять простые задачи. Большая часть выпускаемых в современном мирепроцессоров – микроконтроллеры.
Об однокристальных микро-ЭВМ или микроконтроллерах в журнале «Радио»писалось не раз. Это – и цикл статей об однокристальных микро-ЭВМ 8048, 8051,8052, и отдельные обзорные статьи о микроконтроллерах новых семейств MCS-96, MCS-151, MCS-152, PIC16CХХ, Z8 и т.д., и описанияпрограммно-аппаратных средств отладки микроконтроллерных устройств. Видимо, пришлапора систематизировать сведения об этих интереснейших и всемогущих изделиях электронных фирм, познакомить читателей смикроконтроллерами, выпускаемыми в мире сегодня, рассказать о том, что онимогут и как это реализуется на практике, о современных средствахпрограммирования и отладки устройств на основе микроконтроллеров, в частности,о том, что можно сделать, не имея средств отладки или пользуясь программным симулятором-отладчиком, который предполагаетсяразместить на сайте журнала «Радио» в Интернете, и т.д. Данный цикл статей адресован впервую очередь читателям, ранее не имевшим дела смикроконтроллерами, но, несомненно, будет полезен и тем, кто уже применял их всвоих конструкциях.
1. Первое знакомство
Вначале несколько слов для тех, кому тема цикла, если судить поего названию, кажется априорно неинтересной или «чужой».Возможно, Вы в своих конструкциях до сих пор не применяли микроконтроллеры(далее для краткости МК) и считаете, что и вобозримом будущем сможете обходиться без них. Возможно также, Вы предполагаете,что создание микроконтроллерной системы для решенияВашей задачи будет слишком обременительным и экономически нецелесообразным. Неспешите: специально для Вас мы хотим привести несколько фактов и немногостатистики.
Для примера возьмём ближайшего родственника МК – персональныйкомпьютер – и сравним интенсивности их применения. По данным аналитическойкомпании Loewenbaum & Co. Inc. (США), число персональныхкомпьютеров, выпущенных в мире в 1997 г., достигло примерно 20 млн. шт.Согласитесь, это очень много. А теперь представьте, что это гигантское числосоставляет всего лишь 0,2% от мирового объёма выпуска МК. По данныманалитической компании IC Insights Inc. (США) мировой рынок в 1998 г. поглотил их более 13,5 млрд. шт.!
Вывод напрашивается сам. Если уже сегодня трудно найти областьдеятельности человека, где бы эффективно не использовался компьютер, то что жетогда говорить о МК? Почему они стали такими популярными и буквальнонезаменимыми? Ответ кроется в самой структуре микроконтроллера. В качествепервого приближения к определению этого понятия можно считать, что МК – этокомпьютер, разместившийся в одной микросхеме. Отсюда и его основныепривлекательные качества: малые габариты, потребление, цена; высокиепроизводительность, надёжность и способность быть адаптированным для выполнениясамых различных задач.
МК отличается от микропроцессора тем, что помимо центральногопроцессора (ЦП) содержит память и многочисленные устройства ввода / вывода:аналого-цифровые преобразователи, последовательныеи параллельные каналы передачи информации, таймеры реального времени,широтно-импульсные модуляторы (ШИМ), генераторыпрограммируемых импульсов и т.д. По своей структуре и принципу функционированияМК, в сущности, не отличается от персональногокомпьютера. Поэтому слова микроконтроллер и микро-ЭВМ являются синонимами.Однако первый термин (от английского слова control – управлять) более распространён,поскольку отражает его основное назначение – использование в системахавтоматического управления, встроенных в самые разные устройства: кредитныекарточки, фотоаппараты, сотовые телефоны, музыкальные центры, телевизоры,видеомагнитофоны и видеокамеры, стиральные машины, микроволновые печи, системыохранной сигнализации, системы зажигания бензиновыхдвигателей, электроприводы локомотивов, ядерные реакторы и многое, многое другое.Встраиваемые системы управления стали настолько массовым явлением, чтофактически сформировалась новая отрасль экономики, получившая название Embedded Systems (встраиваемые системы –англ.).
В настоящее время в мире выпускаются тысячи разновидностей МК. Онипоставляются в корпусах с числом выводов от 8 до 356, работают при температуреот –55 до +125 °C на частотах от 32 кГц до 200 МГц,способны функционировать при напряжении питания от 1,2 В, потребляя при этомток, не превышающий единицы микроампер. Цена изделийтакже непрерывно снижается. Некоторые восьмиразрядные МК уже сегодня стоят недороже 50 центов, что сопоставимо со стоимостью одной микросхемы «жёсткойлогики». Все это привело к тому, что сегодня всё труднее найти областьчеловеческой деятельности, где бы МК не нашли применения. И процесс ихраспространения имеет лавинообразный характер.
Надеемся, что приведённые факты уже настроили Вас на почтительноеотношение к главному герою нашего повествования. Действительно, МК сталсобытием мирового масштаба, вторгшимся практически во все виды человеческойдеятельности.
Что же обеспечило такой бурный ростпопулярности этих изделий, появившихся немногим более 25 лет назад? Что это заустройства, и каковы их возможности и перспективы?
Если Вы до сих пор в своей деятельности не использовали МК илисистемы на их основе, то, может быть, настало время подумать об этом? А если Вырешились применить МК, то какова должна быть последовательность Ваших действий?Какие трудности могут Вас поджидать, что может Вам помочь на этом пути?
На эти вопросы мы и попытаемся ответить.2. Закон Мура и первый МК
Ещё в 1965 г. Гордон Мур (Gordon Moore), один из будущих основателей могущественной корпорации Intel, обратил внимание наинтереснейший факт. Представив в виде графика рост производительностизапоминающих микросхем, он обнаружил любопытнуюзакономерность: новые модели микросхем появлялись каждые 18–24 месяца, а их ёмкостьпри этом возрастала каждый раз примерно вдвое. Еслитакая тенденция продолжится, предположил Г. Мур, то мощностьвычислительных устройств экспоненциально возрастёт на протяжении относительнокороткого промежутка времени.
Предвидение Г. Мура впоследствии блестяще подтвердилось, аобнаруженная им закономерность наблюдается и в наши дни, причём с поразительнойточностью, являясь основой для многочисленных прогнозовроста производительности. За 28 лет, истекшие с момента появлениямикропроцессора 4004 (1971 г.), число транзисторов на кристалле вырослоболее чем в 12 000 раз: с 2 300 до 28 000 000 в микросхеме Coppermine.
Ну а в 1976 г. экспоненциальное развитие полупроводниковойтехнологии привело к созданию фирмой Intel первого МК – 8048. Помимо ЦП, в его состав входила память программ,память данных, восьмибитный таймер и 27 линий ввода / вывода. Сегодня 8048является уже достоянием истории, а вот следующее изделие,выпущенное Intel в 1980 г., живёт и здравствуетпоныне. Это – МК 8051.
Архитектура МК 8051
Этот МК можно считать классическим образцом, по образу и подобиюкоторого позднее было создано множество других изделий.Его структурная схема представлена нарис. 1.ЦП – главный узел МК. С ним связано такое важнейшее понятие, как системакоманд.
Система команд – это уникальный,характерный для данного ЦП набор двоичных кодов, определяющих перечень всех еговозможных операций. Каждый такой код определяет одну операцию и называется кодомоперации или командой. Чем больше кодов используется в системе команд, тембольше операций способен выполнить ЦП. МК 8051 – восьмиразрядный, поэтому кодыопераций у него имеют размер 8 бит. Теоретически может быть всего 256восьмибитных кодов операций. В 8051 используются 255.
В зависимости от числа использованных кодов операций, системыкоманд подразделяют на две группы: CISC и RISC. Термин CISC означает сложную системукоманд и является аббревиатурой английского определения Complex Instruction Set Computer. Аналогично термин RISCозначает сокращённую систему команд и происходит от английского Reduced Instruction Set Computer. Систему команд МК 8051 можноотнести к типу CISC.
Однако, несмотря на широкую распространённость этих понятий,необходимо признать, что сами названия не отражают главного различия междусистемами команд CISC и RISC. Основная идея RISC-архитектуры – эго тщательныйподбор таких комбинаций кодов операций, которые можно было бы выполнить за одинтакт тактового генератора. Основной выигрыш от такого подхода – резкоеупрощение аппаратной реализации ЦП и возможность значительно повысить егопроизводительность.
Первоначально реализовывать такой подход удавалось, лишьсущественно сократив набор команд, отсюда и родилось название RISC. Например,система команд МК семейства Microchip PIC16 включает в себя всего 35 инструкций и может быть отнесена ктипу RISC. Очевидно, что в общем случае одной команде CISC-архитектуры должнысоответствовать несколько команд RISC-архитектуры. Однако обычно выигрыш отповышения быстродействия в рамках RISC-архитектуры перекрывает потери от менееэффективной системы команд, что приводит к более высокой эффективности RISC-системв целом по сравнению с CISC. Так, самая быстрая команда МК 8051 выполняется за12 тактов. Даже если для каждой инструкции потребуется выполнить три инструкцииRISC-контроллера, то в итоге RISC-архитектура обеспечит четырёхкратноеувеличение производительности.
Попутно RISC-архитектура позволяет решить ещё ряд задач. Ведь супрощением ЦП уменьшается число транзисторов, необходимых для его реализации,следовательно, уменьшается площадь кристалла. А с этим связано снижениестоимости и потребляемой мощности.
В этом месте можно было бы воскликнуть: будущее – за RISC-архитектурой!Однако в настоящее время грань между этими двумя понятиями стремительностирается. Например, МК семейства AVR фирмы Atmel имеют систему команд из 120 инструкций, что соответствует типуCISC. Однако большинство из них выполняется за один такт, что являетсяпризнаком RISC-архитектуры. Сегодня принято считать, что основным признакомRISC-архитектуры является выполнение команд за один такт тактового генератора.Число команд само по себе значения уже не имеет.
Тактовый генераторвырабатывает импульсы для синхронизации работы всех узлов устройства. Частотуих следования могут задавать кварцевый резонатор или RC-цепь, подключаемые квыводам МК. В некоторых МК предусмотрен режим работы тактового генератора безприменения внешних элементов. В этом случае частота тактовых импульсов зависитот параметров кристалла, определяемых в процессе его производства.
ПЗУ – постоянное запоминающее устройство, предназначенное для храненияпрограмм, поэтому часто эту память называют кодовой или памятью программ. Донедавнего времени существовало две основных разновидности ПЗУ масочные ипрограммируемые.
В масочные ПЗУ информацию заносят в процессе изготовления МК спомощью технологических шаблонов – масок. Изменить её после окончанияпроизводственного цикла невозможно.
Такие ПЗУ используют лишь в случаях, когда качество программы невызывает сомнений и существует массовая потребность в МК именно с этойпрограммой. Достоинство масочных ПЗУ – самая низкая стоимость при массовомпроизводстве (от нескольких тыс. шт.).
В программируемые ПЗУ информацию записывают с помощью устройства,называемого программатором. МК с такими ПЗУ бывают двух типов: однократнои многократно программируемые (перепрограммируемые). Первые, как говоритсамо название, допускают только однократное программирование, после чегостереть информацию уже невозможно (МК с OTP-памятью – от англ. One Time Programmable). Используют их вмелкосерийном производстве (до 1000 шт.), когда применение масочных МКэкономически не оправдано.
Многократно программируемые микросхемы подразделяются на МК, оснащённыеПЗУ со стиранием ультрафиолетовым облучением (выпускаются в корпусах с «окном»),и МК с электрически перепрограммируемой памятью. Недостаток МК с ПЗУ состиранием ультрафиолетовым облучением – очень высокая стоимость и относительнонебольшое число циклов записи / стирания (зависит от суммарной дозыоблучения кристалла и обычно не превышает 15…20).
В настоящее время все более популярной становится новая технологияреализации ПЗУ – Flash-память. Её главное достоинство в том, что онапостроена на принципе электрической перепрограммируемости, то есть допускаетмногократное стирание и запись информации с помощью программаторов. Минимальноегарантированное число циклов записи / стирания обычно превышает несколькотысяч. Это существенно увеличивает жизненный цикл иповышает гибкость МК-систем, так как позволяетвносить изменения в программу МК как на этапе разработки системы, так и впроцессе его работы в реальном устройстве.
ОЗУ – оперативное запоминающее устройство, используемое для храненияданных, поэтому эту память называют еще памятью данных. Число циклов чтения изаписи в ОЗУ не ограничено, но при отключении питающего напряжения всяинформация теряется.
Архитектура МК 8051 предполагает раздельное использование памятипрограмм и данных и носит название гарвардской.Обычно такую архитектуру используют для повышения быстродействия системы за счёт разделения путей доступа к памяти программ иданных, но в 8051 она была применена с целью получения памяти программ иданных, не требующих одинакового размера. Антипод гарвардской – архитектурафон Неймана – предполагает хранение программ иданных в общей памяти и наиболее характерна для микропроцессоров,ориентированных на использование в компьютерах. Примером могут служитьмикропроцессоры семейства х86.
Таймеры Т0, Т1 – шестнадцатиразрядные программируемые таймеры /счётчики, которые могут бытьзапрограммированы на выполнения целого ряда функций. Их можно использовать для точного формирования временных интервалов, подсчётаимпульсов на выводах МК,формирования последовательности импульсов, тактирования приёмопередатчика последовательного канала связи. Таймеры/счётчики способны вырабатывать запросы прерываний,переключая ЦП на их обслуживание по событиям и освобождая его от необходимостипериодического опроса состояния таймеров. Посколькуосновное применение МК находят в системах реальноговремени, таймеры / счётчики являются ихобязательным элементом. В некоторых модификацияхчисло таймеров достигает 32.
Последовательный порт – канал информационного обмена МК с внешним миром.Такие каналы связи занимают минимальное число выводовкристалла, обеспечивая связь на значительные расстоянияс минимальными аппаратными затратами, В 8051 реализован универсальный асинхронный последовательный приёмопередатчик (UART), поддерживающий протокол стандарта RS-232C, что обеспечивает возможность организации связи этого МК иперсональным компьютером. Кроме RS-332C, популярнымипротоколами в мире встраиваемыхсистем являются RS-485, I2C (двухпроводная двунаправленная шина), SPI (последовательный периферийный трёхпроводныйинтерфейс), Bitbus (последовательная магистраль управления), CAN (межконтроллерный сетевой интерфейс), USВ (универсальная последовательная шина) и некоторые другие. Практически для любого типапоследовательного канала сегодня можно найти МК, имеющийв своем составе соответствующий последовательный порт.
Параллельные порты ввода /вывода – также обязательная часть любого МК. Обычно ихиспользуют для связи с ближайшим окружением – датчиками и исполнительнымимеханизмами.
Важная особенность параллельных портовМК – возможность программирования на выполнениенескольких функций. Например, в 8051 выводы портов P0 и P2 могут использоватьсялибо как обычные статические регистры ввода / вывода,либо в качестве шины адреса и данных для подключения внешних устройств, таких как дополнительная память программ, память данных,устройства ввода / вывода. Это придаёт МКархитектурную гибкость. Порт P3 может либо использоваться как статический регистр ввода / вывода, либо выполнятьспециальные функции для работы последовательного канала, таймеров, контроллера прерываний и т.д.Возможностьперепрограммирования позволяетс максимальной эффективностьюзадействовать все выводы МК в проектируемом устройстве.
Система прерываний – одна из важнейшихчастей МК. Особенность систем реального времени заключается в том, что для них чрезвычайно важным параметром является время реакции на внешниесобытия. Поясним на простом примере. Когда Вы производитематематический расчёт на компьютере, тообычно запускаете программу,предназначенную для выполнения этих расчётов, и после того, как она загрузится в память компьютера, вводите условие задачи иждёте результата. Время ожидания в таком случае не имеет принципиального значения (в пределах разумного,конечно) – медленная работа компьютера может раздражать, но на результате это не скажется. Системареального временипредполагает совершенно конкретную, рассчитываемую на этапе разработки скоростьреакции системы управления на внешние события. Задержки сверх расчётных здесь просто недопустимы – они могут приводить к катастрофическим последствиям.
Проблемы быстрой реакции на событиярешаются организацией системы прерываний. Она подразумевает, что для каждого такого события разрабатывается отдельный «кусок» кода, который формируетреакцию МК на него. Этот «кусок» кода называют подпрограммой обработки запроса на прерывание (для краткости часто используюттермин подпрограмма прерывания) и размещаютв памяти программ по известному адресу. В момент возникновениязаданного события сигнал об этом поступает на вход контроллера прерываний. Последнийпредставляет собой устройство, устанавливающееоднозначное соответствие между входным сигналом о происшедшем событии и адресомпрограммной памяти, по которому размещена точка входа в подпрограмму обработки запроса прерыванияот данного события. Контроллер прерывает выполнение ЦП текущей программы и инициирует его переход на выполнениеподпрограммы обработки прерывания. Время, прошедшеес момента возникновения события до началавыполнения первой инструкцииподпрограммы прерывания, называютвременем реакции МК на событие. После окончанияобработки ЦП автоматически возвращается к выполнениюпрерванной программы.
Другая функция контроллера прерываний –установка приоритетовсобытий. Понятие приоритет означает, что выполняемаяподпрограмма прерывания может быть прервана другимсобытием только при условии,что оно имеет более высокий приоритет, чем текущее.В противном случае ЦП перейдет к обработке нового события после окончания обработки предыдущего. Контроллер прерываний, входящий в состав МК 8051, имеетпять входов событий: два от внешних устройств, два от таймеров и один от последовательногоканала.
Обычно, когда говорят о каком-либо МК,то всегда упоминают семейство, к которому он принадлежит. К одномусемейству относят изделия, имеющие одинаковое ядро,под которым понимают совокупность таких понятий,как система команд, циклограмма работы ЦП, организацияпамяти программ и памятиданных, система прерываний и базовый набор периферийныхустройств. Фактически на рис. 1 представлено ядро,ставшее основой для создания сотен других модификаций семейства 8051.
Отличия между его различными представителями заключаются, в основном, всоставе периферийных устройстви объёме памяти программ или данных. Поскольку диапазон задач, решаемых МК,чрезвычайно широк, их производители стараются выпустить столько модификаций,чтобы удовлетворить самые разнообразные запросы потребителей. Во многихсемействах число модификаций приближается к сотне или даже превышает этозначение.
Наиболее важная особенность семейства – программная совместимостьна уровне двоичного кода всех входящих в него МК. Это позволяет разработчикамсистем заменять одни МК семейства другими без потери наработок своегопрограммного обеспечения. Естественно, чем большее число разновидностей входитв семейство, тем больше шансов выбрать оптимальный вариант, тем привлекательнееэто семейство для разработчика. Вопрос правильного выбора семейства МК дляновой разработки является стратегическим, так как проблема переносапрограммного обеспечения между изделиями разных семейств чрезвычайно сложна идаже использование языков высокого уровня не всегда позволяет решить её безбольших потерь. К вопросу о критериях выбора мы вернемся в следующих статьяхцикла.
Разработка программы – один из наиболее важных этапов в созданииустройства на базе МК. Без неё он «мёртв», не реагирует на внешние воздействияи не выдаёт управляющих сигналов.
При включении питания МК немедленно начинает исполнять программу,находящуюся в подключенной к нему памяти программ (обычно это ПЗУ). Еёвыполнение начинается с некоторого фиксированного адреса, чаще всего нулевого.Адрес – это просто номер ячейки ПЗУ. Процесс осуществляетсяследующим образом: МК считывает число, хранящееся в памятипрограмм, и в зависимости от его значения, называемого машинным кодом,выполняет определённые действия над содержимым регистров АЛУ, памяти, портов ит.д. Например, прочитав из памяти программ число 32Н, МК «соображает», чтонужно считать значение из входного порта номер 2 и поместить его в регистр-аккумулятор.Часто одного байта для описания действия МК не хватает, и тогда МК считывает изпамяти дополнительные байты.
После выполнения действия МК считывает значение из следующей попорядку ячейки памяти и т.д. Совокупность байтов, описывающих одно выполняемоеМК действие, называют машинной командой (инструкцией), а совокупность такихкоманд, которые «понимает» МК, – его системой команд или набором инструкций (Instruction Set). МК разных семейств имеютразные системы команд, то есть машинные коды у них имеют разные значения, хотяи выполняют похожие действия.
Итак, программа для МК представляет собой последовательностьчисел, значения которых указывают ему, какие действия выполнять. Результатомразработки программы является компьютерный файл, содержащий эти машинные коды.С помощью программатора ПЗУ его заносят («зашивают») в память программ МК.
Каким же образом составляется эта последовательность машинныхкодов – программа для МК? Неужели разработчику необходимо помнить значениямашинных кодов и вручную задавать их последовательность? Первые программы дляМК создавались именно так, и называлось это программированием в машинных кодах.Ясно, что такой способ разработки программ очень трудоёмок и неэффективен.
Первым шагом в облегчении процесса создания программ былакомпьютерная программа – так называемый транслятор с языка ассемблера. Идеясостояла в том, чтобы выражать выполняемые МК действия на более понятномчеловеку языке и затем преобразовывать эти выражения в машинные коды. В приведённомвыше примере машинной инструкции, которая считывает значение порта 2 и помещаетего в аккумулятор, выполняемые действия можно условно обозначить как MOV A, P2.
Здесь слово MOV (от англ. move), называемое мнемоникой инструкции, обозначает пересылкузначения, а A и P2, именуемые операндами, указывают, откуда взять значение и кудаего поместить. Система подобных обозначений называется языком ассемблера.Программа, написанная на нём, обрабатывается транслятором, который преобразуетконструкции языка ассемблера в машинные коды.
Программирование на ассемблере широко распространено по сей день.Трансляторы с языка ассемблера для всех популярных семейств микроконтроллеровбесплатны.
Несмотря на очевидные преимущества программирования на ассемблереперед программированием в машинных кодах, во многих случаях ассемблернедостаточно эффективен для реализации задач разработчика. Дело в том, что МКспособен выполнять лишь простейшие действия вроде арифметических операций надцелыми числами, пересылок, сравнений и т.п. Для более сложных задач, например,для операций над числами с плавающей запятой, разработчикам приходилось писатьспециальные подпрограммы, пользоваться которыми неудобно и громоздко. Следующимшагом в разработке программ для МК стало создание специальных компьютерных программ– трансляторов с языков программирования высокого уровня, или компиляторов.Наибольшее распространение получил язык программирования Си.
С появлением трансляторов разработка программ для МК резкоупростилась. Если, например, нужно сложить в программе два числа, то теперьдостаточно просто написать
a = b + c;
а транслятор преобразует это выражение в необходимуюпоследовательность машинных команда зависимости от типов переменных a, b и c.
Использование языка высокого уровня позволяет разработчику отвлечьсяот системы команд конкретного МК и оперировать более простыми и понятнымичеловеку категориями. От разработчика требуется только знание общей архитектурыМК, принципов работы необходимых для решения поставленной задачи встроенныхпериферийных устройств и навыки программирования на языке Си. Функциональноенаполнение программы реализуется с помощью средств языка Си, который содержитбольшое число разнообразных подпрограмм (функций): арифметических, для работы ссимвольными строками и многих других.
Рассмотрим процесс создания программы для МК на языке Си. Впроцессе разработки потребуется персональныйкомпьютер.
После уяснения поставленной задачиразработчик пишет исходный текст своей программы на языке Си с помощью любоготекстового редактора. Затем он запускает программу-транслятор с языка Си,которая преобразует исходный текст в промежуточный объектный файл. Трансляторуправляется с помощью набора ключей (их описание можно найти в его документации),которые указываются в его командной строке. Если при написании программыразработчик допустил синтаксические ошибки, транслятор выдаёт на экран их список с указанием для каждой номера строки в файлеисходного текста. Разработчик должен исправить всеошибки. После успешной трансляции объектные файлы нужно обработать редактором связей (линкером),который и генерирует файл программы в машинных кодах.
При использовании языка высокого уровня возникает однапроблема. Преобразование конструкций языка в машинные коды возложенона компилятор, а выполнить это преобразование можно с различной степенью эффективности. Критериямиэффективности являются размер машинного кода (чем онменьше, тем, естественно, лучше) и скоростьмашинного кода. Задача генерации компактного и быстрого кодавесьма сложна, и от её решения зависит общее качество компилятора. Современныекомпиляторы Си используют многоуровневую оптимизацию,особенности архитектуры конкретного МК, позволяютсоздавать смешанные программы, в которых часть подпрограмм написанана ассемблере.
Описанный процесс выглядит довольно громоздким:разработчик должен вручную запускать разнообразные программы (текстовый редактор, компилятор Си, линкер), помнить управляющиеключи, искать ошибки в программе по номерам строк вфайле. Последним на сегодняшний день шагом в облегчении труда разработчикапрограмм для МК стало появление интегрированных сред разработки (Integrated Development Environment, IDE). Интегрированная среда разработки –это компьютерная программа, связывающая воедино все этапы разработки программы. Она совмещает в себе текстовый редактор длянаписания исходных текстов, трансляторы с ассемблераи Си, линкер, отладчик,справочную информацию по МК и другие средства, необходимые разработчику. Настройкатрансляторов, линкера и других компонентов производится не методом указанияключей в командной строке, а в виде диалоговых окон, где нужно толькорасставить «галочки» в нужных местах. Преобразованиеисходных текстов программ в файл машинных кодовзапускается однойклавишей.
Появление интегрированных сред разработкипрограмм ещё больше повысило эффективность созданияпрограмм для МК, позволило разработчикусосредоточиться на сутирешаемой задачи и отвлечьсяот конкретных деталей её реализации.
Интегрированные пакеты для разработки программ выпускают несколькофирм. Пакеты разных производителей схожи между собой по функциям, норазличаются предоставляемымисервисными возможностями, удобством работы и качествомгенерируемого машинного кода.
Основные характеристики наиболее популярных пакетов средствразработки приведены в таблице.4. Символьная отладка программ для МК
За редким исключением программы для МК из-за содержащихся в нихошибок не начинают работать с первого раза и требуют отладки. К вопросамотладки разработчики относятся по-разному. Некоторые из них считают, чтодостаточно внимательно проанализировать исходный текст, посмотреть с помощьюосциллографа, что происходит на выводах МК, и можно исправить все ошибки. Такойспособ применим, если разработчик имеет большой опыт, отлично знает применяемыйМК и располагает транслятором, который всегда генерирует правильный код (обычноэто ассемблер), и достаточным временем.
Другие используют в своей практике самодельныеотладочные мониторы – наборы специальных подпрограмм, загружаемых в МК вместе сосновной программой. Последняя вызывает в контрольных точках подпрограммымонитора, а те выдают информацию о состоянии ресурсов МК. Таким способом можноотладить практически любую программу, но у него есть недостатки, которые могутоказаться существенными. Во-первых, отладочному монитору необходимопредоставить для работы часть ресурсов МК: как минимум – часть адресногопространства кода и некоторое число ячеек стека, а как максимум – ещё часть ОЗУи периферийные устройства МК, используемые монитором для отображенияинформации. Выделить ресурсы отладочному монитору бывает непросто, еслиосновная программа сама активно загружает МК. Например, у МК PIC16C5x (Microchip) всего две ячейки стека, ииспользовать вызовы подпрограмм отладочного монитора затруднительно. Во-вторых,вызовы монитора отнимают время у основной программы и, следовательно, егонельзя вызывать из критичных ко времени частей программы. В-третьих, созданиеотладочного монитора, само по себе, требует времени.
Самый эффективный способ отладки программ для МК – применениеспециализированных профессиональных отладочных средств, к которым следуетотнести отладчики-симуляторы и внутрисхемные эмуляторы.
Прежде чем рассказывать о возможностях, предоставляемых такимиотладчиками, необходимо коснуться выбора компилятора, с помощью которого исходныетексты программ преобразуются в машинный код. В подавляющем большинстве случаевпредпочтительно программирование на языке высокого уровня. Использованиеассемблера необходимо, если к размеру и быстродействию генерируемого кодапредъявляются очень жёсткие требования, В настоящее время таких случаев становитсявсё меньше, так как практически всегда можно взять более «быстрый» МК с большимобъёмом памяти. Кроме того, современные пакеты кросс-средств позволяют легкописать смешанные программы, где часть модулей написана на Си, а наиболеекритичные к быстродействию части – на ассемблере. Компиляторы Си позволяюттакже вставлять в исходные тексты ассемблерные инструкции.
Каковы же преимущества программирования на Си по сравнению спрограммированием на ассемблере? Вкратце они заключаются в следующем:
Ø отпадает необходимость заботиться об операциях с числами большойразрядности. Компилятор автоматически сгенерирует правильный код для операции a + b, если a и b будут 8-, 16-, 32-битными числами,числами с плавающей запятой и даже числами разных типов;
Ø в комплекте с компилятором поставляется обширная библиотекафункций (подпрограмм), реализующих различные математические операции(тригонометрические функции, возведение в степень и т.п.), работу с символьнымистроками, форматированный ввод / вывод и т.д.;
Ø многие ошибки программиста диагностируются компилятором: он,например, не позволит передать функции неверное число параметров или параметрыневерных типов, забыть поставить оператор возврата и т.п.;
Ø исходный текст, написанный на Си, гораздо легче читается, онкомпактнее, легче модифицируется;
Ø программы, написанные на Си, легче переносятся на MК другихсемейств.
Чтобы эффективно отлаживать программы,написанные на языке высокого уровня, разработчик должен иметьв своём распоряжении отладочные средства, предоставляющие адекватныевозможности по отображению используемых в программе данных, а также по отслеживаниювыполнения программы по её исходному тексту. Дляобеспечения таких возможностей необходимы два условия:
Ø компилятор должен предоставлятьдостаточную информациюо структуре программы и используемых ею данных. Этуинформацию называют символьной (отладочной);
Ø отладчик должен уметь интерпретировать эту информацию./>
Все современные компиляторы и ассемблерыв том или ином виде генерируют символьнуюинформацию, но в настоящеевремя ещё не разработаноуниверсального формата, и каждый компиляторгенерирует её в собственном формате. Это создаёт дополнительные трудности дляотладчиков, которые должны уметь «понимать» несколько символьных форматов.
Теперь рассмотрим, как отладчик должен интерпретировать символьнуюинформацию, и какие возможности должны в связи с этим предоставляться пользователю.
Отслеживание выполнения программы по её исходному тексту
В общем случае,одна строка исходного текста преобразуется компиляторомв несколько машинных команд. Даже ассемблернаяпрограмма почти всегда содержит макросы, разворачивающиеся при трансляции внесколько инструкций процессора. Отлаживать такую программу по дизассемблеру еёкода неудобно, поэтому компиляторы вставляют вотладочную информацию таблицу номеров строк. Онасодержит информацию о соответствии номеров строк исходного текста и имён файлов исходноготекста абсолютным адресам кода программы. Отладчик отображаетна экране исходный текст программы и, следуяэтойтаблице, может выполнять программу «по строкам», выполняя за один шаг всемашинные команды, сгенерированные компилятором для текущей строки.
Таблицаномеров строк также позволяет производить контекстные действия с текстомпрограммы, например, выполнять её «до курсора», то есть до указанногопользователем места в исходном тексте, ставить точки останова на указанныестроки и т.п. Контекстные действий удобны тем, что разработчику не нужно знатьадреса, соответствующие строкам исходного текста: отладчик сам определит их потаблице. Отладчик должен «знать» адреса подпрограмм, функций и меток кода иуметь находить исходный текст функции по её имени.
Отображение данных, используемых в отлаживаемой программе
Для полноценной отладки разработчику необходимо иметь возможностьв любой момент просмотреть данные, которыми манипулирует программа. Отладчикдолжен «уметь» отображать любые используемые программой данные в наиболееподходящем виде.
Как правило, разработчики используют в программах именованныеданные, то есть каждому объекту, который используется в программе,присваивается имя. Объекты могут быть разной сложности – от простых ячеекпамяти до сложных конструкций языков высокого уровня типа структур, массивов ит.п.
Данные в ассемблерных программах
В ассемблерных программах используются в основном простые данные, тоесть ячейки памяти. Применяются также массивы. Для правильного отображенияпростых данных отладчику нужно «знать»:
Ø имя объекта;
Ø адрес объекта в памяти;
Ø адресное пространство МК, в котором располагается объект. МногиеМК имеют более одной области данных. Например, в МК семейства MCS-51 есть внутренняя памятьданных, внешняя память данных и битовое пространство;
Ø разрядность объекта, то есть занимаемое им число байт. 16-битныеМК, такие как представители семейства MCS-96. «умеют» оперировать 8-, 16-, 32-битными данными. Здесьнеобходимо отметить один существенный момент. Для разработчика важно, какойлогический размер имеет объект. Например, восьмиразрядные МК семейства PIC (Microchip) оперируют только байтами.Если же необходимо иметь в программе, например, 16-битный счётчик, томанипулировать каждым байтом приходится в отдельности. Но программисту приотладке хотелось бы видеть не каждый байт счётчика в отдельности, а оба байтасразу, в виде 16-битной переменной. Популярные кросс-ассемблеры такойвозможности не предоставляют. Исключение – кросс-ассемблер PASM-PIC фирмы «Фитон», которыйпозволяет объявлять в программе данные размером байт, слово, двойное слово, атакже массивы таких объектов. При отладке программ, написанных с помощью PASM-PIC, все объекты отображаются ввиде, соответствующем их логическому размеру и структуре;
Ø область видимости объекта. Если программа состоит из несколькихмодулей, у программиста есть возможность локализовать область видимости имени впределах одного модуля. Таким образом, в разных модулях могут существоватьобъекты с одинаковыми именами, но разными остальными атрибутами. Отладчикдолжен «разбираться», когда какой объект активен, и правильно отображать его.Заметим, однако, что практика использования одинаковых имён в разных модуляхчасто приводит к путанице и ошибкам. В случае если объект объявлен глобальным (PUBLIC) и виден во всех модулях,трудностей с интерпретацией не возникает.
Обладая вышеизложенной информацией, отладчик должен, получив от пользователяимя объекта, отобразить его значение в соответствии с типом. Наиболее «продвинутые»отладчики дополнительно могут отображать остальные атрибуты объекта.
Данные в программах на языках высокого уровня
Отображать объекты, применяемые в языках высокого уровня,значительно сложнее ввиду разнообразия структуры объектов, способов ихразмещения в памяти и областей видимости. Для примеров будем использовать языкСи, как наиболее популярный у разработчиков.5. Структура объектов
Помимо простых переменных разной разрядности, в программах на Сииспользуются также переменные с плавающей запятой, структуры (struct), объединения или союзы (union), указатели, одномерные имногомерные массивы. Последние могут состоять как из простых объектов, так и изсложных (структур, союзов, указателей).
Использование сложных объектов в программах, безусловно, удобно.Однако ввиду сложности их структуры крайне желательно иметь возможность еёадекватного отображения на этапе отладки. В отладчиках фирмы «Фитон» сложныеобъекты могут отображаться как в сжатом (список значений элементов), так и вразвёрнутом виде с указанием адреса, значения и типа каждого элемента массива и / иличлена структуры. Реализация указателей в разных компиляторах различна. То, чтоМК обычно имеет несколько адресных пространств, создает дополнительныетрудности, так как при работе с указателем должно быть известно, помимо адреса,и адресное пространство, куда указывает указатель. В некоторых реализацияхидентификатор адресного пространства является составной частью значения указателя,в других компилятор заранее «знает» это и генерирует соответствующий код.
Кроме этого, компонент адреса в указателе может быть размером от 8до 32 бит. При отображении значений указателей отладчик должен «знать» вседетали их реализации в каждом компиляторе.
Способы размещения объектов в памяти
Помимо статических объектов, адреса которых не изменяются за времявыполнения программы, в программе, написанной на языке высокого уровня, могутсуществовать так называемые автоматические объекты, память под которые временноотводится в стеке МК. Адреса таких объектов не абсолютны, а определяютсядинамически на этапе выполнения программы. Обычно они отсчитываются от текущегозначения некоторой статической переменной, называемой указателем фрейма стека (Base Pointer или BP). Так как значение BP формируется программойдинамически на этапе выполнения, значения автоматических объектов доступнытолько в пределах их области видимости, то есть при правильном значении BP. Отладчик при отображениизначений автоматических объектов должен «знать» способ, которым определяютсяадреса, а также отслеживать правильность значения BP.
Возможно также временное размещение переменных в регистрах МК. Вэтом случае отладчик должен «знать», какие переменные в каких регистрахразмещены и в течение какого времени. И, наконец, часто встречается ситуация,когда один и тот же объект за время своей жизни меняет способ размещения впамяти, причём не один раз. Это может происходить, например, когда функцияполучает один или несколько параметров в регистрах, а затем перемещает их встек.
Область видимости объекта
Как и в ассемблерных, в программах на Си существуют глобальныеобъекты, доступные по имени из любого модуля, и объекты, локализованные вмодуле (эти объекты объявляются как static). Однако автоматические и регистровые переменные создаютотладчикам дополнительные трудности при отображении их значений. Дело в том,что, во-первых, время жизни автоматического объекта ограничено его областьювидимости, а во-вторых, охватывающие области видимости могут иметь своиавтоматические объекты с теми же именами. Проиллюстрируем это на примерефункции, имеющей несколько вложенных областей видимости:
void f (int а)
{
long b;
if (a == ) a++;
for (b = a * 2; b 100; b++)
{
long с;
long a = b / 3;
if (a == 0) a++;
for (c = a; с 10; c++)
{
char a = с == 9? 1: ;
fl(a);
}
f2 (a);
}
f3 (a);
}
Переменная с именем «а» существует всё время, пока выполняетсяфункция f, но в зависимости от того, какая часть функции выполняется, имя «а»обозначает разные переменные. При трассировке функции f отладчик должен взависимости от того, какая переменная активна, правильно показывать еёзначение.
Создавая программу, разработчик не заботится о деталях реализации понятий,которые он использовал в программе. Оперируя «само собой разумеющимися»категориями, он зачастую не подозревает, как сложно было реализовать ихразработчикам компиляторов и отладчиков. Последним приходится решать задачисовмещения в одной оболочке одновременно простого и интуитивного интерфейса,богатства функциональных возможностей и детальной проработки всего, что связанос реализацией особенностей архитектуры и функционирования конкретного МК. Еслиотладчик не предоставляет разработчику средств отладки, адекватных сложностирешаемой задачи, то разработчик неизбежно теряет в производительности. Кому изнас не приходилось тратить часы и дни в поисках досадной ошибки или опечатки висходном тексте?!
В процессе разработки и создания микропроцессорной системы раноили поздно наступает момент, когда она, наконец, воплощена в «железе» иначинает подавать признаки жизни. Однако в большинстве случаев эти признакиоказываются непредсказуемыми, система начинает жить «своей» жизнью. Многиепрограммисты, наверное, согласятся, что каждая новая программа содержит ошибки.Отчасти поэтому новый МК на первых порах ведёт себя как «чёрный» ящик.
Для того чтобы облегчить процесс отладки систем, разработан целыйкласс инструментальных средств. Их основное назначение – сделать процессфункционирования отлаживаемого МК «прозрачным», то есть легко контролируемым,произвольно управляемым и модифицируемым по воле разработчика. Хорошийпрофессиональный инструментальный комплекс дополнительно может предоставитьразработчику множество сервисных услуг, тем самым существенно облегчая еготруд, избавляя от рутинных операций.
К числу основных инструментальных средств отладки относятсявнутрисхемные эмуляторы, программные симуляторы, платы развития (оценочныеплаты), мониторы отладки и эмуляторы ПЗУ. Существуют и комбинированныеустройства и наборы.6. Внутрисхемные эмуляторы
Внутрисхемный эмулятор (ВСЭ) – программно аппаратное средство,способное замещать собой эмулируемый процессор в реальном устройстве. ВСЭ –наиболее мощное и универсальное отладочное средство.
Функционально ВСЭ делятся на стыкуемые с внешней вычислительноймашиной (обычно это – IBM-совместимый ПК) и функционирующие автономно.Последние имеют собственные вычислительные ресурсы и средства ввода /вывода, поэтому при равных возможностях стоят значительно дороже первых, а приодинаковой цене существенно уступают им в функциональных и сервисныхвозможностях.
С отлаживаемой системой ВСЭ обычно соединяют кабелем соспециальной эмуляционной головкой. Относительно недавно появились модели ВСЭ, укоторых такая головка конструктивно совмещена с основным блоком и вставляется вотлаживаемую систему вместо МК. Если последний невозможно удалить (выводывпаяны в плату), использование ВСЭ допустимо при условии, что этот МК имеет отладочныйрежим, в котором все его выводы находятся в третьем (высокоимпедансном)состоянии. В этом случае для подключения ВСЭ используют специальный адаптер-клипсу.подсоединяемый непосредственно к выводам эмулируемого МК.
Как минимум, ВСЭ содержит отладчик, узел эмуляции МК, эмуляционнуюпамять и подсистему точек останова, В состав более совершенных ВСЭ могутдополнительно входить трассировщик, процессор точек останова, профилировщик(анализатор эффективности программного кода), таймер реального времени, программно-аппаратныесредства, позволяющие читать и модифицировать ресурсы эмулируемого процессора «налету», программно-аппаратные средства, обеспечивающие синхронное управление инеобходимые для эмуляции в мультипроцессорных системах, интегрированную средуразработки.
Отладчик является своеобразныммостом между разработчиком и отладочным средством. Хороший отладчикобеспечивает загрузку отлаживаемых программ в память системы, вывод на мониторсостояний и содержимого всех регистров и памяти (а при необходимости – и ихмодификаций), управление процессом эмуляции.
Более мощные отладчики (обычно их называют высокоуровневыми или High-Level Debuggers) позволяют также:
Ø вести символьную отладку (благодаря тому, что отладчик, используяспециальную информацию, поставляемую компилятором, «знает» адреса всехсимвольных переменных, массивов и структур). При этом пользователь можетоперировать более приемлемыми для человека символьными именами, не утруждаясебя запоминанием их адресов,
Ø контролировать и анализировать не только дизассемблированный текст,но и исходный текст программы, написанной на языке высокого уровня, и даже ссобственными комментариями.
Такой отладчик даёт возможность пользователю одновременноконтролировать ход выполнения программы и видеть соответствие между исходнымтекстом, образом программы в машинных кодах и состоянием всех ресурсовэмулируемого микроконтроллера.
Следует отметить, что высокоуровневый отладчик обеспечиваетвыполнение всех своих функций только в том случае, если используется кросс-компилятор,поставляющий полную и правильную отладочную информацию (не все компиляторы,особенно их пиратские версии, способны на это), и при этом формат еёпредставления «знаком» отладчику.
Эмуляционную память используютв процессе отладки вместо ПЗУ разрабатываемой системы. Более того, онапозволяет отлаживать программу в отсутствие реальной системы или её макета.Если необходимо внести изменения в отлаживаемую программу, достаточно загрузитьновую или модифицированную программу в память эмулятора, а не заниматься перепрограммированиемПЗУ.
Существуют ВСЭ, которые позволяют пользователю «подставлять»эмуляционную память вместо ПЗУ не только целиком, но и поблочно (в некоторыхмоделях минимальный размер блока – 1 байт), в порядке, определённомпользователем. Для этого ему достаточно задать распределение памяти данных ипамяти программ, в соответствии с которым процессор будет получать доступ и ксодержимому ПЗУ в отлаживаемой системе, и к содержимому эмуляционной памятиВСЭ, Такую память обычно называют памятью с возможностью мэппинга.
Трассировщик представляет собой логическийанализатор, работающий синхронно с процессором и фиксирующий поток выполняемыхинструкций и состояния выбранных внешних сигналов. Существуют ВСЭ, позволяющиетрассировать не только внешние сигналы, но и состояния внутренних ресурсов МК,например, регистров. В таких устройствах используют специальные версии МК(эмуляционные кристаллы).
Процессор точек останова даётвозможность останавливать исполнение программы или производить иные действия(например, запускать или останавливать трассировщик) при выполнении заданныхпользователем условий. В отличие от механизма обычных точек останова, процессорпозволяет на аппаратном уровне формировать и отслеживать условия практическилюбой сложности, при этом эмулируемый процесс не выводится из масштабареального времени. В некоторых моделях ВСЭ процессор точек останова можетдополнительно использоваться для динамического управления трассировщиком.
Профилировщик (анализаторэффективности программного кода) позволяет по результатам прогона отлаживаемойпрограммы получить информацию о числе обращений к различным участкам программыи времени, затраченном на их выполнение. Анализ статистической информации,поставляемой профилировщиком, даёт возможность выявлять «мёртвые» илиперенапряженные участки программ и в результате оптимизировать структуруотлаживаемой программы.
Интегрированная среда разработки – это совокупность программныхсредств, поддерживающая все этапы разработки программного обеспечения от написанияисходного текста программы до её компиляции и отладки и обеспечивающая простоеи быстрое взаимодействие с программным отладчиком-симулятором и программатором.
Наличие в программной оболочке ВСЭ встроенного редактора,менеджера проектов и системы управления существенно облегчает работуразработчика, избавляя его от множества рутинных действий. Для него стираетсягрань между написанием программы, её редактированием и отладкой. Переход отредактирования исходного текста к отладке и обратно осуществляется «прозрачно»и синхронно с активизацией соответствующих окон. Менеджер проектов по меренеобходимости автоматически запускает компиляцию и активизирует соответствующееокно программного интерфейса. Столь же просто можно перейти к отладке проекта спомощью имеющегося отладчика-симулятора или приступить к «прошивке» ПЗУотлаженной программой,
Некоторые ВСЭ предоставляют пользователям и другие дополнительныевозможности. Среди них особенно следует отметить одну, хотя и довольноспецифическую, но в ряде случаев имеющую принципиальное значение, возможностьпостроения многоэмуляторных комплексов, необходимых для отладкимультипроцессорных систем. Отличительная особенность такого комплекса –синхронное управление (с одного компьютера) несколькими эмуляторами.
В общем же случае возможности ВСЭ по контролю и управлениюфункционированием отлаживаемых устройств могут быть ограничены (например,некорректной обработкой прерываний в пошаговом режиме, запретом наиспользование последовательного порта и т.п.). Также необходимо помнить, что укаждой модели ВСЭ – свой перечень поддерживаемых МК и компиляторов.
Однако для большинства популярных МК разработаны ВСЭ, не имеющиеограничений по использованию ресурсов отлаживаемых кристаллов. Возможноститакого ВСЭ проиллюстрируем на примере модели PICE-51 фирмы «Фитон».
PICE-51 –устройство, созданное с применением программируемых логических ИС (ПЛИС). Этопозволило резко уменьшить размеры ВСЭ, минимизировать отклонения егоэлектрических и частотных характеристик от характеристик эмулируемого МК и темсамым добиться максимальной точности эмуляции на частотах до 33 МГц принапряжениях питания от 3,3 до 5 В. Перезагружаемая аппаратная структура PICE-51 обеспечивает эмуляциюпрактически всех МК семейства MCS-51. Программная поддержка работает в среде Windows.
PICE-51 состоитиз основной платы, сменного адаптера под конкретную группу МК и сменнойэмуляционной головки также под конкретный тип корпуса. На основной платесобраны трассировщик и процессор точек останова, на плате сменного адаптера –эмулирующий процессор под конкретный тип МК. Эмуляционные головки обеспечиваютустановку прибора в розетки DIP и PLCC на плате пользователя. Питание осуществляется от блока с выходнымнапряжением +5 В (0,5 А) или от отлаживаемого устройства. Связь с компьютером –по гальванически развязанному каналу RS-232C при скорости 115 кБод.
Остальные характеристики и возможности PICE-51 следующие:
Ø точная эмуляция – отсутствие каких-либо ограничений наиспользование программой пользователя ресурсов МК;
Ø до 256 Кбайт эмулируемой памяти программ и данных. Поддержкабанкированной модели памяти. Распределение памяти между ВСЭ и устройствомпользователя с точностью до 1 байта;
Ø до 512К аппаратных точек останова по доступу к памяти программ иданных;
Ø аппаратная поддержка для отладки программ на языках высокогоуровня;
Ø трассировка восьми произвольных внешних сигналов;
Ø четыре выхода синхронизации аппаратуры пользователя;
Ø трассировщик реального времени с буфером объёмом от 16 до 64Кфреймов (массивов) по 64 бита с доступом «на лету». Трассировка адреса, данных,сигналов управления, таймера реального времени и восьми внешних сигналовпользователя;
Ø программируемый фильтр трассировки;
Ø аппаратный процессор точек останова с возможностью заданиясложного условия останова эмуляции по комбинации сигналом адреса, данных,управления, восьми внешних сигналов, таймера реального времени, счётчиковсобытий и таймера задержки;
Ø четыре комплексных точки останова, которые могут быть использованынезависимо или в комбинациях по условиям AND/OR/IF-THEN;
Ø 48-разрядный таймер реального времени;
Ø «прозрачная» эмуляция – доступ «на лету» к эмулируемой памяти,точкам останова, процессору точек останова, буферу трассировки, таймеруреального времени;
Ø управляемый генератор тактовой частоты для эмулируемого МК.Возможность плавного изменения её от 500 кГц до 40 МГц;
Ø встроенная система самодиагностики аппаратуры ВСЭ, Поддерживаетсяразработка программ на уровне ведения проектов для макроассемблера MCA-51 («Фитон»/ «Микрокосм»),а также для пакетов кросс-средств фирм Keil Software и IAR Systems;
Ø поддержка полнофункциональной символьной отладки программ,созданных с помощью следующих компиляторов: ассемблера ASM51 фирмы Intel, компилятора PL/M фирмы Intel, ассемблеров и компиляторовСи фирм Avocet Systems, Hi-Tech, Tasking Software;
Ø автоматическое сохранение и загрузка файлов конфигурацииаппаратуры, интерфейса и опций отладки. Обеспечена совместимость файловконфигурации с симулятором PDS-51 и переносимость проектов между PICE-51 и симулятором PDS-51;
Ø возможность настройки цветов, шрифтов и других параметров для всехокон одновременно и для каждого окна в отдельности.
Столь широкий набор функциональных возможностей делает ВСЭнаиболее мощным и универсальным средством отладки.
Симуляторы
Симулятор – программное средство, способное имитировать работу МКи его памяти. Как правило, оно состоит из отладчика, модели центральногопроцессора и памяти. Более совершенные устройства содержат в своём составемодели встроенных периферийных устройств (таймеров, портов, АЦП и системпрерываний).
Симулятор должен «уметь» загружать файлы программ во всехпопулярных форматах, максимально полно отображать информацию о состоянииресурсов симулируемого МК, а также предоставлять возможности по симуляции выполнениязагруженной программы в различных режимах. В процессе отладки модель выполняетпрограмму, и на экране монитора компьютера отображается текущее состояниемодели.
Загрузив программу в симулятор, пользователь может запускать её впошаговом или непрерывном режиме, задавать условные или безусловные точкиостанова, контролировать и свободно модифицировать содержимое ячеек памяти ирегистров симулируемого МК. Симулятор позволяет быстро проверить логику выполненияпрограммы, правильность выполнения арифметических операций.
В зависимости от класса используемого отладчика некоторые моделисимуляторов поддерживают высокоуровневую символьную отладку программ.
Симулятор может содержать и ряд дополнительных программныхсредств, например интерфейс внешней среды. Наличие такого интерфейса позволяетсоздавать и гибко использовать модель внешней среды МК, функционирующую ивоздействующую на отлаживаемую программу по заданному алгоритму.
В реальной системе МК обычно «занимается» считыванием информации сподключенных к нему внешних устройств (датчиков), обработкой её и выдачейуправляющих сигналов на исполнительные устройства. Для того чтобы в простом симуляторесмоделировать работу датчика, нужно вручную изменять текущее состояние модели периферийногоустройства, к которому в реальной системе подключен датчик. Если, например, приприёме байта через последовательный порт устанавливается некоторый флажок, асам байт попадает в определённый регистр, то оба эти действия нужно производитьв симуляторе вручную. В некоторых моделях эта проблема решена: симуляторы имеютвстроенные средства для создания моделей подключенных к МК внешних устройств,включая средства графического отображения информации.
Очевидная особенность программных симуляторов в том, чтозагруженные в них программы выполняются в масштабе времени, отличном отреального. Однако низкая цена, возможность отладки даже при отсутствии макетаотлаживаемого устройства делают программные симуляторы весьма привлекательнымсредством отладки. Необходимо также отметить, что существует целый классошибок, которые можно обнаружить только с помощью симулятора.7. Отладочные мониторы
Отладочный монитор – специальная программа, загружаемая в памятьотлаживаемой системы. Она вынуждает МК выполнять, кроме прикладной задачи, ещёи отладочные функции:
Ø загрузку прикладных кодов пользователя в свободную от мониторапамять;
Ø установку точек останова;
Ø запуск и останов загруженной программы в реальном времени;
Ø проход программы пользователя по шагам;
Ø просмотр, редактирование содержимого памяти и управляющихрегистров.
Программа монитора работает «в связке» с компьютером или пассивнымтерминалом, на которых и происходят визуализация и управление процессомотладки. Достоинство этого подхода – очень малые затраты при сохранении возможностивести отладку в реальном масштабе времени, главный недостаток – отвлечениересурсов МК на отладочные и связные процедуры (монитор занимает некоторый объёмпамяти, прерывания, последовательный канал). Недавно появились программы,которые практически не занимают аппаратных ресурсов МК (о них будет рассказанов разделе «Эмуляторы ПЗУ»).
Платы развития
Платы развития, или, как принято их называть в зарубежнойлитературе, оценочные платы (Evaluation Boards), – своеобразные конструкторы для макетирования прикладныхсистем. В последнее время многие фирмы-производители, выпуская новые модели МК,предлагают и соответствующие платы развития. Обычно это печатная плата сустановленными на ней МК и всеми необходимыми для его нормальной работыэлементами, а также системами связи с компьютером. Как правило, на платепредусмотрено свободное место для монтажа разрабатываемого устройствапользователя. Иногда имеется и готовая «разводка» для установки рекомендуемыхфирмой дополнительных устройств (ПЗУ ОЗУ, ЖК-дисплея, клавиатуры, АЦП и др.).Платы, доработанные пользователем, выгодно использовать в качестве одноплатных,контроллеров, встраиваемых в мелкосерийную продукцию (5…20 шт.).
Для удобства пользователя платы развития комплектуются ещё ипростейшим отладочным средством на базе монитора отладки. Здесь проявились дваразных подхода: один используется для МК, имеющих внешнюю шину, а второй – дляМК, не имеющих её.
В первом случае отладочный монитор поставляется в виде микросхемыПЗУ, которую устанавливают в специальную розетку на плате развития. Плата такжеимеет ОЗУ для программ пользователя и канал связи с компьютером или терминалом,Примером может служить плата развития, разработанная фирмой Intel для МК семейства МCS-51.
Во втором случае плата развития содержит встроенные системыпрограммирования внутреннего ПЗУ МК, которые управляются компьютером. Программумонитора заносят в ПЗУ МК вместе с прикладной, подготовленной соответствующимобразом (в нужные места вставляют вызовы отладочных подпрограмм монитора).Затем осуществляется пробный прогон. Чтобы внести исправления в отлаживаемуюпрограмму, её стирают из ПЗУ и записывают в него откорректированную. Готовуюприкладную программу получают из отлаженной путём удаления монитора и всехвызовов его функций. На такой алгоритм отладки рассчитаны платы развития для МКсемейств PICmicro (Microchip), 80С750 (Philips), 89С2051 (Atmel).
Платы развития иногда комплектуются программами отладки, которыезапускают на внешнем компьютере «в связке» с монитором. Эти программы впоследнее время заметно усложнились и зачастую имеют высокопрофессиональныйнабор отладочных функций (например, отладчик-симулятор) или различные элементы,присущие в чистом виде только интегрированным средам разработки. В составкомплектов могут входить и программы прикладного характера, наиболее частовстречающиеся на практике.
Отладочные возможности комплекта «плата развития плюс монитор» нестоль универсальны, как возможности ВСЭ, к тому же некоторая часть ресурсов МКв процессе отладки отбирается для работы монитора. Тем не менее, наличиезаконченного набора готовых программно-аппаратных средств, позволяющих безпотери времени приступить к монтажу и отладке прикладной системы, во многихслучаях является решающим фактором. Особенно если учесть, что стоит такой комплектв несколько раз меньше, чем более универсальный эмулятор.
Эмуляторы ПЗУ
Эмулятор ПЗУ – программно-аппаратное средство, позволяющеезаменять ПЗУ отлаживаемого устройства на ОЗУ, в которое можно загрузитьпрограмму с компьютера через один из стандартных каналов связи. Оно позволяетпользователю избежать многократных циклов перепрограммирования ПЗУ. ЭмуляторПЗУ используют только для отладки программ МК, которые способны обращаться квнешней памяти программ. По сложности и стоимости это устройство сравнимо сплатами развития. У него одно большое достоинство – универсальность. ЭмуляторПЗУ может работать с любыми МК.
Первые эмуляторы ПЗУ позволяли только загружать программу,запускать её и останавливать, используй общий сброс. Затем появились усложнённыемодели с аппаратной выработкой сигналов трассировки на осциллограф подостижении определённого адреса. Эмулируемая память в таких изделиях быладоступна для просмотра и модификации, однако контроль за внутреннимиуправляющими регистрами МК был до недавнего времени невозможен.
В последнее время появились так называемые интеллектуальныеэмуляторы ПЗУ. Они позволяют «заглядывать» внутрь МК на плате пользователя и поуправлению отладкой похожи на ВСЭ. Фирма Cactus даже представляет свойфактически интеллектуальный эмулятор ПЗУ, как ВСЭ ряда МК, настолько невозможноотличить работу с тем и другим. В действительности же процессор в этом случаене замещается, а используется тот, что стоит на плате пользователя.
Интеллектуальный эмулятор ПЗУ – это гибрид обычного эмулятора ПЗУ,отладочного монитора и системы быстрого переключения шины с одного на другой.Этим создаётся эффект, как если бы монитор отладки был установлен на плате пользователя,и при этом он практически не занимает у МК аппаратных ресурсов, кроме небольшой(примерно 4 Кбайт) зоны программных шагов. Подобный эмулятор разработан,например, фирмой «Фитон» для всех существующих и будущих МК, которые имеют ядро8051, но дополнительно насыщены различными устройствами ввода / вывода. Изделиеподдерживает множество самых разных МК фирм Philips, Siemens, OKI.8. Интегрированные среды разработки
Строго говоря, интегрированные среды разработки не относятся кчислу средств отладки, тем не менее, обойти вниманием данный класс программныхсредств, существенно облегчающих и ускоряющих процесс разработки и отладкимикропроцессорных систем, было бы неправильно.
При традиционном подходе начальный этап написания программыстроится следующим образом. Исходный текст набирают с помощью какого-либотекстового редактора. По завершении набора работа с текстовым редакторомпрекращается и запускается кросс-компилятор. Как правило, новая программасодержит синтаксические ошибки, и компилятор сообщает о них на консольоператора. Затем вновь запускается текстовый редактор, и оператор ищет иустраняет выявленные ошибки. При этом сообщения об их характере, выведенныекомпилятором, уже не видны, так как экран занят текстовым редактором.
Этот цикл может повторяться не один раз. И если программаотносительно сложна, собирается из различных частей, подвергаетсяредактированию или модернизации, то даже этот начальный этап может потребоватьочень много сил и времени программиста.
Избежать большого объёма рутинной работы и там самым существенноповысить производительность труда программиста позволяют появившиеся и быстрозавоёвывающие популярность так называемые интегрированные среды (оболочки)разработки (Integrated Development Environment – IDE).
Как правило, хорошая интегрированная среда объединяет имеющиесясредства отладки (внутрисхемный эмулятор, программный симулятор, программатор)и обеспечивает работу программиста с текстами программ в стиле «турбо».
Интегрированная среда позволяет:
Ø использовать встроенный многофайловый текстовый редактор,специально ориентированный на работу с исходными текстами программ;
Ø наблюдать одновременно (в многооконном режиме) диагностикувыявленных при компиляции ошибок и исходный текст программы, доступныйредактированию;
Ø вести параллельную работу над несколькими проектами. Менеджерпроектов позволяет использовать любой проект в качестве шаблона для вновьсоздаваемого. Опции используемых компиляторов и список исходных файлов проектаустанавливаются в диалоговых меню и сохраняются в рамках проекта, устраняянеобходимость работы с неудобными batch-файлами:
Ø подвергать перекомпиляции только редактировавшиеся модули;
Ø загружать отлаживаемую программу в имеющиеся средства отладки иработать с ними без выхода из оболочки;
Ø подключать к оболочке практически любые программные средства.
В последнее время функции интегрированных сред разработкистановятся принадлежностью программных интерфейсов наиболее «продвинутых»эмуляторов и отладчиков-симуляторов. Такие функциональные возможности всочетании с дружественным интерфейсом существенно ускоряют работу программиста.
Таким образом, выбирая инструментальные средства отладки,целесообразно принимать в расчёт следующий комплекс показателей: переченьподдерживаемых МК, ограничения на ресурсы эмулируемых / симулируемых МК,возможность символьной отладки, перечень поддерживаемых компиляторов и,наконец, сервисные возможности.
Заключение
В последнее время функции интегрированных сред разработкистановятся принадлежностью программных интерфейсов наиболее «продвинутых»эмуляторов и отладчиков-симуляторов. Такие функциональные возможности всочетании с дружественным интерфейсом существенно ускоряют работу программиста.
Таким образом, выбирая инструментальные средства отладки,целесообразно принимать в расчёт следующий комплекс показателей: переченьподдерживаемых МК, ограничения на ресурсы эмулируемых / симулируемых МК,возможность символьной отладки, перечень поддерживаемых компиляторов и,наконец, сервисные возможности.
Литература
1. Бродин В.Б., Калинин А.В. Системына микроконтроллерах и БИС программируемой логики. – М.: ЭКОМ, 2002.
2. Микушин А. Занимательно омикроконтроллерах. – М.: БХВ-Петербург, 2006. – ISBN 5–94157–571–8
3. Фрунзе А.В. Микроконтроллеры? Это жепросто!.. – М.: ООО «ИД СКИМЕН», 2002. – Т. 1.
4. Фрунзе А.В. Микроконтроллеры? Это жепросто!.. – М.: ООО «ИД СКИМЕН», 2002. – Т. 2.
5. Фрунзе А.В. Микроконтроллеры? Это жепросто!.. – М.: ООО «ИД СКИМЕН», 2003. – Т. 3.
6. Голубцов. М.С. Микроконтроллеры AVR: от простого к сложному –М.: СОЛОН-Пресс, 2003. 288 с. – (Серия «Библиотека инженера»).
7. Журнал «Радио» №2 за 2000 г.