Часть 1.применение eclipse для разработки avr-приложений
Содержание:
- Программирование микроконтроллеров AVR с использованием GCC
- Раздел .data
- Немного о binutils
- Программное обеспечение для AVR в Linux
- Как установить WINAVR
- Раздел .noinit
- Maxim (former Dallas) 1-Wire
- Примеры работы с Makefile
- Projects in WinAVR
- GCC для AVR адресата
- Инструментальные средства, требуемые чтобы Формировать Toolchain для Windows
- Upgrading Arduino IDE 1.0
- Version list
- Flash Variables
- Особенности семейства
Программирование микроконтроллеров AVR с использованием GCC
Резюме:
Микроконтроллер AVR фирмы Atmel — 8-мибитный RISC микроконтроллер
общего назначения, внутри которого размещены EEPROM, RAM, АЦП, большое количество портов ввода и вывода, таймеры и последовательный канал UART, реализующий связь по протоколу RS232, и многое другое.
Большой плюс этого микроконтроллера — наличие средств разработки
под Linux. И эти средства предоставляет GCC. В этой статье я объясню
как установить и пользоваться GCC. Я также покажу, каким образом загрузить
исполняемый код в микроконтроллер. Для этого нам понадобится микроконтроллер AT90S4433, кварцевый резонатор на 4МГц, небольшой отрезок кабеля и еще несколько недорогих компонент.
Эта статья является вводной, в следующей статье мы построим ЖКИ дисплей с несколькими кнопками, аналоговым и цифровым входами, аппаратным сторожевым таймером и светодиодами. Конечная цель, построить панель управления для Linux-сервера. Но для начала нам необходимо установить и настроить средства разработки, чему и посвящена эта статья.
Раздел .data
Этот
раздел содержит
статические
данные,
которые были
определены в
вашем коде.
Код, подобныйследующемубудетпомещёнвраздел .data:
char err_str[] = "Your program has died a horrible death!";
struct point pt = { 1, 1 };
Можно
указать
компоновщику
адрес SRAM начала
раздела .data. Это
можно
сделать
добавив addrк командеavr-gcc.
Не этот адрес
должен быть
смещен,
добавлением 0x800000 к
реальному
адресу SRAM так, чтобы
компоновщик
знал, что
адрес находится
в
пространстве
памяти SRAM. Если Вы
хотите, чтобы
раздел .data начинался
с 0x1100, укажите 0x801100
в адресе
компоновщику.
Примечание:
При
использовании
в
приложении
(которое
может
произойти
при вызовах
из
библиотек),
требуются.
Немного о binutils
avr-objdump -h avrledtest.out
avrledtest.out: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn 0 .text 0000008c 00000000 00000000 00000094 2**0 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .data 00000000 00800060 0000008c 00000120 2**0 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00800060 0000008c 00000120 2**0 ALLOC 3 .eeprom 00000000 00810000 00810000 00000120 2**0 CONTENTS 4 .stab 00000750 00000000 00000000 00000120 2**2 CONTENTS, READONLY, DEBUGGING 5 .stabstr 000005f4 00000000 00000000 00000870 2**0 CONTENTS, READONLY, DEBUGGING
avr-size avrledtest.out
text data bss dec hex filename 140 0 0 140 8c avrledtest.out
avr-objdump -S avrledtest.out
Программное обеспечение для AVR в Linux
В пакетах программного обеспечения для Linux содержатся десятки тысяч программ и утилит.
Давайте же посмотрим что у нас есть в пакетах для нашего дистрибутива Linux по ключевому слову «avr», выполним поиск командой:
В результате получим список из нескольких десятков программ и библиотек.
Для начала нам будет интересно вот что:
- avr-libc — Стандартная библиотека C предназначенная для совместного использования с GCC специально под Atmel AVR;
- avra — Ассемблер для AVR микроконтроллеров (AVRAssevmler);
- avrdude — Программное обеспечение для программирования (прошивки) Atmel AVR микроконтроллеров;
- avrdude-doc — Документация к программе avrdude для чтения в оффлайн режиме, формат HTML;
- binutils-avr — Набор утилит для работы с данными для AVR микроконтрллеров (avr-objcopy, avr-size и другие);
- gcc-avr — Компилятор языка GNU C, кросс-компилятор для AVR;
- gdb-avr — Отладчик (GNU Debugger) для AVR микроконтроллеров;
- simulavr — Консольный симулятор для Atmel AVR микроконтроллеров.
Установим весь этот набор ПО одной командой:
С этим набором программного обеспечения и каким-то редактором текста уже можно писать программы и прошивать микроконтроллеры AVR.
При помощи avra мы сможем скомпилировать исходный код на Ассемблере (sample_program.asm) и сразу же получить на выходе готовый HEX-файл (sample_program.hex) для записи в флешь-память микроконтроллера.
С помощью gcc-avr можно произвести компиляцию исходного кода на языке Си и получить на выходе объектный файл с машинными кодами (sample_program.obj), который потом при помощи программы avr-objcopy, что входит в комплект утилит binutils-avr, переконвертируем в HEX-формат (sample_program.hex) для записи в флешь-память AVR чипа.
При помощи программы avr-size из комплекса утилит binutils-avr мы сможем узнать размер секций, а также общий размер данных в получившемся HEX-файле чтобы убедиться что программа поместится в памяти микроконтроллера.
Мощная программа avrdude даст нам возможность считать и записать прошивку в микроконтроллер. Мы сможем записать в микроконтроллер прошивку в HEX-формате (sample_program.hex) которая была получена после компиляции программы на Ассемблере, Си или другом компиляторе для AVR.
В программном симуляторе simulavr мы сможем произвести симуляцию работы программы, посмотреть содержимое регистров микроконтроллера в процессе выполнения программы.
Какие редакторы исходного кода и среды разработки подойдут для программирования AVR микроконтроллеров в Linux? — в принципе любые редакторы с удобной вам подсветкой синтаксиса для языков программирования Си и Ассемблера.
Ниже рассмотрим некоторые из редакторов и сред программирования, которые можно оптимизировать под свои нужды для удобного программирования AVR микроконтроллеров в Linux и не только.
Как установить WINAVR
Хотя Atmel Studio 7 полезная штука для написания кода, она не самый лучший выбор, когда речь идет о программировании устройств AVR с использованием инструментов с открытым исходным кодом. Поэтому, чтобы сделать жизнь проще на этапе компиляции и/или программирования, мы будем использовать WINAVR, которая также поставляется с AVRDUDE для загрузки нашего кода на устройства Atmega. Чтобы скачать WINAVR для Windows, просто нажмите на эту ссылку и выберите исполняемый exe-файл.
После скачивания запустите установщик и просмотрите все предложенные опции, пока программа не спросит вас про место установки.
Лучшее место для установки WINAVR – это рекомендуемое расположение: C:WinAVR-20100110 . Следующая опция спросит про компоненты и вы должны убедиться, что установлены все галочки (показано ниже).
После того, как кнопка установки нажата, установщик выполнит остальную часть работы, после чего установщик закроется.
Раздел .noinit
Это
разделы —
часть
раздела .bss. Что
делает
раздел .noinit special является
этим
переменные,
которые
определены
также:
int foo __attribute__ ((section (".noinit")));
не
будет инициализирован,
чтобы
обнулить в
течение запуска,
как был бы
нормальные
данные .bss.
Только
неинициализированные
переменные
могут быть
помещены в
раздел .noinit. Таким
образом,
следующий
код приведёт avr-gccк
ошибке:
int bar __attribute__ ((section (".noinit"))) = 0xaa;
Возможно
сказать
компоновщику,
явно где разместить
раздел .noinit, добавляя к avr-gccкомандная
строка в
связывающейся
стадии. Например,
предположите,
что Вы
желаете разместить
раздел .noinit по адресу SRAM 0x2000:
$ avr-gcc ... -Wl,--section-start=.noinit=0x802000 ...
Примечание
Из-за
архитектуры
Гарварда
устройств AVR, вы
должны
вручную
добавить 0x800000 к
адресу, который
Вы передаете
компоновщику
как начало
раздела.
Иначе,
компоновщик
думает, что
Вы хотите
поместить
раздел .noinit в раздел .text
вместо .data/.bss и
будет
ругаться.
Альтернативно,
Вы можете
записать ваш
собственный
сценарий
компоновщика,
чтобы автоматизировать
это.
Maxim (former Dallas) 1-Wire
Directory:onewire
1-Wire Interface (Software-based)
Files:onewire/sw-onewire.honewire/sw-onewire.c
Functions:
void onewire_init(void); int onewire_reset(void); int onewire_send(uint8_t *data, int len); int onewire_recv(uint8_t *data, int len); int onewire_read_rom(ow_rom_t *rom); int onewire_search_rom(int type, ow_rom_t *roms, int num); int onewire_search_family(int type, uint8_t family, ow_rom_t *roms, int num); int onewire_match_rom(ow_rom_t *rom); int onewire_skip_rom(void); int onewire_get_family(ow_rom_t *rom, uint8_t *family); int onewire_get_serial(ow_rom_t *rom, uint8_t *buf); int onewire_get_crc(ow_rom_t *rom, uint8_t *crc);
Dependencies
- avr-libc
- lib/crc8_dallas.h
- lib/crc8_dallas.c
1-Wire device: Maxim (former Dallas) DS18S20 and DS18B20 Digital Thermometer driver
Files:onewire/ds18x20.honewire/ds18x20.c
Functions:
void ds18x20_init(void); int ds18x20_read_rom(int type, ow_rom_t *rom); int ds18x20_search_rom(int type, ow_rom_t *roms, int num); int ds18x20_search_alarm(int type, ow_rom_t *roms, int num); int ds18x20_convert(ow_rom_t *rom); int ds18x20_get_temp(ow_rom_t *rom, int type, int res, float *temp); int ds18x20_set_resolution(ow_rom_t *rom, int res); /* DS18B20 only */ int ds18x20_set_alarm(ow_rom_t *rom, int type, int8_t temp_high, int8_t temp_low);
Dependencies
- avr-libc
- lib/crc8_dallas.h
- lib/crc8_dallas.c
- onewire/sw-onewire.h
- onewire/sw-onewire.c
1-Wire device: Dallas/Maxim DS2430A 256-Bit EEPROM driver
Files:onewire/ds2430a.honewire/ds2430a.c
Functions:
void ds2430a_init(void); int ds2430a_read_rom(ow_rom_t *rom); int ds2430a_search_rom(ow_rom_t *roms, int num); int ds2430a_write_memory(ow_rom_t *rom, uint8_t addr, uint8_t *buf, int len); int ds2430a_read_memory(ow_rom_t *rom, uint8_t addr, uint8_t *buf, int len); int ds2430a_write_app_reg(ow_rom_t *rom, uint8_t addr, uint8_t *buf, int len); int ds2430a_read_app_reg(ow_rom_t *rom, uint8_t addr, uint8_t *buf, int len); int ds2430a_lock_app_reg(ow_rom_t *rom); int ds2430a_read_status(ow_rom_t *rom, uint8_t *status);
Dependencies
- avr-libc
- lib/crc8_dallas.h
- lib/crc8_dallas.c
- onewire/sw-onewire.h
- onewire/sw-onewire.c
Примеры работы с Makefile
Сейчас я расскажу как использовать Makefile и почему это удобно. Все приведенные ниже примеры базируются на приведенной выше программе из трех файлов.
Перед использованием ‘make’ нужно перейти в директорию где располагается проект с файлом Makefile. Пусть это будет папка ‘/home/master/avr-test’, выполним в консоли следующую команду:
Теперь приведу примеры команд и описание того что они делают и для чего служат.
Компилируем программу, получаем на выходе объектный файл (*.c -> *.elf):
Извлекаем нужные области данных из объектного файла и строим файл с прошивкой (*.elf -> *.hex):
Очистка промежуточных и результирующих файлов в проекте (*.hex *.elf *.o):
Цепочка операций по умолчанию (очистка + компиляция + генерация hex):
Данная команда по результату аналогична следующей:
Смотрим размеры секций с данными в объектном файле (*.elf):
Примерный вывод команды:
Дизассемблируем объектный файл (*.elf):
Пример вывода:
Прошиваем HEX-файл в память микроконтроллера:
Если программа не была скомпилирована и не был HEX-файл не был создан, то это будет сделано автоматически перед запуском процесса прошивки.
Если же файлы *.elf и *.hex уже есть в папке проекта то будет запущена команда прошивки в МК уже существующего файла *.hex.
Открываем основной файл проекта с исходным кодом в консольном редакторе ‘nano’:
Для выхода из редактора nano нужно нажать комбинацию клавиш CTRL + X.
Чтобы выполнить компиляцию и прошивку программы, исходный код которой был изменен нужно выполнить очистку старых файлов (*.elf и *.hex), а потом уже наново выполнить сборку и прошивку. Эти операции можно выполнить всего лишь одной командой:
Запакуем все файлы проекта в архив (со сжатием GZip) для резервирования или пересылки:
Имя файла будет содержать название проекта (из переменной PROJECT в Makefile), а также строчку с текущей датой, например: main_24-09-2018.tgz.
Прошивка фьюзов в МК (будьте предельно осторожны с этой командой):
Значения Fuse-байтов для прошивки прописаны в шапке Makefile в переменных:
- FUSE_L — младший fuse-байт (Lower);
- FUSE_H — старший fuse-байт (Higher);
- FUSE_E — дополнительный fuse-байт.
Как видите, легко запоминающийся набор команд творит магию — выполняет всю рутинную работу по компиляции, сборке и прошивке программы в МК, предоставляет дополнительные полезные инструменты.
Projects in WinAVR
It is important to note that WinAVR is a collection of tools. For specific information on these tools see the links below:
- avr-libc — C library for AVR. Normal spot to report bugs that also affect GCC and Binutils first.
- avrdude — Programming software, supports lots of programmers.
- GNU Binutils — AVR target Binary Utilities (assembler, linker, etc)
- GNU GCC — C Compiler
- avrdude-gui — Graphical interface for avrdude
- GNU Debugger (GDB) — Command line debugger
- Insignt — Graphical debugger
- AVaRICE — Connects the JTAG ICE to the AVR-GDB debugging software.
- simulavr / simulavrxx — Simulator for the AVR
- MFile — Makefile editor
- Programmers Notepad — Text editor / IDE for compiler
- SRecord — Tools for editing EPROM load files.
GCC для AVR адресата
Warning:
You must install and make sure your properly before installing avr-gcc.
The steps
to build
are essentially same as for
$ bunzip2 -c gcc-<version>.tar.bz2 | tar xf -
$ cd gcc-<version>
$ mkdir obj-avr
$ cd obj-avr
$ ../configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ \
--disable-nls --disable-libssp --with-dwarf2
$ make
$ make install
To save your self some
download time, you can alternatively download only the and parts of the gcc. Also, if you
don’t need C++ support, you only need the core part and should only enable the
C language support.
Note:
Early versions of these tools did not support
C++.
The
stdc++ libs are not included with C++ for AVR due to the size limitations of
the devices.
The
official version of GCC might lack support for recent AVR devices. A patch that
adds more AVR types can be found at http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-gcc/files/patch-newdevices
Инструментальные средства, требуемые чтобы Формировать Toolchain для Windows
These are
the tools that are currently used to build WinAVR 20070525 (or later). This
list may change, either the version of the tools, or the tools themselves, as
improvements are made.
-
MinGW/MSYS
<http://downloads.sourceforge.net/mingw/MinGW-5.1.3.exe?use_mirror=superb-east>- Put MinGW-5.1.3.exe in it’s own directory
(for example: C:\MinGWSetup) - Run MinGW-5.1.3.exe
- Select «Download
and install» - Select
«Current» package. - Select type of install: Full.
- Put MinGW-5.1.3.exe in it’s own directory
-
Install MSYS-1.0.10.exe package.
<http://prdownloads.sf.net/mingw/MSYS-1.0.10.exe?download>- Default selections
- Batch file will ask:
- «Do you wish to continue with the
post install?» Press «y» and press enter. - «Do you have MinGW installed?»
Press «y» and press enter. - «Where is your MinGW
installation?» Type in «c:/mingw» (without quotes) and
press enter -
«Do you wish for me to add mount
bindings for c:/mingw to /mingw?» Press «y» and
press enter. -
It will display some messages on the
screen, then it will display: «Press any key to continue . .
.». Press any key.
- «Do you wish to continue with the
Edit c:\msys\1.0\msys.bat
Change line (should be line 41):
·
·if EXIST rxvt.exe goto startrxvt
to:
rem if EXIST rxvt.exe goto startrxvt
to remark
out this line. Doing this will cause MSYS to always use the bash shell and not
the rxvt shell.
Note:
The order of the next three is important. Install
MSYS Developer toolkit before the autotools.
-
MSYS Developer Toolkit
version 1.0.1- This is needed to build avr-libc in
MinGW. - <http://downloads.sourceforge.net/mingw/msysDTK-1.0.1.exe?use_mirror=internap>
- Single file installer executable.
Install.
- This is needed to build avr-libc in
-
autoconf 2.59 from the «MSYS
Developer Toolkit» release- autoconf 2.59/2.60 is needed to build
avr-libc in MinGW. - <http://downloads.sourceforge.net/mingw/msys-autoconf-2.59.tar.bz2?use_mirror=internap>
- Extract to
c:\msys\1.0
- autoconf 2.59/2.60 is needed to build
-
automake 1.8.2
- automake 1.8/1.9 is needed to build
avr-libc in MinGW. - <http://downloads.sourceforge.net/mingw/msys-automake-1.8.2.tar.bz2?use_mirror=internap>
- Extract to
c:\msys\1.0
- automake 1.8/1.9 is needed to build
-
Install Cygwin
Install everything, all users, UNIX line
endings. This will take a *long* time. A fat internet pipe is highly
recommended. It is also recommended that you download all to a directory
first, and then install from that directory to your machine.
Note:
MPFR requires GMP, so build it first.
-
Build GMP for MinGW
- Version 4.2.1
- <http://gmplib.org/>
- Build script:
o
o./configure2>&1 | tee gmp-configure.log
omake2>&1 | tee gmp-make.log
omake check2>&1 | tee gmp-make-check.log
omake install 2>&1 | tee gmp-make-install.log
GMP headers will be installed under
/usr/local/include and library installed under /usr/local/lib.
-
Build MPFR for MinGW
- Version 2.2.1
- <http://www.mpfr.org/>
- Build script:
o
o./configure --with-gmp=/usr/local 2>&1 | tee mpfr-configure.log
omake2>&1 | tee mpfr-make.log
omake check2>&1 | tee mpfr-make-check.log
omake install 2>&1 | tee mpfr-make-install.log
MPFR headers will be installed under
/usr/local/include and library installed under /usr/local/lib.
-
Install Doxygen
- Version 1.4.7
- <http://www.stack.nl/~dimitri/doxygen/>
- Download and
install.
-
Install NetPBM
- Version 10.27.0
- From the GNUWin32 project: <http://gnuwin32.sourceforge.net/packages.html>
- Download and
install.
-
Install fig2dev
- Version 3.2
Patchlevel 5-alpha7 - From WinFig 1.71: <http://www.schmidt-web-berlin.de/winfig/>
- Unzip the download file and install in a
location of your choice.
- Version 3.2
-
Install MiKTex
- Version 2.5
- <http://miktex.org/>
- Download and
install.
-
Install Ghostscript
- Version 8.54
- <http://www.cs.wisc.edu/~ghost/>
- Download and
install.
Set the TEMP and TMP environment variables
to c:\temp or to the short filename version. This helps to
avoid NTVDM errors during building.
Upgrading Arduino IDE 1.0
Note: This is an advanced option that may have side effects that have not yet been discovered. The official status is “works for me”. You may find issues that I have not come across yet.
The procedure is quite straightforward, surprisingly so given that the compiler and library shipped with the IDE is ancient (gcc 4.3.3). Nevertheless upgrading the IDE should be considered an advanced option that you probably don’t want to do unless you are having issues with it that you believe the upgrade will solve.
Step 1: Backup the old tools
Navigate to hardware/tools subdirectory of the Arduino installation and make a copy of the avr subdirectory like this.
Make a backup
Step 2: Drag and drop the new tools
- Navigate into the c:\avrgcc directory and select everything in it.
- Navigate a new window to the arduino-1.0\hardware\tools\avr subdirectory.
- Drag and drop the entire contents of the avrgcc directory as a copy (not a move!) into the arduino directory. Say yes to all prompts from Windows about merges and overwrites.
Step 3: Backup the Arduino library
Navigate to the hardware\arduino\cores subdirectory of your arduino installation and make a copy of the arduino subdirectory.
Step 4: Fix problems in the Arduino library
The final step is to fix up some problems with the Arduino library. Some are due to the library being written for the old avr-libc and others are just sloppy coding that we need to clean up.
Navigate into the hardware\arduino\cores\arduino directory that we just backed up and download and overwrite the files therein with those in the following table.
File | Reason for fix |
---|---|
HardwareSerial.cpp | The USART macros have changed and old macros deprecated. Rather than rewrite HardwareSerial.cpp we enable support for the old macros with the __AVR_LIBC_DEPRECATED_ENABLE__ preprocessor symbol. |
IPAddress.cpp and IPAddress.h |
Poor code quality here. The 4-octet class member is forcibly type-punned to an incompatible type in several places. This hack forces gcc to disable an entire class of optimisations. The new compiler automatically enables strict-aliasing when size optimisations are selected so we get told about this. The fix is to declare the 4-octet member as a union so it can be used in a type-safe manner. |
Print.cpp | The old prog_char et al. typedefs are no longer supported. The correct way to declare something to be in flash is with __attribute__((progmem)) on the variable name, not the type. There is one place in Print.cpp where I had to do this. |
WString.h | The F(string_literal) macro is incorrectly declared. reinterpret_cast can never cast away cv-qualifiers as it is being asked to do in this file. The fix is to keep the const qualifier in the cast target. |
Version list
Tool | Version | Configuration |
---|---|---|
avr-gcc | 4.7.0 | –with-gmp=/usr/local –with-mpfr=/usr/local –with-mpc=/usr/local –prefix=/c/avrgcc –target=avr –enable-languages=c,c++ –with-dwarf2 –enable-doc –disable-shared –disable-libada –disable-libssp |
avr-libc | 1.8.0 | –host=avr –prefix=/c/avrgcc –enable-doc –disable-versioned-doc –enable-html-doc –enable-man-doc –mandir=/c/avrgcc/share/man –datadir=/c/avrgcc –build=i686-pc-mingw32 build_alias=i686-pc-mingw32 |
avrdude | 5.1.1 | –prefix=/c/avrgcc –datadir=/c/avrgcc –sysconfdir=/c/avrgcc/bin –enable-doc –disable-versioned-doc
Update 24 Feb 2013: now includes libusb support. |
Flash Variables
The C language was not designed for Harvard architecture
processors with separate memory spaces. This means that there are various
non-standard ways to define a variable whose data resides in the Program Memory
(Flash).
IAR uses a non-standard keyword to declare a variable in Program Memory:
__flash int mydata[] = ....
AVR GCC uses Variable Attributes to achieve the same effect:
int mydata[] __attribute__((progmem))
Note:
See the GCC User Manual for more
information about Variable Attributes.
avr-libc provides a convenience macro for the Variable
Attribute:
#include <avr/pgmspace.h>
.
.
.
int mydata[] PROGMEM = ....
Note:
The PROGMEM macro expands to the
Variable Attribute of .
This macro requires that you include . This is the canonical
method for defining a variable in Program Space.
To read back flash data, use the () macros defined in .
All Program Memory handling macros are defined there.
There is also a way to create a method to define variables in Program Memory
that is common between the two compilers (IAR and AVR GCC). Create a header
file that has these definitions:
#if defined(__ICCAVR__) // IAR C Compiler
#define FLASH_DECLARE(x) __flash x
#endif
#if defined(__GNUC__) // GNU Compiler
#define FLASH_DECLARE(x) x __attribute__((__progmem__))
#endif
This code snippet checks for the IAR compiler or for the GCC compiler and
defines a macro
that will declare a variable in Program Memory using the appropriate method
based on the compiler that is being used. Then you would used it like so:
FLASH_DECLARE(int mydata[] = ...);
Особенности семейства
Прежде всего, микроконтроллеры этой серии являются быстрыми. Большинство инструкций процессор микроконтроллера выполняет за один цикл. Микроконтроллеры AVR примерно в 4 раза быстрее, чем PIC. Кроме того, они потребляют немного энергии и могут работать в 4 режимах экономии энергии.
Большинство контроллеров AVR являются 8-разрядными, хотя сейчас существует и 32-разрядная разновидность контроллеров AVR32. Кроме того, как уже упоминалось выше, AVR принадлежат к типу RISC-микроконтроллеров. Архитектура RISC (Complex Instruction Set Computers) означает, что набор инструкций, которые может выполнять процессор устройства, является ограниченным, но, в то же время, подобная архитектура дает преимущество в скорости. Противоположностью архитектуры RISC является архитектура CISC (Complex Instruction Set Computers).
32-разрядная разновидность контроллеров AVR32
8-битность контроллера означает, что он способен передавать и принимать 8-битные данные. Доступные регистры ввода/вывода также являются 8-битными.
Архитектура контроллера основана на регистрах. Это означает, что для хранения исходных данных операции и ее результата в контроллере используются регистры.
Процессор контроллера берет данные из двух входных регистров, выполняет логическую операцию и сохраняет результат в выходном регистре. Все это занимает 1 исполняемый цикл.