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

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


Участник
*

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



Таак... попробую ответить по-порядку.

Раз уж я объял тему AVR, то классику - нужно знать, т.е. ассемблер и Ассемблер от самой фирмы. Ну, хотя бы в общих чертах, чтобы не спрашивать, а где это в инструкциях там операция XOR и как бы её имитировать? sm.gif

Тут дело вот в чём. Посмотрев кучу разных сайтов около-радиолюбительской тематики, где обсуждают различные подходы к программированию AVR'ок (да и других mcu тоже)... в общем выглядит это всё какий-то стихийным разнобоем. А ведь существуют наработки по красивому написанию кода, по понятному написанию кода, по правильному написанию и т.д.

Вот мне тут про prog_char сказали, что от него нужно уходить. Честно говоря у меня в коде он упоминается только раз 5, наверное. Дело в том, что я ещё не устаканился в выборе define'ов, которые были бы общепринятыми и понятными для обозначения аттрибутов памяти. Нужно сделать так, чтобы было удобно и для IAR и для GCC. В доке к GCC есть макро FLASH_DECLARE() - вполне удобная вещь, я её оставил и использую. Там разница только в очередности: у IAR [ __flash имя ] , а у GCC [ имя __attribute__((...)) ].

Так вот. Я пока использую gcc обозначения для аттрибутов памяти. Все типы, по возможности, обявляют как uintN_t. Кроме аналогов типов из windows.h - это экспериментальная поделка, чтобы можно было народ если что даже к MSDN отсылать для справки. Если Вы посмотрите работу схемы в Proteus, то увидите как работает очередь сообщений и идёт их доставка в окно. Вроде, достаточно понятно. Но не это главное, это больше для красоты и универсальности. Многие знают винду изнутри и код будет как бы знакомым.

Есть ещё такие вещи, как инициализация регистров IO. Я давно искал красивое и понятное решение для этого и лет эдак 5 тому назад нашёл таковое:
Код
    // MCU Control Register
    // [ Регистр управления микроконтроллером ]
    //           00000000 - Initial Value
    MCUCR = BIN8(10000000);
    //           ||||||||
    //           |||||||+- 0, rw, IVCE:   - Interrupt Vector Change Enable
    //           ||||||+-- 1, rw, IVSEL:  - Interrupt Vector Select
    //           |||||+--- 2, rw, SM2: -+ - Interrupt 1 Sense Control
    //           ||||+---- 3, rw, SM0: _|
    //           |||+----- 4, rw, SM1:    - Бит 1 выбора режима сна
    //           ||+------ 5, rw, SE:     - Разрешение режима сна
    //           |+------- 6, rw, SRW10:  - Бит выбора режима ожидания
    //           +-------- 7, rw, SRE:    - Включение внешней SRAM/XMEM
    // Примечание:

Вот так это выглядит. Наверное заметили в коде. Когда у меня был один монитор, мне было в лом постоянно переключаться между доками и кодом. Я бы вообще хотел бы себе 4 монитора: дока, рунет, IDE, симуляция (+ещё один для фильма wink.gif ). А то заколебало уже. Вот и подумал я тогда, что не плохо бы как-то по-умному документировать код вот таким образом. Пошукал и нашё на RSDN. Теперь вовсю пользуюсь. Даже лет через 10, когда я взгляну на такой код, я пойму что он означает, не глядя в даташит.

Вот... А зачем всё вместе столько IDE. На самом деле это не так уж и много. Вот прикиньте, приходит к Вам в отдел новый сотрудник, Вы его сажаете за свой проект какой-нить, чтобы он "втягивался". Вот что Вы ему покажите? Код? Заголовочники? А дока есть на код? С UML2 можно показать "вид сверху", т.к. структуру кода. Это EA, кстати, достаточно удобен. Он поддерживает реверс кода из исходников и генерацию в заголовочники и код (заголовки, без тела функций), а также синхронизацию с кодом.

Я сам прикладник ещё и долго пользовался VS2008. Когда я первый раз сел за IAR, то подумал, что большего убожества ещё не видал. Хотя в плане остального он хорош. Меня его работа с кодом просто достала. Даже 5.51 какая-то глючная в этому смысле. Поэтому я давно уже мечтал от другой среде, но чтобы компилировать можно было в IAR. У меня обычно обе среды открыты, т.к. модификацию они подхватывают сразу, только VS2008 требует подтверждения, а IAR тупо обновляет.

Вообще же, в VS2008 есть много разных фич, которые очень удобны для программера, особенно под C++. Например, fullscreen, разные подсветки, подсказки, деревья кода, классов... куча хрени всякой. или ВОТ - подсветка условной компиляции в коде! Вещь здоровская. Мне уже ещё удобна тем, что я пользую SVN и у меня есть плагин к VS2008 - VisualSVN и я могу коммитить проект в SVN нажатием пары кнопок прямо из VS2008. К EA тоже есть плагин. В общем - must have. Единственно, что плохо - это нету перехода к строкам ошибок после компиляции в avr-gcc, т.к. форматы обозначения у VS2008 и gcc компиляторов отличаются (это можно полечить, но нужно знать как). Зато там есть таблица ошибок и ворнингов в виде окошка, что тоже удобно, там видны строки с ошибками.

Вот и получается такая взаимодополняющся связь. А AVRStudio получается автоматом, т.к. умеет создавать проекты из отладочных файлов IAR. Иногда я их создаю, чтобы посимулировать там, но 5-я версия уж очень тяжела и умна слишком.

Итого: ТЗ -> Enterprise Architect (UML2) <-> VS2008 (C++, SVN) <-> IAR, GCC, Proteus <-> SVN -> ТЗ

Очень не плохо получается. Как-то даже по-другому на весь процесс смотришь. А ведь есть ещё удобные тулзы для VS2008.

А код, что привели, я ещё не ознакомился... буду разбирать. Мне ещё Modbus приделать надо, с COM портами разобраться и написать специальную хрень-переходник для Конфигуратора. Дело в том, что интерфейс Конфигуратора я буду писать на C# (VS2008), а вот Modbus будет в отдельной dll, но поскольку управлять я потоками буду в неуправляемом коде, а отображать в управляемом, то для этих целей существует такая приблуда как C++\CLI - на нём можно писать, как бы это сказать, управляемо-неуправляемый код. Это для того, чтобы обернуть уже имеющийся код Modbus-класса в управляемую обёртку, доступную из C#.

Короче, дело не простое, но и не шибко сложное. Ах, да. Хоть я кое-что и писал на яве под Андроид, то вот OPC как делать пока вообще не в теме. Тут может быть стопор, не искал ещё.

Давно мечтаю что-нить у себя дома довести именно до вот такого вида.


--------------------
Россия навсегда!
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
|- - 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   Ссылка на 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 19:37
Рейтинг@Mail.ru


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