Поиск по сайту: |
|
По базе: |
|
Главная страница > Статьи > Средства разработки |
|
||||||||||||||||
Первая программаАссемблерная программа определяет не только машинные команды, которые нужно выполнять процессору, но и команды, которые нужно выполнять самому ассемблеру (например, выделить немного памяти или выдать листинг). Управляют процессом ассемблирования директивы ассемблера. Директивы начинаются с точки. Ниже приведён ассемблерный текст.
По ходу изложения, список директив ассемблера будет расширяться, будут вводиться новые понятия. В первой строке директива, задающая поддержку синтаксиса стандарта UAL (Unified Assembler Language), по-русски - это унифицированный язык ассемблера. Разработка компании ARM. Вторая директива задаёт целевой процессор. Третья - указывает на необходимость генерировать команды множества Thumb-2. Этот набор команд является расширением набора Thumb, впервые введённого в архитектуре стандарта V4T. Набор команд Thumb-2 введён начиная с архитектуры V6 и выше. Альтернативная директива .code 16 , заставит генерировать 2-х байтные команды множества Thumb. В 4-ой строке директива .equ присваивает значение строке символов. Ассемблер подставит числовое значение там, где будет задан символ. Символу _start , присвоено свойство - глобальный, он будет доступен из других модулей, в процессе ассемблирования ему будет присвоено значение, а точнее адрес. Директива .text указывает на начало секции кода. В программе задана только одна секция кода. В 7-ой строке, директива .word выделяет 4 байта и в выделенном пространстве размещает значение, присвоенное символу STACKINIT. Для Сortex-M3 в начале секции кода, должно быть значение указателя стека. Не трудно заметить, что указывается в область RAM. Всё что после директивы .text будет направлено в секцию кода, по сути, будет размещаться в ROM, до тех пор, пока в тексте программы не встретится директива .data или .bss , тогда ассемблер направит свой вывод в соответственные директивам секции. Далее следует таблица первых 6-ти системных исключений. В строке 8 задан адрес вектора сброса, в этом месте памяти расположится значение метки _start . Процессор перейдёт по этой метке по сбросу. Младший бит каждого вектора указывает, в каком состоянии должен выполняться соответствующий обработчик. Будет процессор выполнять команды обработчика в состоянии ARM или THUMB. Поскольку процессор Cortex-M3 поддерживает только команды Thumb, младшие биты всех векторов исключений должны быть установлены в 1. Каждый вектор в программе увеличен на 1. Целая серия векторов перехода для различных исключений указывают на один адрес, на метку _dummy . Там имеется простейшая ловушка, бесконечный цикл. В строке 23 задана строковая константа. В секции кода не возбраняется размещать константы. Затем идёт директива .align , эта директива указывает ассемблеру на необходимость расположить следующие за константой команды на границе слова. После сброса, CPU тактируется от HSI (internal high-speed oscilator). Код инициализации отсутствует. Источник синхронизации не настроен на максимальную частоту и доступ к Flash памяти не сконфигурирован оптимально. Но для учебных целей, существующая конфигурация вполне пригодна. В строках с 15 по 22 задан некоторый набор команд процессора. В строке 22 стоит команда, которая для архитектуры Cortex-M3 не является корректной и вызывает генерацию исключения Usage Fault. Ассемблируем командой:
Программа arm-none-eabi-gcc - это программа драйвер или менеджер. Она управляет процессом компилирования и сборкой программ, вызывает необходимые программы, с нужными параметрами. Этот менеджер может применяться для компилирования программ на языке C , ассемблер и для компоновки. Параметры командной строки: c - задаёт необходимость получения только объектных файлов, не выполняется линковка, mthumb , mcpu - задаёт формат кода для целевой системы, g - указывает на необходимость генерации отладочной информации, o - задаёт имя выходного файла. К слову сказать, параметры, задающие формат выходного кода, ARM или THUMB, не обязательны, так как этот формат задан в ассемблерном тексте. После успешного ассемблирования, будет получен объектный файл ex1.o. Посмотреть имеющиеся символьные имена, или просто символы, в сгенерированном объектном файле можно командой:
В первом столбце идёт значение символа, затем тип символа и название. t - локальный символ в секции .text, T - глобальный символ в секции .text, a - символ, имеющий абсолютное значение, при линковке его значение не меняется. Для символов типов t и T , значение - это адрес от начала секции. Эти адреса виртуальные, после линковки они могут претерпеть изменения, конечно кроме символа с абсолютным значением. Посмотреть информацию о секциях в объектном файле, можно командой:
Секции .data и .bss пустые. Так же имеются секции для целей отладки, это результат действия флага -g при ассемблировании. Секция .ARM.attributes и секции отладки, выполняют служебные функции и в памяти целевой системы не будут размещены.
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|