C++ в [закрытом] программировании встроенного программного обеспечения

5
задан jschmier 19 March 2010 в 04:45
поделиться

5 ответов

Вы спрашиваете об обычном C++ или встроенном C++? Насколько я понимаю, встроенный C++ практически мертв. Вы можете программировать на C++, но, в зависимости от ваших требований, могут быть некоторые конструкции, которые вы захотите избежать использования. Например, если у вас мало места, вы можете захотеть избегать шаблонов, насколько это возможно (или явно инстанцировать шаблоны), чтобы свести инстанцирование шаблонов к минимуму. Возможно, вы также захотите избегать исключений или RTTI, чтобы уменьшить количество генерируемой информации о типе (для экономии места), а также чтобы избежать необходимости иметь дело с безопасностью исключений (чтобы свести потенциальные подводные камни к минимуму) и высокой стоимостью распространения исключений (чтобы сократить самый длинный путь выполнения, для систем реального времени). Виртуальные функции должны быть в порядке (они не вносят много накладных расходов), но если у вас очень строгие требования, вам, возможно, придется ограничить их использование. Если вы используете исключения, вы также должны быть уверены, что компилятор поддерживает их (так как многие кросс-компиляторы для встраиваемых систем не поддерживают их).

4
ответ дан 13 December 2019 в 19:24
поделиться

Перенос большого программного обеспечения может вызвать проблемы. У меня есть опыт программирования 8-битного микроконтроллера motorolla с помощью gcc c ++, но в моем случае я начал с нуля, так что это было проще. У меня было несколько проблем, с которыми я столкнулся, например, использование деструкторов остановило выполнение программы, и отсутствие заботы о стеке вызовов привело бы к его переполнению из-за других переменных программы ...

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

1
ответ дан 13 December 2019 в 19:24
поделиться

Когда я читал ваш вопрос, я был думал о традиционном встроенном программировании, пока не увидел Linux. C ++ можно использовать во встроенном программировании с оговорками о скрытых конструкторах и т. Д. Если вы используете Linux, я подозреваю, что вам не нужно беспокоиться об этом.

6
ответ дан 13 December 2019 в 19:24
поделиться

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

Большинство опасений, связанных с использованием C++ во встраиваемых системах, связано с размером кода и производительностью; многие из этих опасений основаны на мифах или гораздо менее значительны, чем вы можете подумать, но даже там, где они имеют некоторые основания, они меркнут по сравнению с накладными расходами при работе Linux и непригодностью ядра Linux для приложений, работающих в режиме реального времени и с низкой задержкой.

Я регулярно использую C++ во встраиваемых системах на базе систем без ОС и RTOS. Использование Linux оправдано, когда детерминированное поведение в реальном времени не требуется, но предоставляемая поддержка устройств, файловых систем и сетей полезна (хотя многое из этого достижимо другими способами), и ваша система наделена значительными ресурсами; но она всегда будет последней в моем списке выбора ОС для встраиваемой системы, если нет веских требований.

Если вы решите использовать uClinux на ARM без MMU (ARM7 или Cortex-M3, например), то вы потеряете существенную убедительную причину для использования Linux в первую очередь - процессы/ядро, защищенные MMU.

1
ответ дан 13 December 2019 в 19:24
поделиться

Есть ли серьезная проблема?

  • Это зависит от того, как вы программируете. Если вы обильно комментируете и хорошо организуете свой код, то нет - у вас не будет проблем.
  • Это зависит от возможностей отладки вашей среды разработки. Если им нелегко пользоваться, у вас возникнут проблемы с отслеживанием ошибок.

Если я не ошибаюсь, arm-uclibc - это компилятор C?

-1
ответ дан 13 December 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: