Шаблоны проектов на C++ для AVR [GCC, IAR]

Обсуждаем контроллеры компании Atmel.
Ответить
uni
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург

Сообщение uni »

Ссылка на svn репозиторий:

Шаблоны: https://mysvn.ru/avr/templates/
Примеры: https://mysvn.ru/avr/examples/

Экспортировать из репозитория к себе можно при помощи плагина к проводнику: TortoiseSVN.

Шаблоны для микроконтроллеров: ATmega48, ATmega16, ATmega32, ATmega128.

Особенности шаблонов:
1. Проекты шаблонов собраны таким образом, что компилируются в двух C++ компиляторах: avr-gcc и iar.
2. Каждый шаблон имеет класс CMCU, который является программной моделью микроконтроллера ATmega.
3. Обработка событий (прерываний) осуществляется через соответствующие методы класса CMCU, которые имеют соответствующие названия.
4. Код максимально самодокументирован, вплоть до отдельных настроечных битов конфигурационных регистров.
5. В каждый проект шаблона включён заголовочный файл с классом CVersion. Этот класс создаётся автоматически перед каждой компиляции проекта (и в iar, и в gcc). Его назначение - автоматически отслеживать номер версии прошивки в стиле: Major.Minor.Revision.Build, где первое число изменяется от 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%, в них могут быть неточности в плане описания регистров или битов. Нужно быть внимательными.
Россия навсегда!
Контактная информация:
Реклама
uni
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург

Сообщение uni »

Пример 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 секунд.
Вложения
freemodbus, comport settings.PNG
Настройки COM порта
(22.63 КБ) 720 скачиваний
Россия навсегда!
Контактная информация:
Реклама
uni
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург

Сообщение uni »

Пример 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
Вложения
uSD, screen 4.PNG
Тестирование драйвера
(24.07 КБ) 705 скачиваний
uSD, screen 3.PNG
Сканирование папки
(18.64 КБ) 323 скачивания
Россия навсегда!
Контактная информация:
uni
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург

Сообщение uni »

Пример 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 ) 
Вложения
uVGA, screens.png
Набор экранов проекта GCC
(70.26 КБ) 664 скачивания
uVGA, Proteus, ZOCPro, debug.PNG
Отладка проекта в Proteus
(199.66 КБ) 667 скачиваний
Россия навсегда!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
uni
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург

Сообщение uni »

6-минутный ролик, демонстрирующий работу простого файлового менеджера на ATmega16 @ 16 МГц. Показана идентичная работа обеих прошивок (iar и avr-gcc):
http://www.youtube.com/watch?v=6OPQV9aZWaE

В качестве отладочной платы используется Pinboard 2. Схема включения типовая. Этот проект можно запустить в Proteus, схема прилагается к исходникам. Правда там будут тормоза, но отлаживать можно.

Исходник: https://mysvn.ru/avr/examples/uSD/
Вложения
uSD, screen 10.png
Простой файловый менеджер на ATmega16
(22.88 КБ) 698 скачиваний
Россия навсегда!
Контактная информация:
Реклама
uni
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург

Сообщение uni »

Пример 4. Проект на основе шаблона ATmega16 (WinAVR-20100110, IAR 6.10.2): Игра Тетрис.

Небольшая демка: Демка проектов uSD и Tetris

Код: Выделить всё

AVR Memory Usage
----------------
Device: atmega16
Program:    6730 bytes (41.1% Full)
(.text + .data + .bootloader)
Data:        347 bytes (33.9% Full)
(.data + .bss + .noinit)


IAR Universal Linker V5.2.3.14 
Copyright 1987-2011 IAR Systems AB. 
 
6 154 bytes of CODE memory (+             36 range fill ) 
439 bytes of DATA memory (+ 19 absolute ) 
Проект ещё не доработан. Текущий функционал: поочерёдно падающие фигурки.

Что нужно, чтобы отлаживать проект как на картинке:
1. Настроить в Makefile частоту 8 МГц (для IAR'а она выставляется в Configuration.h), скорость в Configuration.h выставить BAUD 38400UL.
2. Нужна программа, эмулирующая нульмодем (Virtual Serial Ports Driver XP 4.0).
3. Нужен терминал, поддерживающий ANSI (ZOC или PuTTY). Там выставить соответствующие настройки: 38400, 8N1.
4. Не забыть в Proteus выбрать объектный файл (gccout.elf или iccout_ubrof8.d90) и частоту генератора у ATmega16 выставить 8МГц.

С такими настройками всё работает почти как на реальном железе, для которого лучше поставить и кварц и скорости по больше. Можете прочитать readme.txt, где описан инструментарий.

Изображение
Россия навсегда!
Контактная информация:
Реклама
uni
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург

Сообщение uni »

- добавлен шаблон проекта для ATtiny2313.
- дополнен формат версии при автоматическом формировании (два шаблона: x.x.x.x и x.x.* - по аналогии с .Net).
- добавлен пример tinycmd - простой командный интерпретатор на C++ для ATtiny2313. Только для демонстрации работы C++ проекта. Работает в Proteus через виртуальный нуль-модем.
- добавлен проект json - пример работы с данными в этом формате (простейший парсер).
- добавлен проект efs - (только GNU) простая файловая система для работы с EEPROM (взято из openplayer).
- мелкие доработки прошлых примеров.

На картинке ниже показан результат работы для проекта efs. Описание структуры файловой системы и используемых методов приведён в прилагаемом руководстве.

Код: Выделить всё

            switch ( Key ) {

                // Очищаем EEPROM до смешения 240.
                case '0': {
                
                    for ( uint16_t n = 0; n < 240; n++ ) eeprom_write_byte( ( uint8_t * ) n, 0 );

                    DrawMemory();
                    break;
                }

                // Создать файл.
                case '1': {

                    CEFS::CreateFile( & afile, 0xCF, "Настройки" );

                    CEFS::WriteFile( & afile, ( uint8_t * ) "-123456-", 0, 8 );

                    DrawMemory();
                    break;
                }

                // Удалить файл.
                case '2': {

                    CEFS::DeleteFile( & afile );
                    DrawMemory();
                    break;
                }

            }
Изображение
Вложения
efs.pdf
EFS: EEPROM File System. User Manual
(173.24 КБ) 286 скачиваний
Россия навсегда!
Контактная информация:
uni
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург

Сообщение uni »

Обновлены все проекты шаблонов.
Переход всех проектов на MHV AVR Tools 20131017 (avr-gcc (GCC) 4.8.2 20131010 (prerelease)) (замена WinAVR-20100110).

Для GCC:
Путь к сборке выбран: C:\MHVAVRTools\
Для настройки на свои пути нужно изменить их в файлах: build.cmd, buildall.cmd, clean.cmd. В проекте MSVS нужно также изменить пути поиска включаемых файлов, чтобы работал VAssistX и прочие вещи, связанные с удобством работы.
Россия навсегда!
Контактная информация:
Ответить

Вернуться в «AVR»