roboforum.ru

Технический форум по робототехнике.

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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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

Сообщение uni » 23 ноя 2012, 17:58

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

Шаблоны: 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 )
Вложения
uVGA, Proteus, ZOCPro, debug.PNG
Отладка проекта в Proteus
uVGA, screens.png
Набор экранов проекта GCC
uSD, screen 4.PNG
Тестирование драйвера
uSD, screen 3.PNG
Сканирование папки
freemodbus, comport settings.PNG
Настройки COM порта
Последний раз редактировалось uni 08 окт 2013, 17:47, всего редактировалось 1 раз.
Аватара пользователя
uni
 
Сообщения: 23
Зарегистрирован: 11 фев 2007, 21:13
Откуда: Екатеринбург
Skype: viacheslavmezentsev
прог. языки: VB6, C++, OPascal, C#, Java, Win32Asm, ...
ФИО: Мезенцев Вячеслав Николаевич

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

Сообщение uni » 08 дек 2012, 11:14

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
Аватара пользователя
uni
 
Сообщения: 23
Зарегистрирован: 11 фев 2007, 21:13
Откуда: Екатеринбург
Skype: viacheslavmezentsev
прог. языки: VB6, C++, OPascal, C#, Java, Win32Asm, ...
ФИО: Мезенцев Вячеслав Николаевич

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

Сообщение uni » 08 окт 2013, 17:51

- добавлен шаблон проекта для ATtiny2313.
- дополнен формат версии при автоматическом формировании (два шаблона: x.x.x.x и x.x.* - по аналогии с .Net).
- добавлен пример tinycmd - простой командный интерпретатор на C++ для ATtiny2313. Только для демонстрации работы C++ проекта. Работает в Proteus через виртуальный нуль-модем.
- добавлен проект json - пример работы с данными в этом формате (простейший парсер).
- добавлен проект efs - (не завершён, только GNU) простая файловая система для работы с EEPROM (взято из openplayer).
- доработан проект uDDS. Это C++ аналог DDS Function Generator 2.0. Может работать на PB2, так как по-минимуму от него требуется только наличие ATmega16 @ 16 МГц.
- мелкие доработки прошлых примеров.
Вложения
PB2, DDS, рис. 1.png
Pinboard 2. Одна и та же прошивка в Proteus и PB2 (вид после НЧ фильтра).
Аватара пользователя
uni
 
Сообщения: 23
Зарегистрирован: 11 фев 2007, 21:13
Откуда: Екатеринбург
Skype: viacheslavmezentsev
прог. языки: VB6, C++, OPascal, C#, Java, Win32Asm, ...
ФИО: Мезенцев Вячеслав Николаевич

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

Сообщение Romikgy » 08 окт 2013, 22:20

а тоже самое но в архивах можно ?
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

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

Сообщение uni » 08 окт 2013, 22:30

Romikgy писал(а):а тоже самое но в архивах можно ?

Нет, нельзя. Дело в том, что я время от времени дорабатываю все эти проекты, нахожу ошибки, исправляю их. Если я буду выкладывать всё это в виде архива, то это будет мёртвый код, который повиснет на этой страничке.

Что сложного всё это скачать? Делается всего в две команды в консоли при установленном SVN клиенте:
1. svn export https://mysvn.ru/avr/templates/
2. svn export https://mysvn.ru/avr/examples/

Выберите папку, куда скачаете эти проекты. Там запустите эти две команды и результатом будут все проекты в двух папках: templates и examples. Периодически, раз в месяц, желательно таким же образом скачивать последнюю ревизию всех проектов. Можно скачивать проекты и по отдельности, указав путь до него. export - означает экспорт из репозитория.

Да, кстати, можно вызвать функцию экспорта прямо из проводника, если клиент svn установлен. В контекстном меню появится пункт для работы с svn.
Аватара пользователя
uni
 
Сообщения: 23
Зарегистрирован: 11 фев 2007, 21:13
Откуда: Екатеринбург
Skype: viacheslavmezentsev
прог. языки: VB6, C++, OPascal, C#, Java, Win32Asm, ...
ФИО: Мезенцев Вячеслав Николаевич

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

Сообщение uni » 26 окт 2013, 16:35

Обновлены все проекты шаблонов.
Переход всех проектов на 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 и прочие вещи, связанные с удобством работы.
Аватара пользователя
uni
 
Сообщения: 23
Зарегистрирован: 11 фев 2007, 21:13
Откуда: Екатеринбург
Skype: viacheslavmezentsev
прог. языки: VB6, C++, OPascal, C#, Java, Win32Asm, ...
ФИО: Мезенцев Вячеслав Николаевич


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 8