Благодаря встроенным системам на основе 8- и 16-разрядных микроконтроллеров становится проще разрабатывать программное обеспечение, которое может вписаться в ограниченные ресурсы этих очень скромных ограничений хранилища (возможно, несколько 100 байт ОЗУ для низкоуровневых 8-разрядных микроконтроллеров , с 2-8 КБ ROM или EPROM / Flash для хранения кода).
В этих случаях небольшие языки, такие как C или ассемблер, как правило, являются наиболее часто используемыми языками разработки. В качестве очень грубого относительного сравнения, полный ассемблер и компилятор C99 могут поместиться на одну дискету, в то время как для современной системы разработки C ++ (с STL и т. Д.) Вам понадобится несколько MiB .
Когда вы смотрите на высокопроизводительные микросхемы (высококлассные 16-битные, и в основном 32-битные, с довольно редкими 64-битными) и DSP во встроенных средах, тогда ограничения ослабляются, и разработка программного обеспечения может составлять основную часть разработки усилия, поэтому имеет смысл использовать самые продуктивные инструменты разработки, включая более продвинутые языки с такими функциями, как языки объектно-ориентированного программирования (ООП), такие как C ++, и более новые языки (Java, Perl, Ruby, Python).
В ассемблере и C можно предсказать, сколько памяти будет использоваться, так что проект с ограниченным пространством возможен, но расширенные функции, такие как шаблоны, обработка исключений и привязка во время выполнения, не позволяют точно знать необходимый объем памяти. заранее для стандартной программы на С ++. Я недостаточно знаю о MISRA C ++ , который является подмножеством C ++, чтобы комментировать его.
Языки, основанные на виртуальных машинах, на которых выполняется байт-код (Java, Perl, Python), являются менее зрелыми в опыте разработчиков встраиваемых систем, и поскольку эти языки предназначены для изоляции программиста от конкретного оборудования, это также усложняет понимание совести. такие встроенные аппаратные ограничения системы и ограничения. Это не проблема для быстрых 32-битных процессоров (например, ARMv7) с MiB, если не GiB RAM.
Все известные мне реализации BASIC довольно упрощены по языковым возможностям, оставаясь в значительной степени верными наследию Dartmouth BASIC 1960-х годов. Это означает, что язык не имеет каких-либо сложных библиотек времени выполнения или обработки исключений, а интерпретатор или компилятор довольно прост в написании и также имеет небольшой размер файла. Большинство микроконтроллеров имеют по крайней мере один базовый компилятор для него.
Я надеюсь, что в общих чертах излагаются причины, по которым вы обнаружите, что C и сборка в основном используются в небольших или старых встроенных системах, а ограничения новых встроенных систем среднего и высокого класса отличаются незначительно от традиционного настольного персонального компьютера.