Часть 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 г. |
Часть I. Процессор Cortex-M3. Программирование на ассемблере - 2 |
33 |
Чтобы выбрать в качестве средства отладки Simulator нужно щёлкнуть мышью по категории Debugger и в открывшемся окне выбрать Simulator.
Далее, щелкнув мышью по категории C/C++ Compiler, выбрать вкладку Optimization и поставить отметку None.
Исходный текст функции main() на языке С: В открытом окне main введем следующий код
extern int |
func1_c(void); |
// |
прототип |
функции |
на |
языке |
С |
//extern int |
func1_asm(void); |
// |
прототип |
функции |
на |
языке |
ассемблер |
int main (void) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int k;
k = func1_c();
// k = func1_asm(); return k;
}// main
Для того чтобы создать новый файл с именем func1_c.с выбираем File=>New=>File или Ctrl+N
Рисунок 5 Создание нового файла для редактирования Исходный текст функции func1_c на языке С:
В окне редактирования файла введем код int func1_c(void) {
int i = 2; int k = 5; int x = k; x = x + i;
return x;
}
Сохраним данный файл как func1_c.c и добавим его к проекту
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть I. Процессор Cortex-M3. Программирование на ассемблере - 2 |
34 |
|
|
|
|
|
|
|
Рисунок 6 Добавление нового файла к проекту
Запустим проект, нажав на кнопку 

. По умолчанию откроется окно дизассемблера (Disassembly).
Рисунок 7 Режим отладки IAR, окно Disassembly
Внимательно рассмотрим это окно. В нем мы можем увидеть текст только что набранной нами программы. Сначала идет строка нашего кода на языке Си и далее несколько строк
– её эквивалент на языке ассемблер, точнее сказать, фрагмент листинга. Как мы уже говорили, листинг состоит из 3-х колонок: в первой колонке располагается адрес; во второй машинный код команды и в третьей её мнемокод – исходный текст на ассемблере.
Попробуем написать свою функцию на этом замечательном древнем языке программирования, скопируем исходный текст функции func1_c с дизассемблера. Здесь мы,
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть I. Процессор Cortex-M3. Программирование на ассемблере - 2 |
35 |
лишь, поменяем метку func1_c на метку func1_asm. Откроем новый файл и, глядя на рис.7, наберём в нём следующий текст:
func1_asm:
MOVS R1, #2
MOVS R2, #5
MOVS R0, R2
ADDS R0, R1, R0
BX LR
Сохраним этот файл под именем func1_asm.s или func1_asm.asm и добавим его к проекту. Прежде чем добавлять, нужно прервать сеанс отладки, нажав на кнопку
. Сейчас мы попытаемся откомпилировать наш проект. Снова нажимаем на кнопку
.
Рисунок 8 Ошибка при компиляции
Как и следовало ожидать, нас постигла неудача. Ассемблерный файл содержит ошибки рис.8.
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть I. Процессор Cortex-M3. Программирование на ассемблере - 2 |
36 |
Error[4] : Unexpected end of file encountered – неожиданный конец файла обнаружен.
Добавление в конец файла слова END тоже не приводит к успеху, количество ошибок только увеличивается.
Делаем предположение, что наш первый исходник на ассемблере как-то не совсем корректно оформлен. За пополнением нашего багажа знаний обращаемся к Help->Assembler Reference Guide. Бегло просматриваем руководство с целью обнаружить в нём примеры оформления исходных текстов на ассемблере. На стр.11,12 мы находим интересующие нас примеры.
Вот пример со стр.12 руководства Assembler Reference Guide: EXTERN third
SECTION MYDATA : DATA (2)
first: |
DC32 3 |
second: |
DC32 4 |
Then in the section MYCODE, the following relocatable expressions are legal: SECTION MYCODE : CODE (2)
CODE32
;MYDATA must be linked in the range 0-255,
;otherwise the immediate values #first etc.
;will be out of range
MOV R1,#first
MOV R2,#second
MOV R3,#third
LDR R1,=first+4
LDR R2,=second
Внимательно изучаем его. Мы видим, что в данном примере исходный текст на ассемблере состоит из 2-х секций: секции данных - SECTION MYDATA : DATA (2) и секции кода - SECTION MYCODE : CODE (2). Наша функция func1_asm никаких данных не содержит, поэтому секция данных может отсутствовать, а вот секцию кода мы должны правильно оформить. Добавим из примера две недостающих строки в начало нашего файла
SECTION MYCODE : CODE (2) CODE32
и снова запустим наш проект на компиляцию. Получаем результат рис. 9
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |