Atilla
@Atilla

Использование C++ в Keil?

Вопрос тем, кто занимается программированием микроконтроллеров stm32.


Так вышло, что мне писать программу на C++ под микроконтроллеры удобнее, чем на C. Но судя по примерам других людей, кто программирует stm32, C++, мягко говоря, не в почёте. Хотя возможность программировать на нём есть (по крайней мере в Keil).


Соответственно у меня вопрос — C++ хуже по производительности, по сравнению с C? Код получается больше? Код получается не оптимальный?


Почему все стараются придерживаться C?
  • Вопрос задан
  • 14469 просмотров
Пригласить эксперта
Ответы на вопрос 2
@megalol
1. Сишные библиотеки, как правило, констистентны. Взяв библиотеку на С++, не понятно, что там внутри будет — шаблонная магия или С++ образца 98 года. В проекте может не быть поддержки исключений, а библиотека их будет активно использовать. И так далее. То есть даже выбрав С++, намного проще использовать сишные библиотеки. А там и до чистой сишки недалеко.
2. Выше требования к скиллу программистов. Например, пресловутые виртуальные методы дают оверхед, а шаблоны — нет, но это же всем нужно объяснять, как писать на С++ с меньшим оверхедом, чем на С.

В целом, для железа я больше люблю С++ без фанатизма, с библиотеками, имеющими чисто сишный интерфейс.
Ответ написан
Комментировать
@irtos
потому, что Си — это классика жанра, а почему многие любят классику вопрос риторический, кто-то не любит модных тенденций, кто-то лениться просто ну и так далее… А если говорить о технической стороне дела, то уже написано что есть
а) накладные расходы
б)не ясно или нет уверенности что эти накладные расходы окупят своё сущестование, то есть какие-то фишки С++ уместны, а какие-то «дороги» для контроллера или задачи. RTTI например тежеловат
г) если работает команда, то есть вероятность что, кто-то захочет попробывать все эти новые плюшки, то есть открывается яшик пандорры, оказывается например, что RTTI съел половину памяти МК.
д) если в Си явно было чётко видно что вот тут вызывается функция INIT(), то в С++ этого явно не видно что вызывается конструктор, да видно что есть оператор new, но что там в этом конструкторе сложного объекта понапихано — нужно смотреть, а при просмотре ввидишь что вызывается конструктор предка и конструкторы членов класса. То есть Си он более ассемблерный, за каждой инструкцией более проще увидеть во что это выливается на ассемблерном уровне.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы