71231

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

Лабораторная работа

Коммуникация, связь, радиоэлектроника и цифровые приборы

Целью данной работы является ознакомление с одной из популярнейших сред разработки программ для микроконтроллеров IAR Embedded Workbench IDE. Последовательность действий при создании проекта: Создадим новый проект Project=>Create New Project.

Русский

2014-11-04

139.57 KB

4 чел.

7

Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное учреждение                                                                         

                       высшего профессионального образования

«ТОМСКИЙ  ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ»

(ТУСУР)

Кафедра Электронных Средств Автоматизации и Управления

(ЭСАУ)

Лабораторная работа №1

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

По дисциплине

«Микропроцессорные средства систем автоматизации и управления»

Выполнил ст. гр. 530

Рачеев А.О.

«___» ___________

Проверил ст. пр. ЭСАУ

Недяк С.П.

«___» ___________


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

  1.  Последовательность действий при создании проекта:

Создадим новый проект Project=>Create New Project.

Выбираем шаблон проекта( ProjectTemplates  ) : C-main

 Рисунок 1.1

Сохраняем проект под   именем arr.

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

Рисунок 1.2

на закладке  Target     (Рис 1.3) выберем модель микроконтроллера   Milandr 1986BE9xp[-0pp055555555555555555…….

Рисунок 1.3

В  случае,   если  в  списке  отсутствует  Milandr,  попробуйте  проверить  файлы,  которые скопировали в корневую директорию среды разработки IAR.

  1.  Разработка первой программы для микроконтроллера

Исходный текст функции main() на языке С:

В открытом окне  main  введем следующий  код:

int main()

{

 

 float a=5.75;

 float r;

 for(int i=5; i<a; i++)

{

   r=a*4;

}

 

 return 0;

 

}

Рисунок 2.1 Пример работы программы в ассемблере.

Int main ()

Main:

PUSH    {R4, R6, LR}           //сохраняем регистры.

float a=5.75

LDR.N    R4,  ??main_0

//Загрузка адреса метки в регистр R4. Используем 1б-битную команду Thumb; N = Narrow (узкая).

for(int i=5; i<a ; i++)

int i=5

MOVS    R5, #5   // Помещаем  в регистр R5 число 5. Наличие суффикса S -  состояние флагов условий изменяется в соответствии с результатом операции (APSR).

Помещение в регистр R4 числа 1.5 (1069547520 -представление числа 1.5 в памяти). Наличие суффикса  S -  состояние флагов условий изменяется в соответствии с результатом операции (APSR). Используем 32-битную команду Thumb-2; W- Wide (широкая)

int a=3

MOVS R0, #3   Помещение в регистр R0 числа 3. Наличие суффикса S.

float c=2.5;   

LDR.N  R5, ??main_0   

Загрузка адреса метки в регистр R5. Используем 1б-битную команду Thumb; N = Narrow (узкая)

float d=5.5;

LDR.N  R6, [PC, #0x20]

Загрузка в регистр R6  содержимого ячейки памяти по адресу (PC + 0x20). Наличие суффикса N.

b=b-a;

BL __aeabi_i2f     Переход к метке  «__aeabi_i2f  »

MOVS R1, R0     Помещение содержимого регистра R0 в регистр R1. Наличие суффикса S.

MOVS R0, R4   Помещение содержимого регистра R4 в регистр R0. Наличие суффикса S.

BL __aeabi_fsub  Переход к метке  «__aeabi_fsub » Функция, осуществляющая вычитание.

MOVS R4, R0     Помещение содержимого регистра R0 в регистр R4. Наличие суффикса S.

d=d*c;

MOVS R0, R6     Помещение содержимого регистра R6 в регистр R0. Наличие суффикса S.

MOVS R1, R5     Помещение содержимого регистра R5 в регистр R1. Наличие суффикса S.

BL __aeabi_fmul  Переход к метке « __aeabi_fmul  » Функция, осуществляющая  умножение

MOVS R6, R0     Помещение содержимого регистра R0 в регистр R6. Наличие суффикса S.

Следующие функции выполняют действия (инициализация, вычитание, умножение) с переменными типа Float, описанные на си, в ассемблере:

??main_0   

__aeabi_i2f     

__aeabi_fsub

__aeabi_fmul  

 Функции уже заложены в программе и соответственно заложен эмулятор с плавающей точкой, сделанный разработчиками (за что им спасибо), для выполнения операций с плавающей точкой.

Return 0;

MOVS R0, #0         Помещение в регистр R0 числа 0

POP  {R4-R6, PC}  Восстанавливаем содержимое реrистров R4,R5,R6 и возвращаемся

Описание синтаксиса команд PUSH и РОР:

Загрузка регистров в стек и извлечение регистров из стека («полный» убывающий стек).

Синтаксис:

PUSH{coпd} reglist

POP{coпd} reglist

где

coпd - необязательный суффикс условия выполнения;

reglist -  непустой список регистров, заключённый в фигурные скобки. Может включать в себя диапазоны регистров. При наличии в списке более одного регистра или диапазона регистров элементы списка разделяются запятыми.

Ограничения

. reglist не должен содержать SP.

. reglist команды PUSH не должен содержать Ре.

. reglist команды РОР не должен содержать РС, если в нём содержится LR.

При наличии Ре в reglist команды РОР:

. бит [О] загружаемого значения должен быть установлен в 1 для корректного выполнения команды; переход осуществляется по этому адресу, выровненному на границу полуслова;

. если команда условно выполняемая, то она должна быть последней командой в IT-блоке.

 

Вывод: В ходе лабораторной работы были освоены основные  команды ассемблера с помощью IAR.


 

А также другие работы, которые могут Вас заинтересовать

72637. DATA 16.89 KB
  В тех случаях, когда переменные нужно присваивать в начале программы какие-либо значения , которые не должны меняться от одного прогона программы к другому, вместо операторов присваивания можно с большей эффективностью воспользоваться оператором DATA.
72638. Оператор PARAMETER 13.2 KB
  С помощью этого оператора можно любой константе дать символьное имя. Этот неисполняемыми оператор должен находиться перед исполняемыми операторами программы. Часто в разных местах программы употребляются длинные константы, такие как 3.14159265.
72640. ОПЕРАТОРЫ ЦИКЛА 20.64 KB
  Операторы цикла предназначены для многократного выполнения некоторых операторов. Эти операторы называются телом цикла. Различаются операторы цикла с предусловием и с постусловием. Блок-схемы операторов цикла показана на рисунке 1.2.
72641. Структурный IF 21.71 KB
  Сначала вычисляется условие e, а затем в зависимости от его истинности выполняется на выбор один из двух блоков, а после этого - следующий оператор. Один оператор if можно вкладывать в другой оператор IF. Один из таких случаев вложения, а именно if в блок НЕТ другого IF допускает...
72642. ЛОГИЧЕСКИЕ ВЫРАЖЕНИЯ 14.43 KB
  Логическими данными могут быть не только переменные и константы логического типа. Данные или выражения любого встроенного типа связанные операцией логического отношения образуют конструкцию логического типа. Такие конструкции могут входить в логические выражения наравне с логическими переменными и константами.
72643. Условные операторы 23.83 KB
  Условные операторы позволяют выбирать одно из нескольких возможных продолжений процесса программы. Имеется несколько форм условных операторов, из которых самым мощным и простым является структурный оператор IF.
72644. Последовательность выполнения операторов в программной единице 12 KB
  Главная программа является ведущей программной единицей, и обработка всей программы всегда начинается с первого исполняемого оператора главной программы. Обычно главную программу располагают в начале всей программы, т.к. этого требуют некоторые компиляторы; за главной программой следуют подпрограммы.
72645. Последовательность выполнения операторов в программной единице 12.99 KB
  Любая программная единица представляет собой последовательность операторов и комментариев. Комментарии могут располагаться в любом месте программной единицы. Они не влияют на ход выполнения программы. Порядок следования операторов в программе существен.