Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6798.pdf
Скачиваний:
69
Добавлен:
13.02.2021
Размер:
2.73 Mб
Скачать

Часть I. Процессор Cortex-M3. Программирование на ассемблере -

29

Часть I. Процессор Cortex-M3. Программирование на ассемблере

Первая часть посвящена изучению процессора Cortex-M3, его системы команд, примерам использования языка ассемблер, способам исследования кода с помощью встроенного в IDE дизассемблера, а также приемам написания эффективных (быстродействующих) программ.

1Когда используется ассемблер

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

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

Чем же объясняется такая невероятная живучесть самого древнего языка программирования? Только одним – его непревзойдённой эффективностью по сравнению с другими языками, когда речь идёт о скорости работы программы и компактности её машинного кода. Главный недостаток ассемблера – это по-прежнему достаточно высокая трудоёмкость написания программ и относительно длительное время овладения навыками программирования на этом языке, точнее языках. Набор или система команд для одного ядра могут существенно отличается от другого набора, например, система команд семейства МК MCS51 очень сильно отличается от системы команд AVR , хотя функционально они решают одинаковые задачи.

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

После предварительного знакомства с системой команд начинать изучение программирования на ассемблере лучше всего с изучения опыта (приемов программирования) разработчиков компиляторов языка Си/Си++. Используя дизассемблер, можно проследить общую логику построения программы. Такой подход полезен ещё и для овладения навыками эффективного программирования на самом языке Си. Очень часто, с виду элегантная программа на Си, компилируется в громоздкий и нерациональный машинный код. Зная особенности конкретного компилятора Си, можно избегать этих недостатков и создавать вполне эффективный код, даже не используя ассемблер. Как показывает опыт, время, потраченное на изучение ассемблера именно в таком ключе, потом с

ТУСУР, "Миландр"

Каф. ЭСАУ

Недяк С.П., Шаропин Ю.Б

Февраль 2017 г.

Часть I. Процессор Cortex-M3. Программирование на ассемблере - 1

30

лихвой компенсируется сокращением времени отладки и сопровождения программ.

И последний немаловажный аргумент в пользу изучения ассемблера. Компиляторы пишут хотя и грамотные, но всё-таки люди. А людям свойственно ошибаться. Хотя и редко, но и здесь ошибки иногда случаются. Знание ассемблера даёт инструмент для исправления подобных ошибок, в противном случае программист оказывается в такой ситуации почти безоружным.

Есть и такое высказывание одного из авторов учебника по ассемблеру [6]: «…ассемблер может понадобиться для оптимизации кода программ, написания драйверов, трансляторов, программирования некоторых внешних устройств и т.д. Для себя я, однако, имею другой ответ: программирование на ассемблере даёт ощущение власти над компьютером, а жажда власти – один из сильнейших инстинктов человека»

Уж не знаем, насколько можно разделить это эмоциональное высказывание, но то, что от степени знания компьютера (микроконтроллера), от умения его программировать будет зависеть здоровье и жизнь людей, целостность спутников и пр. – это совершенно точно, проверено экспериментально [5.].

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

Итак, поехали …

ТУСУР, "Миландр"

Каф. ЭСАУ

Недяк С.П., Шаропин Ю.Б

Февраль 2017 г.

Часть I. Процессор Cortex-M3. Программирование на ассемблере - 2

31

2Создание и компиляция первого проекта в среде IAR. Написание простейшего модуля на языке Assembler. Лабораторная работа № 1

Целью данной работы является ознакомление с одной из популярнейших сред разработки программ для микроконтроллеров IAR16 Embedded Workbench IDE.

2.1Создание нового проекта

Создадим новый проект Project=>Create New Project. Выбираем шаблон проекта(ProjectTemplates): C-main

Рисунок 1 Создание нового проекта.

Сохранив проект под каким-либо именем, далее в свойствах проекта выбираем модель микроконтроллера Milandr 1986BE9x (Рис 1.2). Для этого правой кнопкой мыши щелкаем по нашему проекту, выбираем Options…и в GeneralOption

Рисунок 2 Выбор свойств проекта

на закладке Target (Рис 1.3) выберем модель микроконтроллера Milandr 1986BE9x

16IAR Systems (www.iar.com) - старейшая компания, основанная в 1983 г. занимающаяся средствами разработки ПО для встраиваемых вычислительных систем.

ТУСУР, "Миландр"

Каф. ЭСАУ

Недяк С.П., Шаропин Ю.Б

Февраль 2017 г.

Часть I. Процессор Cortex-M3. Программирование на ассемблере - 2

32

 

 

 

 

 

 

Рисунок 3. Выбор кристалла

В случае, если в списке отсутствует Milandr, попробуйте проверить файлы, которые скопировали в корневую директорию среды разработки IAR. Если, тем не менее, проблему устранить не удалось, т.е. после перезапуска IAR Milandr по-прежнему отсутствует в списке, временно можно воспользоваться готовыми примерами проектов IAR для ARM. Для первого знакомства со средой разработки этого будет вполне достаточно.

Рисунок 4. Выбор кристалла

Здесь, рис. 4, открыт готовый проект evaluator7t из среды разработки IAR и выбран микроконтроллер ST STM32F100xE. Поскольку у обоих микроконтроллеров одно и то же ядро: Cortex-M3, то наша программа, отлаженная в симуляторе для ST STM32F100xE , будет работать и на микроконтроллере Milandr 1986BE9x.

ТУСУР, "Миландр"

Каф. ЭСАУ

Недяк С.П., Шаропин Ю.Б

Февраль 2017 г.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]