W przypadku systemów wbudowanych opartych na 8 i 16-bitowych mikrokontrolerach sprowadza się to do łatwiejszego tworzenia oprogramowania, które może zmieścić się w ograniczonych zasobach tych bardzo skromnych ograniczeń pamięci (być może kilka 100 bajtów pamięci RAM dla 8-bitowych mikrokontrolerów z niższej półki) , z 2-8 KiB ROM lub EPROM / Flash do przechowywania kodu).
W takich przypadkach najczęściej używanymi językami programowania są małe języki, takie jak C lub asembler. Jako bardzo przybliżone porównanie względne, kompletny asembler i kompilator C99 mogą zmieścić się na pojedynczej dyskietce, podczas gdy potrzebujesz kilku MiB dla nowoczesnego systemu programistycznego C ++ (z STL itp.).
Jeśli patrzysz na zaawansowane mikrosfery (wysokiej klasy 16-bitowe, a głównie 32-bitowe, z dość rzadkimi 64-bitowymi) i DSP w środowiskach osadzonych, ograniczenia słabną, a rozwój oprogramowania może stanowić większość rozwoju wysiłku, dlatego warto korzystać z najbardziej produktywnych narzędzi programistycznych, w tym bardziej zaawansowanych języków z funkcjami, takimi jak języki programowania obiektowego (OOP), takie jak C ++ i nowsze języki (Java, Perl, Ruby, Python).
W asemblerze i C można przewidzieć, ile pamięci jest używane, dzięki czemu możliwe jest projektowanie z ograniczeniami przestrzennymi, ale zaawansowane funkcje, takie jak szablony, obsługa wyjątków i wiązanie w czasie wykonywania uniemożliwiają dokładne poznanie niezbędnego zajętości pamięci dla standardowego programu C ++ z góry. Nie wiem wystarczająco dużo o MISRA C ++ , która jest podzbiorem C ++, aby komentować.
Języki oparte na maszynach wirtualnych z uruchomionym kodem bajtowym (Java, Perl, Python) są mniej dojrzałe w doświadczeniu wbudowanego programisty, a ponieważ języki te zostały zaprojektowane tak, aby izolować programistę od konkretnego sprzętu, utrudnia to również sumienie takie ograniczenia i ograniczenia wbudowanego systemu sprzętowego. Jest to mniejszy problem w przypadku szybkich 32-bitowych procesorów (np. ARMv7) z MiB, jeśli nie GiB RAM.
Wszystkie implementacje BASIC, o których wiem, są dość uproszczone pod względem funkcji językowych, pozostając w dużej mierze zgodne ze spuścizną Dartmouth BASIC z lat 60. Oznacza to, że język nie ma żadnych skomplikowanych bibliotek wykonawczych ani obsługi wyjątków, a interpreter lub kompilator jest dość prosty do napisania i ma również niewielki rozmiar pliku. Większość mikrokontrolerów ma do dyspozycji co najmniej jeden kompilator BASIC.
Mam nadzieję, że ogólne objaśnienia przedstawiają powody, dla których C i asembler są używane głównie w mniejszych lub starszych systemach wbudowanych, a przy ograniczeniach nowszych średnio-zaawansowanych systemów wbudowanych różnią się tylko nieznacznie od tradycyjnego komputera stacjonarnego.