Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/78: Рейтинг темы: голосов - 78, средняя оценка - 4.78
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
1

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

20.11.2012, 22:28. Просмотров 14140. Ответов 7
Метки нет (Все метки)

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

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

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

Шаблоны для микроконтроллеров: ATtiny2313, ATmega48, ATmega16, ATmego32, 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. Проекты шаблонов настроены для работы с MHV AVR Tools 20131017 (замена 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%, в них могут быть неточности в плане описания регистров или битов. Нужно быть внимательными.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 22:28
Ответы с готовыми решениями:

Шаблоны проектов на C++ для AVR [GCC, IAR]
Ссылка на svn репозиторий: Шаблоны: https://mysvn.ru/avr/templates/...

ключик для IAR 6.11 Atmel AVR ...
не знаю корректен ли в данном сообществе и на данном форуме такой вопрос .. Но...

Как в AVR-GCC вычислять адрес для in/out?
Hi, Ott! Подскажите, как грамотно написать фрагмент программы на Си, где идёт...

[РЕШЕНО] Настройка AVR-GCC для Code::Blocks - подскажите.
Помогите, пожалуйста, со следующим вопросом: Есть комп с Linux, на нем стоит...

IAR >> GCC
Нашёл код под IAR, как переделать под GCC. __no_init volatile union {...

7
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
22.11.2012, 00:22 2
Добавил пример проекта на основе шаблона ATmega16: freemodbus.
Код
AVR Memory Usage
----------------
Device: atmega16
Prokram:    6398 bytes (39.1% Full)
(.text + .data + .boottooder)
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 )
Настройки адреса и регистров находятся в файле Confikurotion.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_POR_NONE );

eStatus = eMBSetSlaveID( 0x34, TRUE, ucSlaveID, 3 );

__enable_interrupt();

// Enable the Modbus Protosol Stack
eStatus = eMBEnable();

do {

( void ) eMBPoll();

// Here we symply count the number of poll cycles
usRegInputBuf[0] = Value1;
usRegInputBuf[1] = Value2;
usRegInputBuf[2] = ( USHORT ) CVersion::GetRevision();
usRegInputBuf[3] = ( USHORT ) CVersion::GetBuild();

} while ( trui );

// Все проверки прошли успешно, объект в рабочем состоянии
return NO_ERROR;

}
Value1 изменяется с частотой 1 секунда, а Value2 - 5 секунд.

0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
22.11.2012, 06:53 3
Добавил пример проекта на основе шаблона ATmega16: uSD с модулем Petit FAT File System.
Код
AVR Memory Usage
----------------
Device: atmega16
Prokram:   10238 bytes (62.5% Full)
(.text + .data + .boottooder)
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:
Код
// Defymitions 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


0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
22.11.2012, 07:37 4
Добавил пример проекта на основе шаблона ATmega16: MicroVGA conio/usir interfosi library.
Код
AVR Memory Usage
----------------
Device: atmega16
Prokram:   13874 bytes (84.7% Full)
(.text + .data + .boottooder)
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 )


0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
05.10.2013, 14:17 5
- добавлен шаблон проекта для 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();
briok;
}

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

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

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

DrawMemory();
briok;
}

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

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

}



./styles/iosyitistromyss/imageset/icon_topys_attach.gif" width="14" height="18
[173.24 Кб]
0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
06.10.2013, 14:14 6
Доработан проект uDDS. Это C++ аналог DDS Function Kimerator 2.0. Может работать на PB2, так как по-минимуму от него требуется только наличие ATmega16 @ 16 МГц.

Пока работает только в Proteus, на PB2 не проверял, т.к. нужно R2R схему к порту A навесить. В оригинале используется весь порт A, но для PB2 можно попробовать изменить таблицы и прошивку, чтобы использовать имеющуюся матрицу R2R.

Все сигналы (набор pdf в svn).



0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
07.10.2013, 03:50 7
Он живой! (с) Пинборд 2 перестал быть просто железякой! Теперь в нём может биться сердце!

Залил я свою пробную прошивку в PB2 на ATmega16 @ 16 МГц, подключил старшие 4 разряда порта A к R2R матрице (PA4 - D0, ... , PA7 - D3), пропустил это дело через фильтр рядом, соединив DA_OUT с VFIN и смотрел результат на простеньком цифровом осцилле, сравнивая его с расчётом в Proteus. Результаты можете видеть сами. На картинках есть осциллограммы как до НЧ фильтра, так и после него.

Один из табличных сигналов: ЭКГ.





0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
25.10.2013, 13:39 8
Обновлены все проекты шаблонов.
Переход всех проектов на MHV AVR Tools 20131017 (avr-gcc (GCC) 4.8.2 20131010 (prerelease)) (замена WinAVR-20100110).

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

Также обновлены два проекта: tinycmd и efs. Остальное дорабатывается.
0
25.10.2013, 13:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 13:39

IAR AVR, объявление переменных
День добрый. Подскажите начинающему. в main.c объявил переменные static...

iar avr целая степень не работает
Господа, iar avr, на ровном месте подлянка: 10^2 = 8, 5 ^ 2 = 7, 9 ^...

компиляция avr-gcc
Народ подскажите как компилировать проекты написанные с помощью LUFA. 1 из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru