реклама на сайте
подробности

 
 
> Кросс-компиляторный шаблон (EC++, IAR, GCC), Попытка правильного проектирования сверху
uni
сообщение Jul 17 2011, 21:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 5-04-06
Из: Екатеринбург
Пользователь №: 15 809



Доброго, уважаемый форумчане.

Хочу предложить вашему вниманию пробный проект на C++ для объединения в одно целое процесса проектирования для микроконтроллеров AVR.

Я пытаюсь «подружить»: SVN (VisualSVN для VS2008), Proteus 7.6 (ISIS), Enterprise Architect, VS2008, IAR 5.51, WinAVR-20100110, AVR Studio 4 и AVR Studio 5… ух, короче, всё это в одном проекте.

Думается мне, что если писать на чистом C++, без особых выкрутасов, то можно иметь кросс-компиляторный проект в одном почти флаконе. Конкретно этот у меня компилируется и в IAR 5.51 и в WinAVR-20100110.

Цели:
1. Проектирование сверху (UML2).
2. Использование удобной IDE VS2008.
3. Рабочая виртуальная модель для тестов.

Ссылка на хранилище (svn): https://mysvn.ru/cop/Example/ (доступ: чтение)
Клиент для SVN под Windows: TortoiseSVN

Краткое описание есть там в readme.txt.

Отлаживаю одновременно в: ISIS, IAR и AVR Studio (через ubrof8, который генерится IAR'ом специально для этого).

Я пишу «образ» проекта в EA, используя редактор UML2, потом генерю образ(ы) класса(ов) в виде исходников и подключаю их в VS2008. Там же в студии через Makefile компилирую. Отладку, симуляцию можно делать где угодно.

Переключение компилятора в Defines.h (одном месте).
Моделируемая схема: Example.dsn — Proteus ISIS 7.6.

Вся необходимая инфа по сборке исходника в плане используемых портов и пинов находится в файле: Configuration.h

Хочу собрать вирутальную модель модуля АСУТП, работающего по MODBUS (припомощи com2com или аналога).
После этого:
- найти свободный OPC сервер и установить на компе;
- подключить модель Proteus к OPC серверу через COM-порт и MODBUS;
- взять китайску подделку а-ля iPad с версией Android не менее 1.6;
- найти OPC-клиент на Java для Android;
- написать самопальный HMI, который по WiFi будет подсоединяться через OPC-клиент к OPC-серверу;
- повесить планшетник на стенку, приделать в модели Протеуса 1-Wire термометр и любоваться на планшетнике температуру в модели.

------------------------------------

Кто-нить занимался чем-то подобным? В смысле кросс-компиляторности. Интересует использование строк, которые хранятся в памяти программ, т.е. универсальный подход для IAR и GCC.

Прикрепленное изображение
Прикрепленное изображение

Прикрепленное изображение
Прикрепленное изображение


Просто когда-то я был привлёчён вот к такому проектик для AVR'ки. Мягко говоря, он мне показался слегка запутанным и кроме самого кода никаких больше доков. Эту схемку нарисовала уже студия 2008.
Самый крайний правый класс - это пример того как не надо проектировать классы sm.gif он у меня в несколько экранов даже в таком виде не помещается.


Прикрепленное изображение
Прикрепленное изображение


Сообщение отредактировал uni - Jul 17 2011, 21:07


--------------------
Россия навсегда!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
uni
сообщение Nov 23 2012, 13:06
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 5-04-06
Из: Екатеринбург
Пользователь №: 15 809



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

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

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

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

Особенности шаблонов:
1. Проекты шаблонов собраны таким образом, что компилируются в двух C++ компиляторах: avr-gcc и iar.
2. Каждый шаблон имеет класс CMCU, который является программной моделью микроконтроллера ATmega.
3. Обработка событий (прерываний) осуществляется через соответствующие методы класса CMCU, которые имеют соответствующие названия.
4. Код максимально самодокументирован, вплоть до отдельных настроечных битов конфигурационных регистров.
5. В каждый проект шаблона включён заголовочный файл с классом CVersion. Этот класс создаётся автоматически перед каждой компиляции проекта (и в iar, и в gcc). Его назначение - автоматически отслеживать номер версии прошивки в стиле: Major.Minor.Revision.Build, где первое число изменяется от 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%, в них могут быть неточности в плане описания регистров или битов. Нужно быть внимательными.

Пример 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 секунд.
Прикрепленное изображение


Пример 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

Прикрепленное изображение
Прикрепленное изображение


Пример 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 )


