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

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

42 minutes ago, gazpar said:

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

Для начала понять бы, что именно у вас там такое большое.

По опыту - всякие "излишние" фичи стандартной библиотеки занимают десяток кБ, не больше.

Я пользовался этим рецептом: 

(что-то не могу найти его где-нибудь на гитхабе...) 

 

Но, повторюсь, магической экономии сотни килобайт он не даст, надо разбираться, что вы такое сделали. У меня прошивки в 300 килобайт ни разу не получались. Хотя не один год старался, писал 🙂

 

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


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

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

 

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

Именно поэтому и хочу найти лёгкую либу. Т.к. я не знаю, чего там наворотили коллеги(высокоуровневые программисты). Мне же нужно оптимизировать внутреннюю либу сделанную коллегами. Ключами компиляции/линковки удалось ужать до 350кБ. Изначально она сжирала 1.2МБ.

On 11/29/2022 at 6:51 PM, haker_fox said:

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

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

Cortex-M4

On 11/29/2022 at 6:58 PM, jcxz said:

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

Ото-ж!  :good:

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

Вы о чём вообще? Темнит... Запрос у меня на легковесную либу, а не на сбор анамнеза.

On 11/29/2022 at 7:10 PM, esaulenka said:

Для начала понять бы, что именно у вас там такое большое.

По опыту - всякие "излишние" фичи стандартной библиотеки занимают десяток кБ, не больше.

Я пользовался этим рецептом: 

(что-то не могу найти его где-нибудь на гитхабе...) 

 

Но, повторюсь, магической экономии сотни килобайт он не даст, надо разбираться, что вы такое сделали. У меня прошивки в 300 килобайт ни разу не получались. Хотя не один год старался, писал 🙂

 

Благодарю за ссылку, почитаю.

 

Пример. Со включёнными RTTI и exceptions размер толстеет в 2 раза. Т.е. с 350кБ до 700кБ.

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


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

7 minutes ago, gazpar said:

не сбор анамнеза

Ну вот и получили гадание на кофейной гуще...

Попробуйте лучше погадать на map-файле, там хоть будет видно, что сколько занимает.

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


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

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

Именно поэтому и хочу найти лёгкую либу

Да не бывает лёгких и тяжёлых стандартных библиотек. Все они плюс/минус одинаковые, так как реализуют одинаковый функционал, заданный стандартом языка программирования.

 

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

Т.к. я не знаю, чего там наворотили коллеги

Ну посмотрите map-файл хотя бы, что там весит столько. 

 

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

Мне же нужно оптимизировать внутреннюю либу сделанную коллегами.

Вот они обрадуются когда какой-нибудь класс перестанет работать из-за вашей "оптимизации". И почему вместо этого вы решили стандартную библиотеку оптимизировать? Её явно не дураки писали - там всё в порядке. Пусть ваши коллеги свой код и оптимизируют. 

 

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

Ключами компиляции/линковки удалось ужать до 350кБ.

Можно глянуть на ключи? Похоже?

CPP_FLAGS := -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -Wall

LD_FLAGS := -Wl,--gc-sections -nostartfiles -specs=nano.specs -specs=nosys.specs

 

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


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

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

Вы о чём вообще? Темнит... Запрос у меня на легковесную либу, а не на сбор анамнеза.

О содержимом "либы". Что за либа? Что она делает? Предлагаете играть в угадайку?

"Темните", потому что мне сложно представить - какой именно КОД требует столько места??? С данными понятно, но вы же утверждаете, что там именно код.

Да, конечно, можно наверное в свойствах оптимизатора включить какой-нить unrolling циклов, так что они распухнут в линейные простыни. Но такое можно сделать, имхо, только преднамеренно...

13 минут назад, VladislavS сказал:

Вот они обрадуются когда какой-нибудь класс перестанет работать из-за вашей "оптимизации".

Вангую, что один из "высокоуровневых программистов" ТС запилил туда фотку своего любимого кота. От того и 1.2МБ образовалось...  :biggrin:

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


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

Это точно. 350к кода это год писать не разгибаясь 🙂 Хотя, с дуру и хрен сломать можно.

Вот, например, реализация USB-CDC c "C++ на максималке". 2340 байт, из которых только таблица векторов прерываний 400 байт.

image.thumb.png.d55fdb378895b01bd0b84f86746a1c19.png

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


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

On 11/29/2022 at 7:53 PM, esaulenka said:

Ну вот и получили гадание на кофейной гуще...

Попробуйте лучше погадать на map-файле, там хоть будет видно, что сколько занимает.

Вот и удивляюсь. Вопрошание было на либу, которой можно заменить. В ответ же только вопросы: "зачем оно надо?"

Уже гадаю. Но всё равно спасибо!

On 11/29/2022 at 7:55 PM, VladislavS said:

Да не бывает лёгких и тяжёлых стандартных библиотек. Все они плюс/минус одинаковые, так как реализуют одинаковый функционал, заданный стандартом языка программирования.

Бывают. В начале темы x893 сказал, что их вообще тьма тьмущая. Только вот у меня их найти как-то не выходит особо.

Quote

Вот они обрадуются когда какой-нибудь класс перестанет работать из-за вашей "оптимизации". И почему вместо этого вы решили стандартную библиотеку оптимизировать? Её явно не дураки писали - там всё в порядке. Пусть ваши коллеги свой код и оптимизируют. 

На то и расчёт. Начнут применять стрикции, чтобы войти в доступное подмножество.

Quote

Можно глянуть на ключи? Похоже?

CPP_FLAGS := -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -Wall

LD_FLAGS := -Wl,--gc-sections -nostartfiles -specs=nano.specs -specs=nosys.specs 

Да, подобные ключи.

On 11/29/2022 at 8:05 PM, jcxz said:

О содержимом "либы". Что за либа? Что она делает? Предлагаете играть в угадайку?

"Темните", потому что мне сложно представить - какой именно КОД требует столько места??? С данными понятно, но вы же утверждаете, что там именно код.

Вангую, что один из "высокоуровневых программистов" ТС запилил туда фотку своего любимого кота. От того и 1.2МБ образовалось...  :biggrin:

Если бы. Аллокаторы, строки, принты и прочие потроха. Но в стиле десктопной разработки.

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


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

Только что, gazpar сказал:

Вопрошание было на либу, которой можно заменить. В ответ же только вопросы: "зачем оно надо?"

Потому что глупо искать там где светлее, а не там где потерял.

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

Только вот у меня их найти как-то не выходит особо.

Ну я использую стандартные библиотеки идущие в комплекте с GCC, IAR и ARMClang. Ничем они не отличаются особо. Да и прибиты к тулчейну основательно так, не перенесёшь. Других вариантов не знаю. Да и не нужны они. Лучще разберитесь что в проекте пожирает ресурсы. 

 

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

Начнут применять стрикции, чтобы войти в доступное подмножество.

Лучше вместе сядьте и разберитесь какие тяжёлые вещи они применяют. А то может они и правда как на PC программируют и никакой библиотекой это не исправишь.

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


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

On 11/29/2022 at 8:26 PM, VladislavS said:

Потому что глупо искать там где светлее, а не там где потерял.

Глупо не глупо, зато радикально.

Quote

Лучше вместе сядьте и разберитесь какие тяжёлые вещи они применяют. А то может они и правда как на PC программируют и никакой библиотекой это не исправишь.

Это и есть прямой вариант. Долгий и нудный. Который уже применяется. А либа, с порезаным функционалом, сразу накидает им сообщений об ошибках.

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


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

Сообщение об ошибке это слишком просто. Надо так сломать, чтобы оно просто потихуши коварно не работало. И бежать. Раз по хорошему договориться не можете.

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


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

58 minutes ago, gazpar said:

Уже гадаю.

Выше Вам справедливо предложили посмотреть в map-файл. Посмотрели?

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


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

В общем, просьба модераторам,

 

Закрывайте тему пожалуйста. Ни одного совета либы на замену стандартной в GCC тулчейне за 2 страницы так и не посоветовали. Очень сомневаюсь, что кто-то что-то порекомендует.

 

Всем спасибо!

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


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

6 minutes ago, gazpar said:

Закрывайте тему пожалуйста.

Каждый пользователь, создавший тему, может закрыть её сам. Вверху есть кнопка "Опции модератора"/Moderation Actions. Там Вы можете самостоятельно закрыть тему.

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


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

1 час назад, gazpar сказал:

Если бы. Аллокаторы, строки, принты и прочие потроха. Но в стиле десктопной разработки.

А виновата, конечно, стандартная библиотека. Дурдом.

 

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


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

Удалось найти порезаную либу. В собраном виде 160кБ и abi 15кБ.

https://github.com/embeddedartistry/libcpp

Основана на clang'е, если правильно понял.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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