Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 23.11.2012, 17:47  
Вячеслав Мезенцев
Частый гость
 
Аватар для Вячеслав Мезенцев
 
Регистрация: 11.09.2011
Адрес: Екатеринбург
Сообщений: 29
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
Вячеслав Мезенцев на пути к лучшему
По умолчанию Шаблоны проектов на C++ для AVR [GCC, IAR]

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

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

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

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

Особенности шаблонов:
1. Проекты шаблонов собраны таким образом, что компилируются в двух C++ компиляторах: avr-gcc и iar.
2. Каждый шаблон имеет класс CMCU, который является программной моделью микроконтроллера AVR.
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%, в них могут быть неточности в плане описания регистров или битов. Нужно быть внимательными.
Реклама:

Последний раз редактировалось Вячеслав Мезенцев; 06.10.2013 в 18:25. Причина: Исправления и добавления
Вячеслав Мезенцев вне форума  
Эти 2 пользователя(ей) сказали Спасибо Вячеслав Мезенцев за это сообщение:
Dextor (21.04.2013), Kabron (23.11.2012)
Непрочитано 23.11.2012, 17:48  
Вячеслав Мезенцев
Частый гость
 
Аватар для Вячеслав Мезенцев
 
Регистрация: 11.09.2011
Адрес: Екатеринбург
Сообщений: 29
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
Вячеслав Мезенцев на пути к лучшему
По умолчанию Re: Шаблоны проектов на C++ для AVR [GCC, IAR]

Пример 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
Просмотров: 104
Размер:	22.6 Кб
ID:	40751  
Вячеслав Мезенцев вне форума  
Непрочитано 23.11.2012, 17:50  
Вячеслав Мезенцев
Частый гость
 
Аватар для Вячеслав Мезенцев
 
Регистрация: 11.09.2011
Адрес: Екатеринбург
Сообщений: 29
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
Вячеслав Мезенцев на пути к лучшему
По умолчанию Re: Шаблоны проектов на C++ для AVR [GCC, IAR]

Пример 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 3.PNG
Просмотров: 95
Размер:	18.6 Кб
ID:	40752   Нажмите на изображение для увеличения
Название: uSD, screen 4.PNG
Просмотров: 91
Размер:	24.1 Кб
ID:	40753  
Вячеслав Мезенцев вне форума  
Непрочитано 23.11.2012, 17:51  
Вячеслав Мезенцев
Частый гость
 
Аватар для Вячеслав Мезенцев
 
Регистрация: 11.09.2011
Адрес: Екатеринбург
Сообщений: 29
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
Вячеслав Мезенцев на пути к лучшему
По умолчанию Re: Шаблоны проектов на C++ для AVR [GCC, IAR]

Пример 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
Просмотров: 276
Размер:	70.3 Кб
ID:	40754   Нажмите на изображение для увеличения
Название: uVGA, Proteus, ZOCPro, debug.PNG
Просмотров: 231
Размер:	199.7 Кб
ID:	40755  
Вячеслав Мезенцев вне форума  
Непрочитано 07.12.2012, 20:11  
Вячеслав Мезенцев
Частый гость
 
Аватар для Вячеслав Мезенцев
 
Регистрация: 11.09.2011
Адрес: Екатеринбург
Сообщений: 29
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
Вячеслав Мезенцев на пути к лучшему
По умолчанию Re: Шаблоны проектов на C++ для AVR [GCC, IAR]

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

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

Исходник: https://mysvn.ru/avr/examples/uSD/
Миниатюры:
Нажмите на изображение для увеличения
Название: uSD, screen 10.png
Просмотров: 105
Размер:	22.9 Кб
ID:	41137  
Вячеслав Мезенцев вне форума  
Сказали "Спасибо" Вячеслав Мезенцев
Kabron (29.06.2013)
Непрочитано 07.12.2012, 20:35  
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: Шаблоны проектов на C++ для AVR [GCC, IAR]

Сообщение от Вячеслав Мезенцев Посмотреть сообщение
Код:
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
Довольно странные результаты. Я тестил и Яр и Гнутый компилятор - разница в среднем 200 байт на 10 килобайт (при объёмах больше 2 к). Самое большее было 400 с мелочью байт. Но не килобайты.
_guardianangel вне форума  
Непрочитано 07.12.2012, 21:12  
Вячеслав Мезенцев
Частый гость
 
Аватар для Вячеслав Мезенцев
 
Регистрация: 11.09.2011
Адрес: Екатеринбург
Сообщений: 29
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
Вячеслав Мезенцев на пути к лучшему
По умолчанию Re: Шаблоны проектов на C++ для AVR [GCC, IAR]

Многое зависит от ключей компилятора. К примеру, в проекте uSD 28-й ревизии разница между компиляцией iar'а и avr-gcc (C++) по флеш составляет несколько килобайт (2-4 Кбайт). iar много кушает ОЗУ, но у него хорошо C++ код упаковывается, у avr-gcc наоборот.