Прикрепленное изображение
Прикрепленное изображение


Сообщение отредактировал uni - Nov 23 2012, 13:14


--------------------
Россия навсегда!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- uni   Кросс-компиляторный шаблон (EC++, IAR, GCC)   Jul 17 2011, 21:07
- - uni   Пример чуть усложнился. Привык я к винде, поэтому ...   Jul 19 2011, 11:14
|- - ReAl   Цитата(uni @ Jul 19 2011, 14:14) в GCC я ...   Jul 19 2011, 12:16
- - SasaVitebsk   Цитата(uni @ Jul 18 2011, 00:07) ух, коро...   Jul 19 2011, 12:15
- - neiver   Цитата(uni @ Jul 18 2011, 01:07) Кто-нить...   Jul 20 2011, 14:15
- - ReAl   Цитата(neiver @ Jul 20 2011, 17:15) У мен...   Jul 20 2011, 14:54
|- - neiver   Цитата(ReAl @ Jul 20 2011, 18:54) Код // ...   Jul 20 2011, 15:45
- - uni   Таак... попробую ответить по-порядку. Раз уж я об...   Jul 20 2011, 15:41
|- - MrYuran   Цитата(uni @ Jul 20 2011, 19:41) Хоть я к...   Jul 20 2011, 17:07
|- - ReAl   Цитата(uni @ Jul 20 2011, 18:41) Вот мне ...   Jul 21 2011, 06:29
|- - MrYuran   Цитата(uni @ Jul 20 2011, 19:41) форматы ...   Nov 23 2012, 13:26
- - ig_z   QUOTE (uni @ Jul 18 2011, 00:07) Цели: ...   Jul 20 2011, 19:09
|- - uni   Цитата(ig_z @ Jul 21 2011, 01:09) При так...   Jul 21 2011, 04:03
|- - demiurg_spb   Мне Ваш подход нравится. Молодчина!   Jul 21 2011, 05:10
|- - ReAl   Цитата(uni @ Jul 21 2011, 07:03) Получает...   Jul 21 2011, 06:14
|- - neiver   Цитата(uni @ Jul 21 2011, 08:03) Не тести...   Jul 21 2011, 06:18
|- - ar__systems   Цитата(neiver @ Jul 21 2011, 01:18) Почем...   Oct 30 2013, 13:40
- - uni   Читать и писать не успеваю. Закоммитил новый ...   Jul 21 2011, 11:23
- - uni   Ревизия 15. Совместная работа индикатора и клавиа...   Jul 22 2011, 06:40
- - uni   Оказывается китайцы уже давно (года 4, не меньше) ...   Jul 22 2011, 13:06
- - uni   Ревизия 16. Подключена внешняя SRAM на 32К. До эт...   Jul 22 2011, 15:02
- - uni   Я сначала не обратил внимания, а оказывается, найд...   Jul 22 2011, 23:09
- - uni   Итак, я исправил проект и вернул его в более менее...   Jul 23 2011, 07:50
- - uni   Ревизия 18. Добавил в шаблон (SmartPtr.h) от neiv...   Jul 23 2011, 11:22
- - uni   Ревизия 20. Версия: 0.0.0.74 Добавлена поддержка ...   Jul 24 2011, 15:33
- - uni   Вот чего я не видел на многочисленных сайтах, так ...   Jul 25 2011, 03:11
- - uni   Некоторые подвижки в шаблоне на примере отладочной...   Feb 29 2012, 22:32
- - uni   MrYuran, это просто клад, как же меня заколебало G...   Nov 23 2012, 14:14
|- - MrYuran   Цитата(uni @ Nov 23 2012, 18:14) Спасибо...   Nov 23 2012, 14:46
|- - _Артём_   Цитата(MrYuran @ Nov 23 2012, 16:46) Прос...   Nov 23 2012, 14:54
|- - SyncLair   Цитата(MrYuran @ Nov 23 2012, 18:46) меня...   Nov 23 2012, 15:04
- - uni   Я не то, чтобы студии апологет, я привык к Windows...   Nov 23 2012, 15:05
- - uni   6-минутный ролик, демонстрирующий работу простого ...   Dec 8 2012, 07:05
- - uni   Обновлены все проекты шаблонов. Переход всех проек...   Oct 26 2013, 08:49


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 12:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01431 секунд с 7
ELECTRONIX ©2004-2016