Перейти к содержанию
    

Библиотеки C++ для встраиваемых систем

Привет, коллеги,

 

Фабула: Хочется библиотеку C++ с минимальным размером для встроенных систем, чтобы можно было заменить стандартную из GCC тулчейна, для запуска в baremetal. Использоваться будет с тулчейном GCC. К примеру, размер picolib в собраном виде у меня получается около 14МБ, хорошо было бы иметь размер раза в 2(а лучше 3) легче. Т.е. менее 7МБ.

 

Подскажите пожалуйста:

1) Какие есть библиотеки C++ для встраиваемых систем для baremetal применений?

2) Опишите пожалуйста опыт использования этих библиотек.

3) Есть ли хорошие(можно собрать и использовать без особых сложностей)/надёжные(проверенные на личных проектах)/лёгкие(малый вес собранной либы) решения в открытом виде(под лицензиями GPL/MIT)?

 

Заранее благодарю за ответы.

Изменено пользователем gazpar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, gazpar said:

Какие есть библиотеки C++ для встраиваемых систем?

Их уйма

11 minutes ago, gazpar said:

Есть ли хорошие/надёжные/лёгкие решения в открытом виде(под лицензиями GPL/MIT)?

см. выше

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 minutes ago, gazpar said:

хочется библиотеку C++ с минимальным размером

Огласите, пожалуйста, конкретные критерии. Библиотека Си++17 из IAR 9.30.1 не подойдёт?

Используем данный компилятор на микроконтроллерах от 8 кБ ОЗУ и 64 кБ РПЗУ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/29/2022 at 2:36 PM, haker_fox said:

Огласите, пожалуйста, конкретные критерии. Библиотека Си++17 из IAR 9.30.1 не подойдёт?

Используем данный компилятор на микроконтроллерах от 8 кБ ОЗУ и 64 кБ РПЗУ.

"..хочется библиотеку C++ с минимальным размером для встроенных систем, чтобы можно было заменить стандартную из GCC тулчейна. "

прим. для использования с GCC тулчейном

 

Стандарт C++11 и, если возможно, C++14

 

IAR закрытая

Изменено пользователем gazpar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, gazpar said:

IAR закрытая

Тогда сформулируйте конкретные требования. Иначе в ответах будет много вопросов и флейма. Ибо критерии "хорошая/лёгкая/надёжная" - требования ни о чём не говорят и будут интерпретироваться каждым участником форума в меру своего опыта. Ну и нумерованный список вопросов в первом посте выглядит как опция, а требование "заменить стандартную из GCC тулчейна" вовсе не намекает на то, что новая библиотека тоже должна быть открытой.

7 minutes ago, gazpar said:

прим. для использования с GCC тулчейном

Ну и предлагаю писать без сокращений. Вот это "прим." что значит? Применительно? Примечание? Прима? У нас же не печатные машинки на дворе...:blum3:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/29/2022 at 2:50 PM, haker_fox said:

Тогда сформулируйте конкретные требования. Иначе в ответах будет много вопросов и флейма. Ибо критерии "хорошая/лёгкая/надёжная" - требования ни о чём не говорят и будут интерпретироваться каждым участником форума в меру своего опыта. Ну и нумерованный список вопросов в первом посте выглядит как опция, а требование "заменить стандартную из GCC тулчейна" вовсе не намекает на то, что новая библиотека тоже должна быть открытой.

Ну и предлагаю писать без сокращений. Вот это "прим." что значит? Применительно? Примечание? Прима? У нас же не печатные машинки на дворе...:blum3:

Указано же, что GPL/MIT.

 

 И в вопросе : "... чтобы можно было заменить стандартную из GCC тулчейна. "

 

Внимательно прочитайте просто, и всё встанет на свои места.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, gazpar said:

Внимательно прочитайте просто, и всё встанет на свои места.

Модератор: уточните критерии. Они непонятны. Вам пользователи пока задают вопросы. Потрудитесь написать всю необходимую информацию в числах, определите критерии "надёжности", например. Приведите сферу применения Вашего кода. Иначе тема будет направляться в сторону флейма, или, что хуже - оффтопика.

В противном случае, выпишу предупреждение. Пока предупреждаю только устно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/29/2022 at 4:13 PM, haker_fox said:

Модератор: уточните критерии. Они непонятны. Вам пользователи пока задают вопросы. Потрудитесь написать всю необходимую информацию в числах, определите критерии "надёжности", например. Приведите сферу применения Вашего кода. Иначе тема будет направляться в сторону флейма, или, что хуже - оффтопика.

