Шаблоны: https://mysvn.ru/avr/templates/
Примеры: https://mysvn.ru/avr/examples/
Экспортировать из репозитория к себе можно при помощи плагина к проводнику: TortoiseSVN.
Шаблоны для микроконтроллеров: ATtiny2313, ATmega48, ATmega16, ATmega32, ATmega128.
Особенности шаблонов:
1. Проекты шаблонов собраны таким образом, что компилируются в двух C++ компиляторах: avr-gcc и iar.
2. Каждый шаблон имеет класс CMCU, который является программной моделью микроконтроллера ATmega.
3. Обработка событий (прерываний) осуществляется через соответствующие методы класса CMCU, которые имеют соответствующие названия.
4. Код максимально самодокументирован, вплоть до отдельных настроечных битов конфигурационных регистров.
5. В каждый проект шаблона включён заголовочный файл с классом CVersion. Этот класс создаётся автоматически перед каждой компиляции проекта (и в iar, и в gcc). Его назначение - автоматически отслеживать номер версии прошивки в стиле: Major.Minor.Build.Revision, где первое число изменяется от 0 до 9, второе от 0 до 99, а последние два от 0 до 9999. Также в классе есть метод, возвращающий дату билда в виде строки. Строка находится во флеш.
6. Первоначально проекты шаблонов настроены для работы с WinAVR-20100110 и IAR 6.10.
7. Каждый шаблон имеет возможность однообразного описания декларации переменных и одномерных массивов, которые должны находится во флеш. При использовании специального C++ шаблона умного указателя (SmartPtr.h) можно забыть про функции типа pgm_read_byte() и eeprom_read_byte(). С++ компилятор автоматически вызовет эти функции для чтения данных из флеш или eeprom.
8. Для тех, кто умеет пользоваться VS2008, в каждой папке есть GCC проект для этой IDE, в котором можно работать над проектом. Сборка идёт через Makefile.
Назначение:
1. Переход на объектный C.
2. Небольшие проекты без сильных требований к быстродействию, т.е. там где не нужны в большом количестве ассемблерные вставки. Их можно подключать и в шаблонах, но только в качестве исключения.
3. Для тех, кому нравится ООП или хочет писать с использованием ООП на AVR.
Ограничения и недостатки:
1. При использовании двумерных массивов, которые должны находится во флеш, теряется кросс-компиляция.
2. Шаблоны пока ещё не готовы на 100%, в них могут быть неточности в плане описания регистров или битов. Нужно быть внимательными.
Добавлено спустя 57 секунд:
Пример 1. Проект на основе шаблона ATmega16: freemodbus.
- Код: Выделить всё • Развернуть
AVR Memory Usage
----------------
Device: atmega16
Program: 6398 bytes (39.1% Full)
(.text + .data + .bootloader)
Data: 421 bytes (41.1% Full)
(.data + .bss + .noinit)
-------- end --------
IAR Universal Linker V5.2.3.14
Copyright 1987-2011 IAR Systems AB.
5 778 bytes of CODE memory (+ 32 range fill )
484 bytes of DATA memory (+ 25 absolute )
Настройки адреса и регистров находятся в файле Configuration.h:
- Код: Выделить всё • Развернуть
#define REG_INPUT_START 1000
#define REG_INPUT_NREGS 4
В проекте определены 4 регистра:
- Код: Выделить всё • Развернуть
/**
* Главный (основной) поток программы
*/
HRESULT CMCU::MainThreadProcedure(){
const UCHAR ucSlaveID[] = { 0xAA, 0xBB, 0xCC };
eMBErrorCode eStatus;
eStatus = eMBInit( ::MB_RTU, 0x0A, 0, 9600, ::MB_PAR_NONE );
eStatus = eMBSetSlaveID( 0x34, TRUE, ucSlaveID, 3 );
__enable_interrupt();
// Enable the Modbus Protocol Stack
eStatus = eMBEnable();
do {
( void ) eMBPoll();
// Here we simply count the number of poll cycles
usRegInputBuf[0] = Value1;
usRegInputBuf[1] = Value2;
usRegInputBuf[2] = ( USHORT ) CVersion::GetRevision();
usRegInputBuf[3] = ( USHORT ) CVersion::GetBuild();
} while ( true );
// Все проверки прошли успешно, объект в рабочем состоянии
return NO_ERROR;
}
Value1 изменяется с частотой 1 секунда, а Value2 - 5 секунд.
Добавлено спустя 1 минуту 3 секунды:
Пример 2. Проект на основе шаблона ATmega16: uSD с модулем Petit FAT File System.
- Код: Выделить всё • Развернуть
AVR Memory Usage
----------------
Device: atmega16
Program: 10238 bytes (62.5% Full)
(.text + .data + .bootloader)
Data: 461 bytes (45.0% Full)
(.data + .bss + .noinit)
-------- end --------
IAR Universal Linker V5.2.3.14
Copyright 1987-2011 IAR Systems AB.
8 740 bytes of CODE memory (+ 36 range fill )
585 bytes of DATA memory (+ 16 absolute )
Размер кода можно изменять включая и выключая части драйвера Petit FS.
Подключение флешки к ATmega16:
- Код: Выделить всё • Развернуть
// Definitions for MMC/SDC connection
#define SD_DI 5 // MOSI
#define SD_DO 6 // MISO
#define SD_CLK 7 // CLK
#define SD_CS 4 // SS
#define SD_INS 0 // CD
#define SD_WP 1 // WP
Добавлено спустя 1 минуту 27 секунд:
Пример 3. Пример проекта на основе шаблона ATmega16: MicroVGA conio/user interface library.
- Код: Выделить всё • Развернуть
AVR Memory Usage
----------------
Device: atmega16
Program: 13874 bytes (84.7% Full)
(.text + .data + .bootloader)
Data: 523 bytes (51.1% Full)
(.data + .bss + .noinit)
-------- end --------
IAR Universal Linker V5.2.3.14
Copyright 1987-2011 IAR Systems AB.
12 839 bytes of CODE memory (+ 36 range fill )
625 bytes of DATA memory (+ 19 absolute )