Микроконтроллеры для начинающих. И не только
Курсовая работа
"Микроконтроллеры для начинающих. И не только"
Введение
Микроконтро́ллер (англ. 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) всего две ячейки стека, и использовать вызовы подпрограмм отладочного монитора затруднительно. Во-вторых, вызовы монитора отнимают время у основной программы и, следовательно, его нельзя вызывать из критичных ко времени частей программы. В-третьих, создание отладочного монитора, само по себе, требует времени.
Самый эффективный способ отладки программ для МК – применение специализированных профессиональных отладочных средств, к которым следует отнести отладчики-симуляторы и внутрисхемные эмуляторы.
Прежде чем рассказывать о возможностях, предоставляемых та