В противном случае, выпишу предупреждение. Пока предупреждаю только устно.

Поправил

On 11/29/2022 at 3:47 PM, VladislavS said:

Что вы понимаете под размером библиотеки? 

Собраный размер библиотеки. К примеру, у меня собраный pico либ имеет вес примерно 14МБ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Требования опишите, пожалуйста.

Потому что эмбеддед нынче - от атмеги и младших STM (тогда -fno-exceptions -specs=nano.specs ) до Qt (хех, Qt тоже без exceptions работает).

И мерять исходный размер файла библиотеки, который потом урежется в 20 раз линкером, занятие странное...

 

Чисто для затравки. Можете погуглить "embedded standard template library". Но как по мне, какая-то странная штука. Современная STL удобнее, безопаснее (в том смысле, что лучше протестирована). При наличии ограничений на использование динамической памяти в ней достаточно примитивов, которые работают без new/delete.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Под какую архитектуру хоть? 

И, хоть убейте, не понимаю постановку задачи. Какая разница сколько занимает собранная библиотека? В прошивку будет включено только то что используется. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/29/2022 at 6:13 PM, esaulenka said:

Требования опишите, пожалуйста.

Потому что эмбеддед нынче - от атмеги и младших STM (тогда -fno-exceptions -specs=nano.specs ) до Qt (хех, Qt тоже без exceptions работает).

И мерять исходный размер файла библиотеки, который потом урежется в 20 раз линкером, занятие странное...

 

Чисто для затравки. Можете погуглить "embedded standard template library". Но как по мне, какая-то странная штука. Современная STL удобнее, безопаснее (в том смысле, что лучше протестирована). При наличии ограничений на использование динамической памяти в ней достаточно примитивов, которые работают без new/delete.

Это etl- она просто немного расширяет обычную stdlibc++. Если её включить в сборку, но вырубить стандартные либы, то ничего не соберётся.

Вот есть у меня код, при вырубании exceptions & RTTI размер бинаря получается 350кБ. А это черезчур много для имплементированого функционала. Поэтому хочу найти легковесную замену либе, идущую вместе с тулчейном GCC.

 

Мне нужен малый размер. И возможность заменить стандартные stdlibcpp на эту либу при сборке. Пока мне такое мне найти не удалось. Может кто-то какие-то либы использовал для замены стандартных вместе с GCC. Об этом собственно и тема.

On 11/29/2022 at 6:13 PM, VladislavS said:

Под какую архитектуру хоть? 

И, хоть убейте, не понимаю постановку задачи. Какая разница сколько занимает собранная библиотека? В прошивку будет включено только то что используется. 

Найти пока для ARM'а. Чтобы можно было её использовать вместе с GCC тулчейном.

Разница в реализации необходимого минимума для поддержки C++. Каких-то навороченных фичей C++ я не использую. Простые шаблоны, удобные структуры и классы и т.п. Т.е. обычный "Си с классами".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

21 минуту назад, gazpar сказал:

А это черезчур много для имплементированого функционала.

Какой функционал из стандартной библиотеки у вас используется? Ну чтобы понять масштаб проблемы. Я вот только вчера к AVR-GCC прикрутил Libstdc++ версии 20201103. Использую по полной C++20 type_traits, concepts и т.д. Ни одного лишнего байте в прошивку не попало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 minutes ago, gazpar said:

Найти пока для ARM'а.

Какой ARM: ARM7TDMI, Cortex-M0/3/4(F), Cortex-Ax?

24 minutes ago, gazpar said:

Т.е. обычный "Си с классами".

У нас на работе при использовании и более серьёзного функционала, который я лично не приветствую (std::map, std:;string, std::vector) всё укладывается в 64 кБайта. Правда речь снова про IAR - наш корпоративный стандарт. Может быть Вам следует поизучать документацию на компилятор и линкер, и дать им необходимые ключи? К сожалению, я не работаю с GCC. Но по опыту знаю, что неверная конфигурация инструментария может привести к разбуханию кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

35 минут назад, gazpar сказал:

размер бинаря получается 350кБ.

350кБ - это ещё постараться нужно, чтобы столько нашкодить! :mail1:   Разве что какие-то данные включены туда (типа картинок). Но при чём тогда "библиотеки"? Вообще непонятно...  :umnik2:

9 минут назад, haker_fox сказал:

У нас на работе при использовании и более серьёзного функционала, который я лично не приветствую (std::map, std:;string, std::vector) всё укладывается в 64 кБайта.

Ото-ж!  :good:

Чё-то темнит ТС...  :secret:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...