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

 
 
> Embedded C++, Кто какие библиотеки использует?
segment
сообщение Oct 28 2010, 12:12
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 10-08-06
Из: Санкт-Петербург
Пользователь №: 19 471



Я не начинаю очередной холивар по поводу того что C++ не нужен для микроконтроллеров и прочее. Поэтому те, кто хочет поспорить - приводите убедительные факты куда угодно, но не в эту тему.

Само собой использование STL в программе под микроконтроллер сомнительно, так как, к примеру, работа с STL в Keil uVision 4 (видимо их порт STL) обходится в минимум 40 Кбайт (собрал пример из Keil examples). Поэтому выходом из этой ситуации вижу использование либо специальных готовых light библиотек либо написание базовых шаблонов/классов самому. Но так уже стадия "начинающий и все хочу попробовать" прошла уже давно, поэтому писать самому не сильно тянет.
Кто какие C++ библиотеки использует для работы с периферией и данными?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
haker_fox
сообщение Sep 5 2012, 23:51
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Да, Си++ иногда тянет за собой кучу ненужного и тяжелого (полагаю, что и Си иногда тоже). На AVR я с этим не сталкивался, но столкнулся на ARM7TDMI, когда захотел использовать динамическую память (оператор new). Как только использовал, так код с 40 кБ вырос до 300 кБ. Пока чихаю на это, т.к. идет отладка. Но потом хочу прикрутить "легкую" реализацию менеджера памяти, любезно представленного уважаемым zltigo, и не менее любезно адаптированным к Си++ уважаемым Сергеем Борщем.
От исключений пока отказался, там что-то чудесное и невероятное творится как с размером, так и компиляцией. Но мне оно сейчас не особо нужно, а вот без динамического выделения памяти очень плохо.

Как-то так.

Ну в общем подходишь к этому вопросу с необходимой долей разума. Где готовое используешь, где адаптируешь, где свое накропаешь)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
alx2
сообщение Sep 7 2012, 05:16
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(haker_fox @ Sep 6 2012, 04:51) *
Да, Си++ иногда тянет за собой кучу ненужного и тяжелого
А что именно? Мне кроме исключений (которые можно отключить при компиляции) ничего в голову не приходит...

Цитата(haker_fox @ Sep 6 2012, 04:51) *
На AVR я с этим не сталкивался, но столкнулся на ARM7TDMI, когда захотел использовать динамическую память (оператор new). Как только использовал, так код с 40 кБ вырос до 300 кБ.
Пока чихаю на это, т.к. идет отладка. Но потом хочу прикрутить "легкую" реализацию менеджера памяти, любезно представленного уважаемым zltigo, и не менее любезно адаптированным к Си++ уважаемым Сергеем Борщем.
Сейчас провел "экспресс-тест". Весь код программы, использующей new и delete, составил меньше 9 килобайт (arm7tdmi). Почему у Вас new/delete потянули дополнительные 260 килобайт, ума не приложу. Тем более, что Вы не используете исключения... В любом случае, к языку C++ как таковому это не имеет отношения. Напротив, наличие в языке этих операторов (и, главное, возможность их перегружать по своему усмотрению) дает программисту возможность более тонко контролировать работу с памятью. В тривиальном случае new/delete могут работать через malloc/free и, таким образом, ничем не будут отличаться от аналогичного кода на языке C. Ничего "ненужного" эти операторы сами по себе не "тянут".


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Sep 9 2012, 00:58
Сообщение #4


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (alx2 @ Sep 7 2012, 14:16) *
Почему у Вас new/delete потянули дополнительные 260 килобайт, ума не приложу.

А вот и я не знаю... но стоит убрать эти операторы, как код становится 40 кБ...

С другой стороны, не зря же свои менеджеры памяти "выдумывают", значит проблема есть...

