З плином часу завжди здається, що у сусіда трава зеленіша.
У сенсі, компілятор крутіше, простіше, зручніше і оптимізує краще.
Почнемо з IAR Embedded Workbench IDE for AVR - подивимося, як хоча б запустити в ньому проект.
Будемо розглядати мову С - без плюсів - тому усвідомимо, що ніяких посилань "at" і бітових змінних тут не використовується.
Тепер наша доля - це висловлювання на кшталт "portLight | = 1 <<_Light;" и "portButton &= ˜(1 <<_Button);", где выражение типа "x |= a" заменяет длинную запись "x = x | a".
Ще тут багато всяких кнопочно-галочні налаштувань, які не зовсім очевидні, але без них не працює> _<
Тому клацаємо "Project -> Options.":
У вкладці "General options" - "Target" визначаємо конфігурацію процесора - праворуч від текстового поля є кнопочка
В "General options" - "System" є вкрай важлива і вкрай непомітна галочка "Enable bit definitions in I / O-Include files" - поставимо її, і буде нам щастя: компілятор буде розуміти не тільки назви регістрів, але і назви бітів регістрів . Тобто можна буде писати приблизно так: "GICR | = 1 < // В "C / C ++ Compiler" - "Language 1" ставимо галочку "Multi-file Compilation" - подейкують, що так краще О_о У вкладці "C / C ++ Compiler" - "Optimizations" можна поставити високий рівень оптимізації, і обсяг вихідного файлу буде зменшуватися. Теоретично, по крайней мере. В "Linker" - "Output" ставимо галочку "Override default" і в текстовому полі пишемо розширення .hex; можна взагалі написати "$ PROJ_FNAME $ .hex" - тоді автоматом буде проставлятися назва проекту. Нижче, в області "Format" вибираємо "Other" - "intel-standard" Після цього все повинно бути добре) Їдемо далі - для написання будь-якої програми нам будуть потрібні кілька бібліотек. Щоб їх підключити, використовуємо директиву include: Кутові дужки вказують компілятору, що підключаються файли потрібно спочатку шукати в папці "IAR \ avr \ inc", а лапки - що потрібно починати пошук з директорії, в якій зберігається проект. При цьому для кожного типу мікроконтролера потрібно підключати свій заголовки (для ATmega8 - iom8.h, для ATtiny2313 - iotiny2313.h і т.д.), але в принципі, можна підключити загальні заголовки ioavr.h і inavr.h, а препроцесор вже сам розбереться, що до чого - в залежності від налаштувань програми. Також в цьому компіляторі буде купа define-ів - щоб переобозвать регістри управління портів (DDRx, PORTx, PINx) - користуватися покажчиками на unsigned char, як в MikroC, не вийде - і насправді незрозуміло, що навіть краще) Маленький екскурс: в мові Сі є така річ, як препроцесор. Він здатний змінити код до компіляції і працює з директивами #include, #define, #if, #ifdef і так далі. Коли ми пишемо #define three 3, то далі препроцесор перед компіляцією замінить в програмі все "three" на "3" Про насущне і зазвичай необхідному: десь захована функція __delay (value), яка працює з мілісекундами - вона є в довідці, але знайти бібліотеку, де вона лежить, я так і не змогла - зате є функція __delay_cycles (unsigned long int), яка працює з тактами - лежить в бібліотеці "intrinsics.h" - "inavr.h" теж на неї посилається. Щоб отримати потрібну кількість секунд, треба помножити цю кількість на частоту в герцах. Для прикладу представлена програма, миготлива светодіодик:Схожі статті