Iar embedded workbench for avr

IAR - це один з кращих компіляторів С / С ++ для безлічі мікроконтролерів, починаючи від 8051 і закінчуючи просунутими ARMамі. Про створення проектів для ARM вже писали в навчальному курсі імені цього ж контролера, я ж напишу про створення проекту для AVR, особливостей роботи та налагодження в ньому.

Iar embedded workbench for avr

Для avr існує 2 версії - безкоштовна, з обмеженням за кодом до 4кБ і повна з 30-и денним триалом. Так само не важко знайти вилікуваних. Яку вибрати кожен вирішить для себе сам, скажу тільки що для нормальної роботи вилікуваний потрібно забороняти програмі вихід в інтернет. Остання на даний момент версія 5.51. Її я і буду використовувати.
Налаштування середовища.
Після установки варто зробити початкові налаштування середовища.
1. Tools-> Options. У Messages в пункті Show build messages вибрати тип All. Після цього при компіляції буде виводитися інформація про розмір програми і даних.
2. Оскільки середовище не підтримує програматори типу AVR ISP, то варто до неї прикрутити зовнішній програматор, наприклад SinaProg. Для цього тиснемо Tools-> Configure Tools.
Iar embedded workbench for avr

Налаштування там зрозумілі і без пояснень. Рядок Initial Directory можна залишити порожній або вказати в ній шлях до вихідних файлів поточного проекту. Тоді після запуску відразу буде вибиратися папка з прошивкою. В принципі для цього призначена галка Redirect to Output Window. з якої шлях повинен автоматом підставлятися для поточного проекту. Але у мене вона чомусь не запрацювала.

Створення проекту.
Запускаємо IAR Embedded Workbench і бачимо головне вікно програми:

Iar embedded workbench for avr

Вибираємо в меню - Project-> Create New Project. . У вікні можна вибрати мову (ASM, C, C ++) і тип проекту. Сумісність з AVR Studio нам ні до чого, тому створимо додаток на звичайному С.
Iar embedded workbench for avr

Програма відразу запропонує зберегти отриманий проект. Зберігаємо і отримуємо на виході наступний згенерований код:

Так, iar точно знає, що стислість сестра таланту :) Користуватися цим поки не можливо, тому можна переходити до налаштувань проекту.

В результаті отримаємо на виході 3 файлу:
  • * .d90 - для налагодження
  • * .eeprom.hex - для прошивки eeprom
  • * .flash.hex - сама прошивка
На цьому настройку проекту можна вважати закінченою і переходити до написання програми.

Написання Hello World.
Насправді писати програму миготливу чимось я не буду;) А тільки опишу особливості реалізації З в застосуванні до iar. Отже, відразу включаємо в самий початок програми наступне:

Без визначення * 1 цієї статті не будуть доступні бітові поля регістрів. Чому так зроблено мені самому не зрозуміло :) В * 2 йде якраз опис регістрів. Без * 3 НЕ буде деяких макроозначень.

Затримки в iar зроблені через кількість тактів, проте в 99% випадків набагато зручніше вказувати час затримки в мікро або мілісекундах. Тому додамо наступні визначення:

Тепер затримку можна зробити так:

Для розміщення констант у флеш використовується модифікатор __flash:

Для змінних в eeprom відповідно модифікатор __eeprom.

Переривання оголошуються в такий спосіб:

Де TIMER2_OVF_vect тип переривання, імена переривань можна подивитися у файлі опису конкретного процесора. Для mega16 - це C: \\ Program Files (x86) \\ IAR Systems \\ Embedded Workbench 5.4 \\ avr \\ inc \\ iom16.h
TIMER2_interrupt - просто ім'я переривання, можна написати що завгодно.
В іншому тут такий же С як і в будь-який інший середовищі.

Налагодження в IAR
Налагоджувати програму можна в залозі, через будь-які апаратні отладчики. JtagIce і Dragon найвідоміші і доступні з них. При цьому показується вміст регістрів, змінні, знімаються / встановлює апаратні прапори і спрацьовують переривання. Причому на відміну від gcc + студія змінні показуються незалежно від її типу і розташування. Загалом налагодження в залозі в iar проста і приємна. Тип відладчика вибирається у властивостях проекту. Там же він і налаштовується.
У кого отладчиков немає можна використовувати симулятор. Тут вже не так радісно. IAR, на відміну від студії, чи не емулює роботу процесора. Це означає, що таймери в симуляторі не вважають, прапор готовності апаратного i2c не встановлюється і так далі. І установка прапора потрібного переривання вручну не приведе до виклику цього переривання. Але змінні все одно показуються правильно. Після gcc це неймовірно доставляє.
Отже, налагодження в iar. Для запуску відладчика натискаємо зелений трикутник на правому панелі.

Iar embedded workbench for avr

Додаткові вікна відкриваються через меню View.
Змінні (вікно 4) можуть показуватися в вікнах Watch, Auto, Statics і Locals. У вікні Watch відображаються тільки обрані змінні, в Statics все статичні, а в Locals тільки локальні змінні. У вікні Auto будуть тільки змінні недавно змінили значення. В якості змінних можна вказувати назви регістрів. Наприклад на змінну PORTB буде виводитися поточний стан цього порту.
При бажанні можна зробити висновок кожного вікна окремо або вибирати потрібне закладкою внизу вікна. Спосіб виведення змінюється перетягуванням потрібних вікон.
Вікно Регістри (вікно 3) відрізняється від змінних тим, що в ньому виводиться не тільки значення обраного регістра, а й пов'язані з ним регістри. Наприклад для порту А також буде виведено DDRA і PINA. Так само значення кожного регістру можна розгорнути для показу бітових полів.
У вікні дізасемблера (вікно 2) і самої програми (вікно 1) буде поточний виконується фрагмент коду. Якщо при цьому вибрати вікно асемблера, то при при трасуванні буде виконуватися кожна асемблерна команда по черзі. Так само ставити точки зупину можна в будь-якому вікні.
Так можна налагодити всю логіку програми, крім роботи заліза і переривань. І якщо з симуляцією заліза зробити нічого не можна, крім як ставити потрібні біти вручну, то викликати переривання автоматично все таки можна. Хоч і не зручно, але все ж можна. Для цього вибираємо Simulator-> Interrups.
Iar embedded workbench for avr

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

$ PROJ_DIR $ - це шлях до твого файлу проекту (.ewp)
Пісня в тому, що оголошуючи відносні шляхи ти можещь запустити проект з будь-якого місця, не змінюючи налаштувань. Приблизно так як у вкладенні.

У віконці інструментів стартовий каталог визначає місце звідки буде запускатися тулза.
Нехай потрібна ось така команда
«C: \ IAR \ JLinkARM_V358c \ JLinkGDBServer.exe»
Можна зробити так


в першому випадку робочий каталог $ PROJ_DIR $ (там де лежить .ewp), у другому C: \ IAR \ JLinkARM_V358c

Чомусь посилання не вставили. (

$ PROJ_DIR $ - це шлях до твого файлу проекту (.ewp)
Пісня в тому, що оголошуючи відносні шляхи ти можещь запустити проект з будь-якого місця, не змінюючи налаштувань. Приблизно так як у вкладенні.
dl.dropbox.com/u/12253020/path.gif

У віконці інструментів стартовий каталог визначає місце звідки буде запускатися тулза.
Нехай потрібна ось така команда
«C: \ IAR \ JLinkARM_V358c \ JLinkGDBServer.exe»
Можна зробити так
dl.dropbox.com/u/12253020/rel.gif
або так
dl.dropbox.com/u/12253020/abs.gif

в першому випадку робочий каталог $ PROJ_DIR $ (там де лежить .ewp), у другому C: \ IAR \ JLinkARM_V358c

Налагоджувати одночасно в: ISIS, IAR і AVR Studio (через ubrof8, який генерується IAR'ом в папці exe спеціально для цього).

Не обов'язково вставляти цей макрос. В меню GENERAL OPTIONS у вкладці System досить поставити галочку в полі "Enable bit definitions in I / O-include files" і будуть доступні бітові поля регістрів.

Схожі статті