З.Ы. Компилятор у меня Code Sourcery...


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
alx2
сообщение Sep 10 2012, 05:11
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(haker_fox @ Sep 9 2012, 05:58) *
А вот и я не знаю... но стоит убрать эти операторы, как код становится 40 кБ...
Но Вы-то, в отличие от нас, узнать это можете - достаточно заглянуть в map-файл...
Вы, надеюсь, использовали nothrow-версию оператора new?
А вот с такими реализациями:
Код
void * operator new(size_t n) throw() { return malloc(n); }
void operator delete(void *p) { free(p); }
тоже тянет 260 кбайт?

Цитата(haker_fox @ Sep 9 2012, 05:58) *
С другой стороны, не зря же свои менеджеры памяти "выдумывают", значит проблема есть...
К языку программирования это не имеет никакого отношения. Язык C++ позволяет использовать любой менеджер памяти (включая использование нескольких менеджеров одновременно - для разных объектов разных). Свой менеджер памяти может потребоваться писать по тысяче разных причин - это зависит от решаемой задачи. И необходимость писать свой менеджер не означает, что все прочие существующие менеджеры плохи. Это всего лишь означает, что они не подходят для данной конкретной задачи. При этом для другой задачи какой-то из них может подойти гораздо лучше, чем "выдуманный" Вами. Но это совсем другая тема - не о языках программирования...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Sep 11 2012, 05:56
Сообщение #6


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (alx2 @ Sep 10 2012, 13:11) *
Но Вы-то, в отличие от нас, узнать это можете - достаточно заглянуть в map-файл...
Вы, надеюсь, использовали nothrow-версию оператора new?

Я не знаю crying.gif
Использовал так
CODE
int* p = new int[ 1000 ];

QUOTE (alx2 @ Sep 10 2012, 13:11) *
А вот с такими реализациями:
CODE
void * operator new(size_t n) throw() { return malloc(n); }
void operator delete(void *p) { free(p); }
тоже тянет 260 кбайт?

Попробую...
QUOTE (alx2 @ Sep 10 2012, 13:11) *
Но Вы-то, в отличие от нас, узнать это можете - достаточно заглянуть в map-файл...
Вы, надеюсь, использовали nothrow-версию оператора new?

Честно говоря, никогда не пользовался map-файлом... видимо пришло время)

Спасибо!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Sep 12 2012, 13:54
Сообщение #7


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



В общем new (std::nothrow) объем кода не уменьшает...(((


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 12 2012, 14:17
Сообщение #8


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(haker_fox @ Sep 12 2012, 19:54) *
В общем new (std::nothrow) объем кода не уменьшает...(((

Вообще-то должен. Посмотрите вот эту тему,
потом дополнительно убедитесь, что:
  • вы не забыли ключики -fno-exceptions и -fno-rtti для компилятора;
  • все варианты new() переопределены с nothrow;
  • к проекту подключен вот этот файл;
  • вы не забыли написать свой вариант _sbrk() (штатный вариант от codesourcery может тянуть за собой исключения. kgp в этом смысле лучше);

Я уверен, что после выполнения всех этих условий ваши волосы станут мягкими и шелковистымиsm.gif



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Sep 13 2012, 01:18
Сообщение #9


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (AHTOXA @ Sep 12 2012, 22:17) *
Вообще-то должен. Посмотрите вот эту тему,
потом дополнительно убедитесь, что:
  • вы не забыли ключики -fno-exceptions и -fno-rtti для компилятора;
  • все варианты new() переопределены с nothrow;
  • к проекту подключен вот этот файл;
  • вы не забыли написать свой вариант _sbrk() (штатный вариант от codesourcery может тянуть за собой исключения. kgp в этом смысле лучше);

Я уверен, что после выполнения всех этих условий ваши волосы станут мягкими и шелковистымиsm.gif

Все, что Вы перечислили у меня есть (от части из scmRTOS). Но шампунь не помогает) Волосы мягкими и шелковистыми не стали) В мап-файле видно, что тянутся исключения
CODE
/arm-none-eabi/lib\libstdc++.a(eh_exception.o)
Во вложениее полный map-файл...
Прикрепленные файлы
Прикрепленный файл  2xTermARM7.7z ( 102.89 килобайт ) Кол-во скачиваний: 15
 


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 13 2012, 02:33
Сообщение #10


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А если взять kgp?
Или попробуйте скомпилировать приложенный пример. У меня он компилируется в следующие объёмы:
codesourcery : 32K
kgp : 18K.
Прикрепленный файл  stm32_minimal_with_printf_and_new.zip ( 119.2 килобайт ) Кол-во скачиваний: 123


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Sep 13 2012, 04:20
Сообщение #11


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (AHTOXA @ Sep 13 2012, 10:33) *
А если взять kgp?
Или попробуйте скомпилировать приложенный пример. У меня он компилируется в следующие объёмы:
codesourcery : 32K
kgp : 18K.
Прикрепленный файл  stm32_minimal_with_printf_and_new.zip ( 119.2 килобайт ) Кол-во скачиваний: 123

Ваш компилируется) Мой не компилируется сборкой от Клена( Просто выдает это
CODE
--- compiling .\src/isrHandlers.cpp...
make: *** [obj/isrHandlers.o] Error 1

Кстати, а за счет чего kgp так рулит по объему (почти в два раза)?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Сега   Embedded C++   Oct 28 2010, 12:12
- - Forger   Я использую исключительно свои библиотеки. Писать ...   Oct 28 2010, 12:54
|- - ar__systems   Цитата(Forger @ Oct 28 2010, 07:54) В при...   Oct 28 2010, 14:27
- - scifi   Не знаю, насколько актуально, но вдруг пригодится:...   Oct 28 2010, 14:31
- - Petr_I   Цитата(Сега @ Oct 28 2010, 16:12) ... вых...   Oct 28 2010, 15:17
- - Сега   К моему удивлению, в Keil есть поддержка исключени...   Oct 28 2010, 18:02
|- - ig_z   QUOTE (Сега @ Oct 28 2010, 21:02) К моему...   Oct 28 2010, 19:07
- - beaRTS   А давайте помусолим uSTL (ссылка была раньше). 1....   Sep 4 2012, 09:28
- - Major   Использую для ARM (всех) компилятор C++ и очень до...   Sep 4 2012, 09:58
- - beaRTS   Спасибо! а на вопросы кто-нибудь прольет свет...   Sep 5 2012, 02:14
|- - Сергей Борщ   QUOTE (beaRTS @ Sep 5 2012, 05:14) Просто...   Sep 5 2012, 05:53
|- - beaRTS   Цитата(Сергей Борщ @ Sep 5 2012, 08:53) м...   Sep 5 2012, 07:21
- - Major   Использую и на 128КБайт и на 256МБайт (тут уже лин...   Sep 5 2012, 12:32
|- - beaRTS   Цитата(Major @ Sep 5 2012, 15:32) Зачем п...   Sep 5 2012, 14:53
|- - Marto   Цитата(alx2 @ Sep 7 2012, 10:16) А что им...   Sep 8 2012, 18:15
|- - _Артём_   Цитата(haker_fox @ Sep 12 2012, 16:54) В ...   Sep 12 2012, 14:13
||- - AHTOXA   Цитата(haker_fox @ Sep 13 2012, 10:20) Ва...   Sep 13 2012, 05:03
||- - haker_fox   QUOTE (AHTOXA @ Sep 13 2012, 13:03) И как...   Sep 13 2012, 05:08
||- - DmitryM   Цитата(AHTOXA @ Sep 13 2012, 09:03) ЗЫ. У...   Sep 13 2012, 05:20
|- - alx2   Цитата(haker_fox @ Sep 13 2012, 06:18) Во...   Sep 13 2012, 04:21
|- - haker_fox   QUOTE (alx2 @ Sep 13 2012, 12:21) Насколь...   Sep 13 2012, 05:01
|- - haker_fox   QUOTE (haker_fox @ Sep 13 2012, 13:01) Пр...   Sep 13 2012, 05:21
- - Major   Указатели на структуры - это практически когда воз...   Sep 6 2012, 01:37
|- - beaRTS   Цитата(Major @ Sep 6 2012, 05:37) Указате...   Sep 6 2012, 02:19
|- - haker_fox   QUOTE (Major @ Sep 6 2012, 09:37) Во встр...   Sep 6 2012, 03:25
|- - ReAl   Цитата(haker_fox @ Sep 6 2012, 06:25) В м...   Sep 6 2012, 07:35
- - Major   Ну про пути я говорить не буду Есть мнения что C+...   Sep 6 2012, 03:09
|- - beaRTS   Цитата(Major @ Sep 6 2012, 07:09) Есть мн...   Sep 6 2012, 04:23
|- - dxp   QUOTE (beaRTS @ Sep 6 2012, 11:23) чую - ...   Sep 6 2012, 06:59
|- - beaRTS   Цитата(dxp @ Sep 6 2012, 10:59) Да не, ни...   Sep 6 2012, 07:16
|- - sasamy   Цитата(dxp @ Sep 6 2012, 10:59) Да не, ни...   Sep 7 2012, 17:41
|- - dxp   QUOTE (sasamy @ Sep 8 2012, 00:41) Для чи...   Sep 8 2012, 02:49
|- - sasamy   Цитата(dxp @ Sep 8 2012, 06:49) Сегодня С...   Sep 9 2012, 22:30
- - Major   ЦитатаВот так и получается, что "поняв",...   Sep 6 2012, 05:10
- - halfdoom   Совсем не давно, после длительного обсуждения с за...   Sep 8 2012, 03:50
|- - dxp   А что это вот такое: CODEC++-code requires signifi...   Sep 8 2012, 05:54
|- - _Pasha   Цитата(dxp @ Sep 8 2012, 08:54) А что это...   Sep 8 2012, 09:14
||- - dxp   QUOTE (_Pasha @ Sep 8 2012, 16:14) Они по...   Sep 8 2012, 09:31
|- - halfdoom   Цитата(dxp @ Sep 8 2012, 08:54) Какой смы...   Sep 8 2012, 09:45
|- - dxp   QUOTE (halfdoom @ Sep 8 2012, 16:45) Эти ...   Sep 8 2012, 10:02
- - Major   Еще раз вмешаюсь. C++ это язык, возможности которо...   Sep 8 2012, 06:10
- - mikeT   Заинтересовало упоминание языка Ада в задачах, где...   Sep 8 2012, 10:33
|- - halfdoom   Цитата(mikeT @ Sep 8 2012, 13:33) SafetyC...   Sep 8 2012, 11:22
|- - SSerge   Цитата(mikeT @ Sep 8 2012, 17:33) и ниже ...   Sep 8 2012, 13:28
- - andrewlekar   Ada, насколько я знаю, очень хороший язык. Ну а er...   Sep 10 2012, 05:25
- - beaRTS   наткнулся на статью интересную Паттерны проектиров...   Oct 3 2012, 07:05
|- - kolobok0   Цитата(beaRTS @ Oct 3 2012, 11:05) ...кто...   Oct 5 2012, 09:56
|- - beaRTS   Цитата(kolobok0 @ Oct 5 2012, 13:56) И от...   Oct 8 2012, 04:34
|- - kolobok0   Цитата(beaRTS @ Oct 8 2012, 08:34) ...пат...   Oct 8 2012, 09:37
|- - beaRTS   Цитата(kolobok0 @ Oct 8 2012, 13:37) я о ...   Oct 8 2012, 09:54
- - globalist   C++ замечательный язык. Только надо уметь им польз...   Oct 9 2012, 21:26


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

 


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


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