Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

Использование c++ в микроконтроллерах

#cpp #avr_gcc #микроконтроллеры


Подскажите пожалуйста, можно ли использовать C++ для программирования микроконтроллеров? 
Есть ли при этом какие либо ограничения для языка C++?    


Ответы

Ответ 1



использовать часто можно, но нужно смотреть на конкретную реализацию. К примеру, может не быть исключений. С другой стороны, с++ приносит определенный оверхед, а на микроконтроллерах часто бывает важный каждый байт, это не java c большими серверами, где можно докупить планку-другую. Но микроконтроллеры не стоят на месте и развиваются, как собственно и компиляторы. Возможно, для Вашего контроллера и Вашего случае С++ - лучший вариант.

Ответ 2



На самом деле никаких ограничений нет, просто нужен правильный скрипт линковщика с соответствующими секциями для поддержки исключений и виртуальных методов, а так-же релизация аллокаторов/деаллокаторов и STL (конечно это роскошь?). Найти какой скрипт в сети не сложно...

Ответ 3



C++ не только можно, но и нужно использовать для программирования микроконтроллеров. Как тут писалось, никаких исключений и операторов new. Для отмены исключений есть даже флаг компилятора, специально для нас. Чем С++ лучше си: Строгая типизация. Если что-то не так, получите ошибку при компиляции, а не поиск её в отладке. Наглядный пример, если в функцию передаётся тип перечисления, а вы в си вписали что-то не то (int, к примеру), то в си вы пройдёте компиляцию, в C++ получите ошибку компиляции. Ссылки. Философия С++: "не плати за то, что тебе не нужно". Ссылки не занимают место в памяти, код с ссылками смотрится аккуратнее, чем код с указателями. Всегда можно забыть поставить * или &. Классы (структуры). Банально удобно описывать не только саму структуру, но и действия с ней. Каждый регистр можно обернуть в классовую обёртку с методами, которые своим названием указывают, что вы делаете. Если код необходимо много комментировать, то это плохой код. Объекты. В функцию (класс, метод класса) можно передать ссылку на объект вывода микроконтроллера, а не писать кучу дефайнов всех регистров (легко ошибиться, много исправлять, особенно для всяких stm32). Шаблоны. Забудьте про многострочные макросы, ошибки в которых отладить крайне сложно, дебагер в них просто не войдёт. Шаблоны куда лучше препроцессора. Оверхеда нет. Это распространённый миф. Грамотный код, написанный на с++ даёт меньший объём бинарников, натыкался на исследования, даже ролики с конференций есть на ютьюбе. (полагаю всему виной ссылки вместо указателей и оптимизация шаблонов).

Ответ 4



Посмотрите на язык Wiring, используемый в Arduino. Это C++ без стандартной библиотеки и исключений, со своей специальной библиотекой. Компилируется он, кстати, упомянутым у вас в тегах avr-gcc.

Комментариев нет:

Отправить комментарий