Микроконтроллеры на C или C++ [дубликат]

Возможные Дубликаты:
есть ли причина использовать C вместо C++ для встроенной разработки?

Мне очень интересно: почему, когда мы имеем дело с микроконтроллерами, они предпочитают C вместо c++? Основываясь на моих исследованиях, C и Assembly language-это обычный язык программирования для этих устройств. Я знаю только C++ и ассемблере. Поэтому в этом случае я должен начать изучать C или придерживаться сборки язык и если да, то какой компилятор я должен использовать, потому что я знаю только ассемблер Turbo.

спасибо и больше власти! :)

6 ответов


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

C++ как некоторые функции, требующие дополнительных ресурсов (например, OOP, exception и т. д.).

кроме того, микроконтроллер не имеет тех же функций, что и процессор вашего компьютера. Он может, например, не поддерживать динамическую загрузку библиотеки и даже для статических библиотек вы ограничены в размере, поскольку ваш чип не имеет много память.

обычно микроконтроллеры предоставляют специальную библиотеку ввода / вывода, а stdlib не всегда доступен.

вам нужен кросс-компилятор для вашего микроконтроллера. Затем вы можете написать свою программу на C и ASM.

Если чип поддерживает его, вы можете повторно скомпилировать stdlib для использования стандартных функций C, а затем вы можете в конечном итоге (еще раз, если чип имеет достаточно ресурсов) построить кросс-компилятор C++, а затем STL. Тогда ты будет возможность построить программу на C++ на вашем чипе, но программа будет весить намного больше, чем оригинальная программа на C.


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

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


Это просто историческая случайность и практика (такими луддитами старого времени, как я), что ucontrollers "предпочитают" ASM и C. Если ваш компилятор может скомпилировать C++ в код ucontroller, нет теоретической причины, по которой я знаю, почему вы не должны использовать C++.

для меня гораздо проще и естественнее использовать ASM и C, но вы можете использовать то, что вы предпочитаете, пока ваш компилятор (и компоновщик, если вы его используете) может сделать правильную вещь; и ваш ucontroller имеет достаточно памяти для размещения (возможно, больше) скомпилированный код на C++.


микроконтроллеры-это блоки обработки с ограниченной памятью и пропускной способностью. Язык программирования C генерирует жесткий код, близкий к ассемблеру по размеру и скорости. C++ обычно несет накладные расходы в памяти и скорости. Другой проблемой является динамическое выделение памяти. Использование объектно-ориентированного дизайна с C++ обычно подразумевает динамическое создание и уничтожение объектов. Встроенные приложения, использующие микроконтроллеры, обычно выделяют всю необходимую память статически и не освобождается на время жизни приложения.

Это, как говорится, если вы используете 32-битный микроконтроллер, и ваше приложение достаточно сложно, что он обрабатывает либо много трафика данных или имеет значительный пользовательский интерфейс через сенсорный экран / ЖК-дисплей и т. д. В C++ (& иногда даже C# ) является языком выбора.

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

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


микроконтроллеры это небольшие устройства, которые не очень мощный по сравнению с компьютерами. У них ограниченные ресурсы. Во-первых, размер стека очень ограничен, поэтому не рекомендуется иметь много вложенных вызовов функций (на некоторых устройствах стек ограничен несколькими байтами). Во-вторых, часто не удается динамически выделить память (alloc, free...), и большинство данных программы должны быть глобальными статическими переменными или храниться в стеке, поэтому полезные классы, такие как std::vector не будет доступен.

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


Это просто доступность ресурсов, действительно, как объясняется другими плакатами. К тому времени, когда вы скомпилировали пару таблиц виртуальных методов и пару десятков указателей объектов, это все ОЗУ из простого uC!

тем не менее, я предпочитаю C++ на сегодняшних 32-битных контроллерах с 8K выше ОЗУ, большим количеством flash, сложными встроенными периферийными устройствами и многозадачными библиотеками. После десятилетий OO использование простого C кошмарно для чего-либо нетривиального.

I в настоящее время используйте NXP ARM chips & Rowley Crossworks (IDE, использует gcc). Я использую только C для интерфейсов lib и ассемблера для некоторых драйверов, все остальное-C++.