Дело ещё в том (я забыл упомянуть), что в avr-gcc я использую эмуляцию __flash iar'а при помощи специального C++ шаблона. Поэтому там, где у iar'а и так всё понятно при работе со строками во флеш, avr-gcc трудится гораздо больше. Вот в чём может быть причина. Если есть "прямая" работа со строками, таблицами во флеш, то разница будет больше.

Надеюсь, что когда 4.7 версия войдёт в массы, то отпадёт необходимость в дополнительных инструментах, т.к. там __flash уже есть.
Вячеслав Мезенцев вне форума  
Непрочитано 08.12.2012, 11:13  
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: Шаблоны проектов на C++ для AVR [GCC, IAR]

Мдя, я собсно на 4.7.0 и сравнивал...
_guardianangel вне форума  
Непрочитано 08.12.2012, 12:13  
Вячеслав Мезенцев
Частый гость
 
Аватар для Вячеслав Мезенцев
 
Регистрация: 11.09.2011
Адрес: Екатеринбург
Сообщений: 29
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
Вячеслав Мезенцев на пути к лучшему
По умолчанию Re: Шаблоны проектов на C++ для AVR [GCC, IAR]

Сообщение от _guardianangel Посмотреть сообщение
Мдя, я собсно на 4.7.0 и сравнивал...
4.7.0, как говорится, это для храбрых : avr-gcc 4.7.0 for the brave .

Значит нужно так и писать: я сравнивал такой-то gcc и такой-то iar на таких-то конкретных примерах (стандартных может быть) для такого-то языка (C, C++), с преимущественным использованием или неиспользованием чего-то.

В 10 К можно залить всё что угодно и говорить потом о 200 байтах различий .

У меня много конструкций такого характера:

Код:
    static void WriteString( FCHAR_PTR Value, EnCodePage CodePage = cp866, uint8_t Length = 0 );
    static void WriteString( const char * Value, EnCodePage CodePage = cp866, uint8_t Length = 0 );

    static FRESULT Open( const char * FileName );
    static FRESULT Open( FCHAR_PTR FileName );

    static FRESULT Write( const void * Buffer, WORD ByteToWrite, WORD * BytesWritten );
    static FRESULT Write( FCHAR_PTR Buffer, WORD ByteToWrite, WORD * BytesWritten );

    static FRESULT OpenDir( DIR * DirObject, const char * DirName );
    static FRESULT OpenDir( DIR * DirObject, FCHAR_PTR DirName );

    inline static FRESULT FollowPath( DIR * DirObject, const char * path );
    inline static FRESULT FollowPath( DIR * DirObject, FCHAR_PTR path );
    inline static FRESULT CreateName( DIR * DirObject, const char * * path );
    inline static FRESULT CreateName( DIR * DirObject, FCHAR_PTR * path );
Где FCHAR_PTR определён при помощи шаблона C++, чтобы я мог единым образом использовать в iar и gcc конструкции вида:

Код:
    CConsole::WriteString( SPSTR( "Файловый менеджер, ATmega16 @ 16 МГц, версия сборки: " ), CConsole::cp1251 );
    CConsole::WriteString( Version );
При этом все строки расположены во флеш и там и там и я явно не использую вызов pgm_read_xxx(). Не уверен, что кто-то уже освоил __flash в 4.7.0 на полную катушку и может показать примеры тестовых проектов для iar и gcc размером в 10К, которые компилируются в обоих компиляторах.

Мне было бы интересно как сейчас можно определить одномерные и двумерные массивы во флеш, особенно интересует массив строк. Как это выглядит хотелось бы взглянуть, т.к. это часто используется в менюшках и интерфейсах на основе иерархического меню.
Вячеслав Мезенцев вне форума  
Непрочитано 28.06.2013, 21:35  
Вячеслав Мезенцев
Частый гость
 
Аватар для Вячеслав Мезенцев
 
Регистрация: 11.09.2011
Адрес: Екатеринбург
Сообщений: 29
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
Вячеслав Мезенцев на пути к лучшему
По умолчанию Re: Шаблоны проектов на C++ для AVR [GCC, IAR]

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

Код:
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, где описан инструментарий.
Миниатюры:
Нажмите на изображение для увеличения
Название: Tetris, рис. 1.png
Просмотров: 168
Размер:	187.5 Кб
ID:	48666  
Вячеслав Мезенцев вне форума  
Сказали "Спасибо" Вячеслав Мезенцев
Kabron (29.06.2013)
 

Закладки

Метки
atmega, avr-gcc, c++, iar, шаблон
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход от GCC к IAR forastr Микроконтроллеры, АЦП, память и т.д 3 08.07.2011 22:50
Прошу бескорыстных прогеров AVR написать софт для серии открытых проектов majorka65 Микроконтроллеры, АЦП, память и т.д 26 12.10.2010 04:16
gcc, iar, code vision AVR ? schotki Микроконтроллеры, АЦП, память и т.д 48 26.05.2009 20:15
помогите с IAR для AVR chipman Proteus, KiCAD и другие ECAD 1 02.05.2007 20:50


Часовой пояс GMT +4, время: 02:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot