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

 
 
> Кросс-компиляторный шаблон (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
сообщение Jul 24 2011, 15:33
Сообщение #2


Участник
*

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



Ревизия 20.

Версия: 0.0.0.74
Добавлена поддержка автоматического изменения версии программы (класс CVersion и скрипты).

Давно мечтал о такой фиче, но всё никак руки не доходили. Сделано по мотивам вот этой статьи:

IAR EW ARM: автоматическая генерация версии прошивки

Прям скажу, что я написал всё с нуля как всегда. Формат x.x.x.x мне как-то роднее.

Как это работает. Нда... Короче, WSH + пре и пост билды, если в двух словах.

Для VS2008:
Шаг 1. При запуске компиляции отрабатывает команда в Makefile:
Код
genver:
    @echo Generating Version.cpp file ...
    cscript //NoLogo versionfile-gen.js Version version.txt

где:
Version - это имя для формируемого Version.cpp файла, там будет храниться инфа о версии для проекта, а файл version.txt хранит данные о версии:
Код
0
0
0
75


Шаг 2. Скриптом генерится (перезаписывается) файл Version.cpp. Вот он какой:
Код
///////////////////////////////////////////////////////////
//  Version.cpp
//  Implementation of the Class CVersion
//  Created on:      24 июля 2011 г. 20:41:08
//  Original author: Мезенцев В. Н.
///////////////////////////////////////////////////////////

#include "Version.h"


uint8_t CVersion::Major = 0;
uint8_t CVersion::Minor = 0;
uint16_t CVersion::Revision = 0;
uint16_t CVersion::Build = 74;


uint8_t CVersion::GetMajor(){

    return Major;

}


uint8_t CVersion::GetMinor(){

    return Minor;

}


uint16_t CVersion::GetBuild(){

    return Build;
}


uint16_t CVersion::GetRevision(){

    return Revision;
}

Причём дата генерации будет указана свежая sm.gif

Шаг 3. Компилируется всё это дело.

Шаг 4. Если процесс не прервался от досадной ошибки, то выполяется следующая строка Makefile:
Код
updver:
    @echo Updating version ...
    cscript //NoLogo versionfile-update.js version.txt


Тут второй скрипт меняет версию.

Скрипты: versionfile-gen.js и versionfile-update.js.

В коде происходит сборка строки версии следующим образом:
Код
    // Вычисление строки с версией программы
    utoa( CVersion::GetMajor(), buffer, 10 );
    strcat( Version, buffer );
    strcat( Version, "." );

    utoa( CVersion::GetMinor(), buffer, 10 );
    strcat( Version, buffer );
    strcat( Version, "." );

    utoa( CVersion::GetRevision(), buffer, 10 );
    strcat( Version, buffer );
    strcat( Version, "." );

    utoa( CVersion::GetBuild(), buffer, 10 );
    strcat( Version, buffer );


Увы, это не работает в IAR. Пока не придумал как заметить utoa() (sprintf() что-то не пашет).

В остальном, меня это решение очень даже устраивает. На индикаторе теперь выводится истинная версия. После каждого успешного билда счётчик накручивается.

Нда... похоже придётся весь проект переписывать.

После краткого ознакомления с этим ресурсом: KonstantinChizhov / AvrProjects стало как-то уныло от своего стиля кодинга sad.gif .


--------------------
Россия навсегда!
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   Вот чего я не видел на многочисленных сайтах, так ...   Jul 25 2011, 03:11
- - uni   Некоторые подвижки в шаблоне на примере отладочной...   Feb 29 2012, 22:32
- - uni   Ссылка на svn репозиторий: Шаблоны: https://mysv...   Nov 23 2012, 13:06
- - 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 Текстовая версия Сейчас: 22nd July 2025 - 15:18
Рейтинг@Mail.ru


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