Языки программирования для микроконтроллеров 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Языки программирования для микроконтроллеров



Программирование для микроконтроллеров, как и программирование для универсальных компьютеров, прошло большой путь развития — от использования машинных кодов до применения современных интегрированных сред, предоставляющих встроенный текстовый редактор, обеспечивающих трансляцию программ, их отладку и загрузку во внутреннюю память микроконтроллеров. В настоящее время исходный текст программы пишется на каком-либо из языков программирования, относящемся к одной из двух групп:

q языки программирования "низкого" уровня;

q языки программирования "высокого" уровня.

Классификация языков программирования приведена на рис. 21.1. В языках "низкого" уровня каждому оператору соответствует не более одной машинной команды. В их состав обязательно входит набор машинных команд каждого конкретного процессора. Языки программирования низкого уровня в настоящее время называются ассемблерами (старое название «автокоды»). Для каждого процессора существует своя группа ассемблеров. Ассемблеры для одного и того же процессора различаются между собой дополнительными возможностями, облегчающими программирование.

Языки программирования "высокого" уровняпозволяют заменять один оператор несколькими машинными командами. Это увеличивает производительность труда программистов. Кроме того, языки "высокого" уровня позволяют писать программы, которые могут выполняться на различных микропроцессорах. (Естественно, что при этом необходимо использовать программы-трансляторы для соответствующего процессора.) В настоящее время для микроконтроллеров широко используются такие языки программирования высокого уровня как C и PLM.

О преимуществах и недостатках языков высокого и низкого уровней говорилось достаточно много. Выбор языка программирования зависит от состава аппаратуры, для которой пишется программа, наличия тех или иных средств разработки программного обеспечения, а также от требуемого быстродействия всего программно-аппаратного комплекса в целом.

В тех случаях, когда объем ОЗУ и ПЗУ мал (в районе нескольких килобайтов) альтернативы ассемблеру нет. Именно этот язык программирования позволяет получать самый короткий и самый быстродействующий код программы (при прочих равных условиях, т.к. испортить можно все!).

Рис. 21.1. Классификация языков программирования

Языки программирования высокого уровня позволяют значительно сократить время создания программы, но при этом увеличивается ее размер, поэтому использование такого языка программирования для микропроцессорных систем требует достаточно большого объема памяти программ (несколько десятков килобайтов). Увеличение объема программы связано с несколькими факторами:

ú Язык программирования рассчитывается на все случаи жизни, поэтому в большинстве случаев человек мог бы написать программу короче, исключив не нужные в данном конкретном случае проверки или защиты.

ú Если программист не знает, к чему приводит использование тех или других операторов языка программирования, то он может выбирать операторы, не оптимальные как с точки зрения длины машинного кода программы, так и с точки зрения быстродействия программы.

ú Программист не использует подпрограммы там, где они могли бы сократить объем программы, так как на языке программирования высокого уровня это всего один или несколько операторов.

Первый из этих пунктов постепенно утрачивает свое значение с появлением все более совершенных трансляторов. Третий пункт тоже решается тем же путем при применении различных видов оптимизаторов, входящих в состав компилятора. Однако в большинстве случаев оптимизаторне может определить одинаковые действия, если они отличаются хотя бы одной командой. Кроме того, оптимизатор работает только в пределах одного программного модуля! Понятие программного модуля будет рассмотрено позднее.

Виды программ-трансляторов

Процесс преобразования операторов исходного языка программирования в машинные коды микропроцессора называется трансляцией исходного текста. В настоящее время ручная трансляция программ практически не используется. Трансляцияпроизводится специальными программами-трансляторами.

Существует два больших класса таких программ: компиляторыи интерпретаторы. При использовании компиляторов весь исходный текст программы преобразуется в машинные коды, и именно эти коды записываются в память микропроцессора. При использовании интерпретатора в память микропроцессора записывается исходный текст программы, а трансляция производится при считывании очередного оператора. Естественно, что быстродействие интерпретаторов намного ниже, чем у компиляторов, т.к., например, при использовании оператора в цикле он транслируется многократно.

Применениеинтерпретатора может обеспечить выигрыш только в случае его разработки для языка программирования “высокого” уровня. В этом случае может быть сэкономлена внутренняя память программ, а также облегчен процесс отладки (при применении языка программирования BASIC) или облегчен перенос программ с одного типа процессора на другой (в случае использования языка программирования Java).

При программировании на ассемблере применение интерпретатора приводит к проигрышу по всем параметрам, поэтому для языков программирования низкого уровня применяются только программы-компиляторы.

Для программирования микроконтроллеров как на языке программирования “низкого” уровня, так и на языке программирования “высокого” уровня чаще используются компиляторы, поэтому рассмотрим подробнее виды этих трансляторов.

Виды компиляторов

Программы-компиляторы бывают оценочные и профессиональные.

Оценочные компиляторыпозволяют написать простейшие программы для конкретного процессора, и определить подходит ли процессор для тех задач, которые предстоит решать в процессе разработки устройства. Конечно, если программа очень проста, то можно весь программный продукт выполнить на оценочном компиляторе. Оценочные компиляторы позволяют транслировать одиночный файл исходного текста программы. Иногда такие компиляторы позволяют включать в процесс трансляции содержимое отдельных файлов специальной директивой. В результате работы оценочного компилятора сразу получается исполняемый или загрузочный модуль программы, поэтому такие компиляторы называются компиляторы с единой трансляцией.

Профессиональные трансляторы позволяют производить компиляцию исходного текста программы по частям. Это позволяет значительно сократить время трансляции, так как нужно компилировать не весь текст программы, а только ту ее часть, которая менялась после предыдущей трансляции.

Кроме того, каждый программный модуль может писать отдельный программист. Это позволяет сократить время написания программы. Даже в том случае, если программу пишет один человек, время написания программы сокращается за счет использования готовых отлаженных и оттранслированных программных модулей.

При многомодульном программировании процесс получения исполняемого кода программы разбивается на два этапа: компиляция исходного текста модулей (некоторых или всех) и связывание (компоновка) полученных объектных файлов модулей в единую программу. Такой процесс получил название раздельная компиляция-компоновка.

Оценочные компиляторы обычно предлагаются бесплатно фирмами-производителями микроконтроллеров.

Профессиональные компиляторы разрабатываются и продаются независимыми фирмами-разработчиками программного обеспечения. Для микроконтроллеров семейства MCS-51 получили известность продукты таких фирм как FRANKLIN, IAR, KEIL и др.

В состав современных профессиональных средств написания и отладки программ для микроконтроллеров обычно входят эмуляторы процессоров или отладочные платы, текстовый редактор, компиляторы языка высокого уровня (чаще всего "C") и ассемблера, редактор связей (компоновщик) и загрузчик программы в отладочную плату. Все программы обычно объединены интегрированной средой разработки программного проекта, которая позволяет поддерживать один или несколько программных проектов.

Теперь, после того как были рассмотрены языки программирования для микроконтроллеров и программы-трансляторы, перейдем к рассмотрению основных принципов написания программ.

Применение подпрограмм

В программахчасто приходится повторять одни и те же операторы (например, при реализации алгоритма работы с параллельным или последовательным портом). Было бы неплохо использовать один и тот же участок кода, вместо того, чтобы повторять одни и те же операторы несколько раз.

Участок программы, к которому можно обращаться из различных мест программы для выполнения некоторых действий и последующего возврата в место вызова, называется подпрограммой.

Проблема, с которой приходится сталкиваться при многократном использовании участков кодов, — как определить, в какое место памяти программ возвращаться после завершения подпрограммы. Обращение к подпрограмме производится из нескольких мест основной программы. Описанную ситуацию иллюстрирует рис. 21.2. На нем изображено адресное пространство микроконтроллера. Младшие адреса адресного пространства находятся в нижней части рисунка.

Для того чтобы получить возможность возвращаться на команду, следующую за вызовом подпрограммы, требуется запомнить ее адрес. Адрес возврата хранится в особых ячейках памяти данных. После выполнения подпрограммы необходимо осуществить переход к адресу, который записан в этих ячейках.

Для обращения к подпрограмме и возврата из нее в систему команд микропроцессоров вводят специальные команды. В микроконтроллерах семейства MCS-51 это команды LCALL, ACALL для вызова подпрограммы и команда RET для возврата из подпрограммы. Команды вызова не только осуществляют передачу управления на указанный адрес, но и запоминают адрес команды, следующей за вызовом подпрограммы — адрес возврата. Команда возврата из подпрограммы передает управление по адресу возврата, которой был запомнен при вызове подпрограммы.

 

Рис. 21.2. Вызов подпрограммы и возврат к выполнению основной программы

Пример вызова подпрограммы и ее реализации на языке программирования ASM‑51 приведен на листинге 21.1.

Внимание! Ни в коем случае нельзя попадать в подпрограмму любым способом кроме команды вызова подпрограммы CALL! В противном случае команда возврата из подпрограммы передаст управление случайному адресу! По этому адресу могут быть расположены данные, которые в этом случае будут интерпретированы как программа, или обратиться к внешней памяти, откуда будут считываться случайные числа.

Листинг 21.1. Пример вызова подпрограммы

...

MOV A,#56

CALL PeredatByte

...

MOV A,#37

CALL PeredatByte

...

 

;********************************************

;Подпрограмма передачи байта

;через последовательный порт

;********************************************

PeredatByte:

JB TI, $;Если предыдущий байт передан

MOV SBUF, G_Per;то передать очередной байт

RET

В приведенном на листинге 21.1 примере перед подпрограммой обязательно должен быть бесконечный цикл. Иначе в подпрограмму можно попасть не через вызов подпрограммы, а при последовательном выполнении операторов. Тогда команда RET передаст управление на случайный адрес, Это может привести к непредсказуемым последствиям. При особенно неблагоприятных обстоятельствах даже к выходу микропроцессорной системы из строя. В программах, которые пишутся для микроконтроллеров, требуется обеспечить бесконечный цикл для того, чтобы программа никогда не завершала свою работу. Если основная программа микроконтроллера с бесконечным циклом будет располагаться до первой из подпрограмм, то приведенное условие будет выполняется автоматически.

Очень часто возникает необходимость из одной подпрограммы обращаться к другой подпрограмме. Такое обращение к подпрограмме называется вложенным вызовом подпрограммы. Количество вложенных подпрограмм называется уровнем вложенности подпрограмм. Максимально допустимый уровень вложенности подпрограмм определяется количеством ячеек памяти, предназначенных для хранения адресов возврата из подпрограмм.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 415; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.140.5 (0.021 с.)