Bei eingebetteten Systemen mit 8- und 16-Bit-Mikrocontrollern ist es einfacher, Software zu entwickeln, die in die begrenzten Ressourcen dieser sehr bescheidenen Speicherbeschränkungen passt (möglicherweise einige 100 Byte RAM für 8-Bit-Mikrocontroller der unteren Preisklasse) , mit 2-8 KiB ROM oder EPROM / Flash zur Codespeicherung).
In diesen Fällen sind kleine Sprachen wie C oder Assembler die am häufigsten verwendeten Entwicklungssprachen. Als sehr grober relativer Vergleich können ein vollständiger Assembler und ein C99-Compiler auf eine einzige Diskette passen, während Sie für ein modernes C ++ - Entwicklungssystem (mit STL usw.) mehrere MiB benötigen .
Wenn Sie sich mit High-End-Mikros (High-End-16-Bit und meistens 32-Bit, mit ziemlich seltenen 64-Bit) und DSP in eingebetteten Umgebungen beschäftigen, werden die Einschränkungen schwächer, und die Softwareentwicklung macht möglicherweise den größten Teil der Entwicklung aus Daher ist es sinnvoll, die produktivsten Entwicklungstools zu verwenden, einschließlich erweiterter Sprachen mit Funktionen wie objektorientierter Programmierung (OOP) wie C ++ und neueren Sprachen (Java, Perl, Ruby, Python).
In Assembly und C kann vorhergesagt werden, wie viel Speicher verwendet wird, sodass ein Design mit beschränktem Speicherplatz möglich ist. Erweiterte Funktionen wie Vorlagen, Ausnahmebehandlung und Laufzeitbindung machen es jedoch unmöglich, den erforderlichen Speicherbedarf genau zu kennen für ein Standard-C ++ - Programm im Voraus. Ich weiß nicht genug über MISRA C ++ , das eine Teilmenge von C ++ ist, um es zu kommentieren.
Sprachen, die auf virtuellen Maschinen basieren, auf denen Bytecode ausgeführt wird (Java, Perl, Python), sind in der Erfahrung des eingebetteten Entwicklers weniger ausgereift, und da diese Sprachen so konzipiert sind, dass sie den Programmierer von der jeweiligen Hardware isolieren, wird es auch schwieriger, sich dessen bewusst zu sein Beschränkungen und Einschränkungen eines solchen eingebetteten Hardwaresystems. Dies ist bei schnellen 32-Bit-Prozessoren (z. B. ARMv7) mit MiB weniger ein Problem, wenn nicht GiB RAM.
Alle mir bekannten BASIC-Implementierungen sind in den Sprachfeatures recht simpel und bleiben weitgehend dem Erbe von Dartmouth BASIC aus den 1960er-Jahren treu. Dies bedeutet, dass die Sprache keine komplexen Laufzeitbibliotheken oder Ausnahmebehandlungen hat und ein Interpreter oder Compiler ziemlich einfach zu schreiben ist und auch eine geringe Dateigröße hat. Für die meisten Mikrocontroller steht mindestens ein BASIC-Compiler zur Verfügung.
Ich hoffe, dass in groben Zügen die Gründe aufgeführt sind, warum C und Assembly hauptsächlich auf kleineren oder älteren eingebetteten Systemen verwendet werden und sich mit den Einschränkungen neuerer eingebetteter Mid- bis High-End-Systeme nur geringfügig von einem herkömmlichen Desktop-Personalcomputer unterscheiden.