gazpar 1 29 ноября, 2022 Опубликовано 29 ноября, 2022 (изменено) · Жалоба Привет, коллеги, Фабула: Хочется библиотеку C++ с минимальным размером для встроенных систем, чтобы можно было заменить стандартную из GCC тулчейна, для запуска в baremetal. Использоваться будет с тулчейном GCC. К примеру, размер picolib в собраном виде у меня получается около 14МБ, хорошо было бы иметь размер раза в 2(а лучше 3) легче. Т.е. менее 7МБ. Подскажите пожалуйста: 1) Какие есть библиотеки C++ для встраиваемых систем для baremetal применений? 2) Опишите пожалуйста опыт использования этих библиотек. 3) Есть ли хорошие(можно собрать и использовать без особых сложностей)/надёжные(проверенные на личных проектах)/лёгкие(малый вес собранной либы) решения в открытом виде(под лицензиями GPL/MIT)? Заранее благодарю за ответы. Изменено 29 ноября, 2022 пользователем gazpar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 55 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 10 minutes ago, gazpar said: Какие есть библиотеки C++ для встраиваемых систем? Их уйма 11 minutes ago, gazpar said: Есть ли хорошие/надёжные/лёгкие решения в открытом виде(под лицензиями GPL/MIT)? см. выше Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 23 minutes ago, gazpar said: хочется библиотеку C++ с минимальным размером Огласите, пожалуйста, конкретные критерии. Библиотека Си++17 из IAR 9.30.1 не подойдёт? Используем данный компилятор на микроконтроллерах от 8 кБ ОЗУ и 64 кБ РПЗУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gazpar 1 29 ноября, 2022 Опубликовано 29 ноября, 2022 (изменено) · Жалоба 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 закрытая Изменено 29 ноября, 2022 пользователем gazpar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 4 minutes ago, gazpar said: IAR закрытая Тогда сформулируйте конкретные требования. Иначе в ответах будет много вопросов и флейма. Ибо критерии "хорошая/лёгкая/надёжная" - требования ни о чём не говорят и будут интерпретироваться каждым участником форума в меру своего опыта. Ну и нумерованный список вопросов в первом посте выглядит как опция, а требование "заменить стандартную из GCC тулчейна" вовсе не намекает на то, что новая библиотека тоже должна быть открытой. 7 minutes ago, gazpar said: прим. для использования с GCC тулчейном Ну и предлагаю писать без сокращений. Вот это "прим." что значит? Применительно? Примечание? Прима? У нас же не печатные машинки на дворе... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gazpar 1 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба On 11/29/2022 at 2:50 PM, haker_fox said: Тогда сформулируйте конкретные требования. Иначе в ответах будет много вопросов и флейма. Ибо критерии "хорошая/лёгкая/надёжная" - требования ни о чём не говорят и будут интерпретироваться каждым участником форума в меру своего опыта. Ну и нумерованный список вопросов в первом посте выглядит как опция, а требование "заменить стандартную из GCC тулчейна" вовсе не намекает на то, что новая библиотека тоже должна быть открытой. Ну и предлагаю писать без сокращений. Вот это "прим." что значит? Применительно? Примечание? Прима? У нас же не печатные машинки на дворе... Указано же, что GPL/MIT. И в вопросе : "... чтобы можно было заменить стандартную из GCC тулчейна. " Внимательно прочитайте просто, и всё встанет на свои места. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба Что вы понимаете под размером библиотеки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 1 hour ago, gazpar said: Внимательно прочитайте просто, и всё встанет на свои места. Модератор: уточните критерии. Они непонятны. Вам пользователи пока задают вопросы. Потрудитесь написать всю необходимую информацию в числах, определите критерии "надёжности", например. Приведите сферу применения Вашего кода. Иначе тема будет направляться в сторону флейма, или, что хуже - оффтопика. В противном случае, выпишу предупреждение. Пока предупреждаю только устно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gazpar 1 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба On 11/29/2022 at 4:13 PM, haker_fox said: Модератор: уточните критерии. Они непонятны. Вам пользователи пока задают вопросы. Потрудитесь написать всю необходимую информацию в числах, определите критерии "надёжности", например. Приведите сферу применения Вашего кода. Иначе тема будет направляться в сторону флейма, или, что хуже - оффтопика. В противном случае, выпишу предупреждение. Пока предупреждаю только устно. Поправил On 11/29/2022 at 3:47 PM, VladislavS said: Что вы понимаете под размером библиотеки? Собраный размер библиотеки. К примеру, у меня собраный pico либ имеет вес примерно 14МБ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба Требования опишите, пожалуйста. Потому что эмбеддед нынче - от атмеги и младших STM (тогда -fno-exceptions -specs=nano.specs ) до Qt (хех, Qt тоже без exceptions работает). И мерять исходный размер файла библиотеки, который потом урежется в 20 раз линкером, занятие странное... Чисто для затравки. Можете погуглить "embedded standard template library". Но как по мне, какая-то странная штука. Современная STL удобнее, безопаснее (в том смысле, что лучше протестирована). При наличии ограничений на использование динамической памяти в ней достаточно примитивов, которые работают без new/delete. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба Под какую архитектуру хоть? И, хоть убейте, не понимаю постановку задачи. Какая разница сколько занимает собранная библиотека? В прошивку будет включено только то что используется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gazpar 1 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 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++ я не использую. Простые шаблоны, удобные структуры и классы и т.п. Т.е. обычный "Си с классами". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 21 минуту назад, gazpar сказал: А это черезчур много для имплементированого функционала. Какой функционал из стандартной библиотеки у вас используется? Ну чтобы понять масштаб проблемы. Я вот только вчера к AVR-GCC прикрутил Libstdc++ версии 20201103. Использую по полной C++20 type_traits, concepts и т.д. Ни одного лишнего байте в прошивку не попало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 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. Но по опыту знаю, что неверная конфигурация инструментария может привести к разбуханию кода. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 35 минут назад, gazpar сказал: размер бинаря получается 350кБ. 350кБ - это ещё постараться нужно, чтобы столько нашкодить! Разве что какие-то данные включены туда (типа картинок). Но при чём тогда "библиотеки"? Вообще непонятно... 9 минут назад, haker_fox сказал: У нас на работе при использовании и более серьёзного функционала, который я лично не приветствую (std::map, std:;string, std::vector) всё укладывается в 64 кБайта. Ото-ж! Чё-то темнит ТС... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться