roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 05:41

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




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

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


Вложения:
Комментарий к файлу: Отладка проекта в Proteus
uVGA, Proteus, ZOCPro, debug.PNG
uVGA, Proteus, ZOCPro, debug.PNG [ 199.66 КиБ | Просмотров: 6023 ]
Комментарий к файлу: Набор экранов проекта GCC
uVGA, screens.png
uVGA, screens.png [ 70.26 КиБ | Просмотров: 6278 ]
Комментарий к файлу: Тестирование драйвера
uSD, screen 4.PNG
uSD, screen 4.PNG [ 24.07 КиБ | Просмотров: 5828 ]
Комментарий к файлу: Сканирование папки
uSD, screen 3.PNG
uSD, screen 3.PNG [ 18.64 КиБ | Просмотров: 5795 ]
Комментарий к файлу: Настройки COM порта
freemodbus, comport settings.PNG
freemodbus, comport settings.PNG [ 22.63 КиБ | Просмотров: 5823 ]


Последний раз редактировалось uni 08 окт 2013, 17:47, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 08 дек 2012, 11:14 
Не в сети
Аватара пользователя

Зарегистрирован: 11 фев 2007, 21:13
Сообщения: 23
Откуда: Екатеринбург
Skype: viacheslavmezentsev
прог. языки: VB6, C++, OPascal, C#, Java, Win32Asm, ...
ФИО: Мезенцев Вячеслав Николаевич
6-минутный ролик, демонстрирующий работу простого файлового менеджера на ATmega16 @ 16 МГц. Показана идентичная работа обеих прошивок (iar и avr-gcc):
http://www.youtube.com/watch?v=6OPQV9aZWaE

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

Исходник: https://mysvn.ru/avr/examples/uSD/


Вложения:
Комментарий к файлу: Простой файловый менеджер на ATmega16
uSD, screen 10.png
uSD, screen 10.png [ 22.88 КиБ | Просмотров: 5746 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 08 окт 2013, 17:51 
Не в сети
Аватара пользователя

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


Вложения:
Комментарий к файлу: Pinboard 2. Одна и та же прошивка в Proteus и PB2 (вид после НЧ фильтра).
PB2, DDS, рис. 1.png
PB2, DDS, рис. 1.png [ 135.64 КиБ | Просмотров: 5022 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шаблоны проектов на C++ для AVR [GCC, IAR]
СообщениеДобавлено: 08 окт 2013, 22:20 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
а тоже самое но в архивах можно ?

_________________
die Wahrheit ist irgendwo da draußen


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

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

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

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

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

Да, кстати, можно вызвать функцию экспорта прямо из проводника, если клиент svn установлен. В контекстном меню появится пункт для работы с svn.


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

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


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

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


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

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


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO