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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите выбрать среду для разработки на С++
jack_avenger
сообщение Jun 7 2010, 14:19
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 30-06-05
Из: Киев
Пользователь №: 6 426



Здравствуйте, стоит задача разработки сложного протокола обмена по UART-y.
Чтоб не париться с отладкой, многократной заливкой прошивок в контроллер и т.д. было решено писать под обычную персоналку.
Так случилось что код использует STL и исключения.
Попробовал код скомпилировать под какой-нибудь контроллер и обламался.
Не могу найти среду разработки c поддержкой STL и исключений.
Keil под 8051 вообще не понимает С++
IAR под 8051 STL понимает, но нет поддержки исключений, как и ІAR для MPS430 и  для ARM.

Посоветуйте, пожалуйста, среду разработки под контроллеры для программирования в С++ с поддержкой STL и exceptions.
Или все придется переписывать без исключений?
Go to the top of the page
 
+Quote Post
Methane
сообщение Jun 7 2010, 14:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(jack_avenger @ Jun 7 2010, 17:19) *
Посоветуйте, пожалуйста, среду разработки под контроллеры для программирования в С++ с поддержкой STL и exceptions.
Или все придется переписывать без исключений?

AVR32 + GCC.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Jun 7 2010, 14:41
Сообщение #3


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Может сначала выбрать контроллер, оценить необходимую производительность, а потом выбирать язык программирования и среду.
Для размышления:
Код
fd = open(SERIALDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);

как будете реализовывать?


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Methane
сообщение Jun 7 2010, 14:43
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(mdmitry @ Jun 7 2010, 17:41) *
Может сначала выбрать контроллер, оценить необходимую производительность, а потом выбирать язык программирования и среду.
Для размышления:
Код
fd = open(SERIALDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);

как будете реализовывать?

Переопределением функции open в libc.
Go to the top of the page
 
+Quote Post
jack_avenger
сообщение Jun 7 2010, 14:53
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 30-06-05
Из: Киев
Пользователь №: 6 426



Цитата(Methane @ Jun 7 2010, 17:33) *
AVR32 + GCC.

Забыл сказать что не хотелось бы связываться с "экзотическими" или дорогими (>$5) контроллерами,
но всеравно спасибо за ответ.
Значит кроме GCC исключения никто не умеет обрабатывать?
Цитата(mdmitry @ Jun 7 2010, 17:41) *
Может сначала выбрать контроллер, оценить необходимую производительность, а потом выбирать язык программирования и среду.
Для размышления:
Код
fd = open(SERIALDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);

как будете реализовывать?

Производительность не особенно критична при скорости обмена 9600 / 19200 бод.
А работа с устройствами через дескрипторы мне не нужна, код работающий с регистрами UART напишу отдельно.
Насчет того что сначала нужно выбрать контроллер, то Вы правы. Но я кроме AVR, 8051, PIC ничего не знаю, а им эта задача не по зубам, так что всеравно что изучать.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Jun 7 2010, 14:55
Сообщение #6


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Methane @ Jun 7 2010, 18:43) *
Переопределением функции open в libc.

Уже linux на 8051 поставили?! Или всю libc править для работы с потоками?
А это как править:
Код
hCom = CreateFile(P, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

Ставить winCE на контроллер? У автора непонятно что на PC
Цитата
Чтоб не париться с отладкой, многократной заливкой прошивок в контроллер и т.д. было решено писать под обычную персоналку.

Есть ОС, нет ОС наука не в курсе? laughing.gif


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Methane
сообщение Jun 7 2010, 15:04
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(jack_avenger @ Jun 7 2010, 17:53) *
Забыл сказать что не хотелось бы связываться с "экзотическими" или дорогими (>$5) контроллерами,
но всеравно спасибо за ответ.
Значит кроме GCC исключения никто не умеет обрабатывать?

GCC точно умеет. И в GCC можно libc переписать. Посмотрите ARM7 Или Cortex C3 процессоры. Там и дешевые есть, а GCC там нормальной пойдет. Может можно будет и просто под AVR переписать, но ХЕЗ получится портировать или нет.

Цитата(mdmitry @ Jun 7 2010, 17:55) *
Уже linux на 8051 поставили?! Или всю libc править для работы с потоками?

Нет. Только ту часть, которая нужна.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 7 2010, 16:21
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(jack_avenger @ Jun 7 2010, 17:19) *
Посоветуйте, пожалуйста, среду разработки под контроллеры для программирования в С++ с поддержкой STL и exceptions.
Или все придется переписывать без исключений?


1. Исключение - аварийный вариант поведения программы. На PC обработка исключений оправдывается более-менее быстрой локализацией ошибок. Кто и как будет реагировать на исключения в embedded системе?
2. Исключения - сильный тормоз.
3. Выкинуть обработку исключений. Это займет максимум день.
Go to the top of the page
 
+Quote Post
jack_avenger
сообщение Jun 7 2010, 20:04
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 30-06-05
Из: Киев
Пользователь №: 6 426



Цитата(sergeeff @ Jun 7 2010, 19:21) *
1. Исключение - аварийный вариант поведения программы. На PC обработка исключений оправдывается более-менее быстрой локализацией ошибок. Кто и как будет реагировать на исключения в embedded системе?

Сам я и буду обрабатывать исключения, поэтому не соглашусь с Вами. Приведу пример. Пишу парсер входного буфера из которого я должен ловить пакеты переменной длины с попутной проверкой правильности определенных полей в заголовке. Есть несколько ситуаций когда нужно сгенерировать исключение (нужный байт еще не получен / по полученным байтам понятно что пакет "битый" / пакет адресуется не мне(неверный адрес устройства) / не совпала контрольная сумма заголовка / и т.д.)
Цитата(sergeeff @ Jun 7 2010, 19:21) *
2. Исключения - сильный тормоз.

Обоснуйте, пожалуйста. Если есть опыт то приветсвуется кусок дизассемблированной программы как реально происходит обработка исключений
Цитата(sergeeff @ Jun 7 2010, 19:21) *
3. Выкинуть обработку исключений. Это займет максимум день.

Выкину, если убедите меня вторым пунктом. Пока я считаю что исключения позволят мне написать более компактный код.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 7 2010, 20:14
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(jack_avenger @ Jun 7 2010, 23:04) *
Выкину, если убедите меня вторым пунктом.

Боюсь, что только завал Вами сией простой работы, только и сможет убедить Вас в том, что через анус, с помянутыми Вами припарками, на 51 ее делать не надо sad.gif. Вперед.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jack_avenger
сообщение Jun 7 2010, 20:26
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 30-06-05
Из: Киев
Пользователь №: 6 426



Цитата(zltigo @ Jun 7 2010, 23:14) *
Боюсь, что только завал Вами сией простой работы, только и сможет убедить Вас в том, что через анус, с помянутыми Вами припарками, на 51 ее делать не надо sad.gif. Вперед.

51-й я уже "похоронил" после того как сравнил объем кода сгенерированный IAR-ом для 51 и для MSP430 (2.5 : 1 в пользу MSP). Смотрю в сторону МSP430 или ARM7
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 7 2010, 20:50
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(jack_avenger @ Jun 8 2010, 02:26) *
Смотрю в сторону МSP430 или ARM7
Тогда уж и в сторону МК с ядром Cortex посмотрите.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jun 7 2010, 21:38
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(jack_avenger @ Jun 8 2010, 03:04) *
Сам я и буду обрабатывать исключения, поэтому не соглашусь с Вами. Приведу пример. Пишу парсер входного буфера из которого я должен ловить пакеты переменной длины с попутной проверкой правильности определенных полей в заголовке. Есть несколько ситуаций когда нужно сгенерировать исключение (нужный байт еще не получен / по полученным байтам понятно что пакет "битый" / пакет адресуется не мне(неверный адрес устройства) / не совпала контрольная сумма заголовка / и т.д.)

90% этих исключений есть на самом деле хорошо замаскированный goto, а остальные 10% setjmp/longjmp.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
shreck
сообщение Jun 8 2010, 02:03
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(jack_avenger @ Jun 8 2010, 03:04) *
Приведу пример. Пишу парсер входного буфера из которого я должен ловить пакеты переменной длины с попутной проверкой правильности определенных полей в заголовке. Есть несколько ситуаций когда нужно сгенерировать исключение (нужный байт еще не получен / по полученным байтам понятно что пакет "битый" / пакет адресуется не мне(неверный адрес устройства) / не совпала контрольная сумма заголовка / и т.д.)

Ситуации из вашего примера - это НЕ исключительные ситуации, а нормальная работа парсера. Прислушайтесь к мнениям гуру (Страуструп, Майер, Саттер) об использовании исключений и правильном подходе к написанию программ в этом случае. Думаю после этого, вы пересмотрите свой подход к написанию embedded приложений на C++.

IAR сделал абсолютно верно, что выкинул из своего компилятора поддержку исключений. Т.к. они для embedded устройств слишком тяжеловесны. Не могу придумать ни одного примера, где бы их использование было наиболее удобным/рациональным/правильным/...
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 8 2010, 03:38
Сообщение #15


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Исключения С++ и STL не очень коррелируют с МК за 5 баксов. Исключения - достаточно тяжелый механизм по накладным расходам - там при возникновении исключения происходит "раскручивание" стека, что, также, не очень хорошо сказывается и на таймингах.

STL требует работы со свободной памятью, что тоже обычно вызывает вопросы на embedded платформах - накладные расходы стандартного менеджера памяти + фрагментация кучи. Либо писать свой менеджер памяти и аллокаторы для контейнеров STL. Сами по себе задачи будут посложнее какого-то (да любого) там протокола передачи данных по UART.

Если за STL еще бы можно побороться, благо мощная и удобная библиотека, то про исключения лучше сразу забыть. Ну, и проц уже посоветовали - смотреть в сторону кортексов.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

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

 


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


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