Easyelectronics.ru • Просмотр темы - Шаблоны проектов на C++ для AVR [GCC, IAR]

Easyelectronics.ru

Электроника для всех
Текущее время: 17 авг 2018, 10:30

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 21 ноя 2012, 22:15 
Старожил
Аватара пользователя

Зарегистрирован: 14 фев 2012, 19:11
Сообщения: 326
Откуда: Энергодар, Нижневартовск, Екатеринбург
Ссылка на 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. Проекты шаблонов настроены для работы с 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%, в них могут быть неточности в плане описания регистров или битов. Нужно быть внимательными.

_________________
git.io/vOZo0


Последний раз редактировалось уни 26 окт 2013, 13:58, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 23 ноя 2012, 00:09 
Старожил
Аватара пользователя

Зарегистрирован: 14 фев 2012, 19:11
Сообщения: 326
Откуда: Энергодар, Нижневартовск, Екатеринбург
Добавил пример проекта на основе шаблона 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 секунд.


Вложения:
Комментарий к файлу: Настройки COM порта
freemodbus, comport settings.PNG
freemodbus, comport settings.PNG [ 22.63 Кб | Просмотров: 7194 ]

_________________
git.io/vOZo0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 23 ноя 2012, 06:40 
Старожил
Аватара пользователя

Зарегистрирован: 14 фев 2012, 19:11
Сообщения: 326
Откуда: Энергодар, Нижневартовск, Екатеринбург
Добавил пример проекта на основе шаблона 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 3.PNG
uSD, screen 3.PNG [ 18.64 Кб | Просмотров: 7153 ]
Комментарий к файлу: Тестирование драйвера
uSD, screen 4.PNG
uSD, screen 4.PNG [ 24.07 Кб | Просмотров: 7153 ]

_________________
git.io/vOZo0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 23 ноя 2012, 07:24 
Старожил
Аватара пользователя

Зарегистрирован: 14 фев 2012, 19:11
Сообщения: 326
Откуда: Энергодар, Нижневартовск, Екатеринбург
Добавил пример проекта на основе шаблона 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 )


Вложения:
Комментарий к файлу: Отладка проекта в Proteus
uVGA, Proteus, ZOCPro, debug.PNG
uVGA, Proteus, ZOCPro, debug.PNG [ 199.66 Кб | Просмотров: 7146 ]
Комментарий к файлу: Набор экранов проекта GCC
uVGA, screens.png
uVGA, screens.png [ 70.26 Кб | Просмотров: 7148 ]

_________________
git.io/vOZo0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 06 окт 2013, 14:04 
Старожил
Аватара пользователя

Зарегистрирован: 14 фев 2012, 19:11
Сообщения: 326
Откуда: Энергодар, Нижневартовск, Екатеринбург
- добавлен шаблон проекта для 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. Пример 1
EFS, рис. 1.png
EFS, рис. 1.png [ 25.33 Кб | Просмотров: 5827 ]
Комментарий к файлу: EFS: EEPROM File System. User Manual
efs.pdf [173.24 Кб]
Скачиваний: 239

_________________
git.io/vOZo0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 07 окт 2013, 14:01 
Старожил
Аватара пользователя

Зарегистрирован: 14 фев 2012, 19:11
Сообщения: 326
Откуда: Энергодар, Нижневартовск, Екатеринбург
Доработан проект uDDS. Это C++ аналог DDS Function Generator 2.0. Может работать на PB2, так как по-минимуму от него требуется только наличие ATmega16 @ 16 МГц.

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

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


Вложения:
Комментарий к файлу: DDS, все 6 сигналов последовательно.
DDS, рис. 2.png
DDS, рис. 2.png [ 134.64 Кб | Просмотров: 5781 ]
Комментарий к файлу: DDS, генерация синуса.
DDS, рис. 1.png
DDS, рис. 1.png [ 116.1 Кб | Просмотров: 5781 ]

_________________
git.io/vOZo0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 08 окт 2013, 03:37 
Старожил
Аватара пользователя

Зарегистрирован: 14 фев 2012, 19:11
Сообщения: 326
Откуда: Энергодар, Нижневартовск, Екатеринбург
Он живой! (с) Пинборд 2 перестал быть просто железякой! Теперь в нём может биться сердце!

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

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


Вложения:
Комментарий к файлу: Выход ЦАП (4 разр).
PB2, DDS, рис. 3.png
PB2, DDS, рис. 3.png [ 63.13 Кб | Просмотров: 5724 ]
Комментарий к файлу: Выход ЦАП (4 разр) + НЧ фильтр (100 нФ + 10 кОм).
PB2, DDS, рис. 2.png
PB2, DDS, рис. 2.png [ 62.45 Кб | Просмотров: 5724 ]
Комментарий к файлу: Одна и та же прошивка в Proteus и PB2 (вид после НЧ фильтра).
PB2, DDS, рис. 1.png
PB2, DDS, рис. 1.png [ 135.64 Кб | Просмотров: 5724 ]

_________________
git.io/vOZo0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 26 окт 2013, 13:26 
Старожил
Аватара пользователя

Зарегистрирован: 14 фев 2012, 19:11
Сообщения: 326
Откуда: Энергодар, Нижневартовск, Екатеринбург
Обновлены все проекты шаблонов.
Переход всех проектов на 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 и прочие вещи, связанные с удобством работы.

Также обновлены два проекта: tinycmd и efs. Остальное дорабатывается.

_________________
git.io/vOZo0


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB