Подходит ли C ++ для крошечных встроенных целей?

В настоящее время мы занимаемся модернизацией нашего встроенного программного обеспечения и переходим с 8-битных на 32-битные микроконтроллеры Cortex-M. Память довольно ограничена (128 КБ Flash и 32 КБ RAM).
В другая нить библиотека встроенного программного обеспечения (www.redblocks.de) было рекомендовано. Кажется, он очень хорошо отвечает моим потребностям, но требует использования C ++.
У кого-нибудь есть опыт работы с C ++ на встраиваемых платформах, подобных нашей? Мне интересно, с какими накладными расходами я имею дело, по сравнению с С.

3

Решение

В зависимости от того, какие функции C ++ вы используете, накладные расходы практически отсутствуют, по сравнению с C.

Вот некоторые особенности по сравнению:

  • Использование классов без виртуальных методов приводит к тому же двоичному коду
    как функции C, работающие над структурой данных, которая передается как
    указатель
  • Когда используются классы с виртуальными методами, vptr добавляется в раздел данных объекта, а vtable вводится в сегмент текстовой памяти. Подобная функциональность может быть реализована в C с помощью указателей на функции (которые также занимают память). Как только у вас есть более одного виртуального метода в классе, вы обычно получаете более эффективный двоичный код при использовании C ++ вместо того, чтобы вручную вводить несколько указателей на функции для объекта с C.
  • Эффективность обработки исключений отличается от компилятора к компилятору.
  • RTTI добавляет накладные расходы и не должен использоваться на крошечных встроенных целях.
  • Следует избегать недетерминированного использования динамической памяти (malloc / free в C и new / delete в C ++) с обоими языками программирования на платформах без управления виртуальной памятью.
  • Шаблоны имеют много общего с макросами препроцессора C, поскольку они оцениваются во время компиляции и являются своего рода генерацией исходного кода во время компиляции. Таким образом, они не добавляют никаких накладных расходов во время выполнения. Однако использование их неумышленно приведет к раздутому коду. При использовании в нужных местах они могут даже помочь сократить накладные расходы времени выполнения.

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

Однако, если вы хотите получить чистый и многократно используемый объектно-ориентированный дизайн, C ++, безусловно, является лучшим выбором, чем C.

6

Другие решения

Я сам не являюсь разработчиком встраиваемых систем, но у меня есть несколько коллег, использующих c ++ для микроконтроллеров, на которые вы ориентируетесь.

Язык сам по себе не добавляет много накладных расходов, но использование стандартной библиотеки (контейнеры, алгоритмы …) не рекомендуется, если вы ограничены во Flash / RAM.

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

Больше информации о Эта бумага или на эта страница.

Книга Эффективный C ++ во встроенной среде Форма Скотта Мейерса также является очень хорошим источником информации.

2

По вопросам рекламы [email protected]