Naucz się C i zdobądź tanią płytę programistyczną mikrokontrolera, taką jak MSP430 lub ARM Cortex, i przynajmniej napisz i załaduj kilka programów C.
Mam wykształcenie informatyczne i doświadczenie w tworzeniu oprogramowania, głównie programowanie w C ++ do gier, a teraz gry i aplikacje na iOS, ale moją ostatnią pracą był półprofesjonalny koncert EE, który zaczął się od programowania oprogramowania dla systemu ARM Cortex M3 , a potem skończyłem ze mną, ucząc się, jak wykonać podstawowy projekt obwodu i układ płytki oraz zaprojektować kilka prostych kart. Zasadniczo musiałem więc zmierzyć się z problemem użycia najlepszego języka programowania do pomostu projektowania sprzętu / oprogramowania jako osoby odpowiedzialnej za oba jego końce.
C jest absolutnie językiem, który musisz znać. Jest to łatwe dla ludzi, którzy programują w C ++ i nigdy nie muszą ograniczać się do zestawu funkcji C, aby powiedzieć „to to samo”, ale tak nie jest. Zwłaszcza sposób, w jaki C ++ ewoluował i gromadził funkcje, oraz sposób, w jaki programiści C ++ używają tych funkcji, to naprawdę zupełnie inna rzecz, aby pracować na dość dużej aplikacji C, w przeciwieństwie do aplikacji C ++. Twój SDK oprogramowania układowego będzie zbiorem bibliotek C, wszystko inne, co zmieści się na MCU, będzie biblioteką C, każdy system operacyjny, który ma sens na MCU, zostanie napisany w C itp. Itd.
To powiedziawszy, ponieważ ponieważ wiele dostępnych tam zestawów narzędzi MCU używa GCC jako kompilatora, prawie na pewno będzie dostępny kompilator C ++, jeśli używasz porządnej rodziny MCU. Trzeba jednak bardzo uważać na używane funkcje, zwłaszcza ze standardowej biblioteki, ponieważ bardzo łatwo jest uzyskać plik binarny, który jest zbyt duży, aby zmieścił się na twoim urządzeniu. Wydaje mi się, że istnieje dobry powód do używania C ++ na urządzeniach wbudowanych, C ++ ma całkiem sporo fajnych funkcji, które mają śmieci lub nie mają rozmiaru lub ograniczenia prędkości, po prostu musisz wiedzieć, co robisz i pisać kod w odpowiedni sposób dalej na końcu spektrum w stylu C niż na końcu spektrum STL pod względem sprytnego wykorzystania funkcji.
Nie zwracaj zbytniej uwagi na ludzi, którzy twierdzą, że możesz używać Lua lub Pythona na MCU z odpowiednim osadzonym tłumaczem bla, bla. To prawda, zrobiłem to i jest fajnie, ale w tej chwili jest to więcej w przypadku projektów zabawek i rzeczy, które pojawiają się w Hack a Day. Myślę, że zobaczymy więcej tego rodzaju rzeczy, ponieważ prawo Moore'a jest bezwzględnie stosowane nawet do najmniejszych procesorów, coś takiego zdarzyło się w grach, w których było dużo montażu, a potem utrzymywały się z C i C ++ dłużej niż wszyscy inni, a teraz wszystko jest tak szybkie, a produktywność programistów jest tak ważna, że wiele prac rozwojowych odbywa się za pomocą wbudowanych języków wyższego poziomu lub bezpośrednio w języku wysokiego poziomu. Mimo to minie kilka lat, zanim firmy zatrudnią programistów oprogramowania układowego w środowiskach Python i Lua.
Nie spędzaj też zbyt wiele czasu na montażu. Znajomość pojęć nie jest zła, ale jest mało prawdopodobne, abyś robił dużo, jeśli w ogóle programował w asemblerze. Jest taka konwencjonalna mądrość z grami i osadzonymi, że jest to „dobrze wiedzieć” asembler, często powtarzany przez ludzi, którzy tak naprawdę nie pracują w tych dziedzinach. Ale w rzeczywistości jest bardzo mało prawdopodobne, aby napisać jakiś zestaw, w ogóle, a jeśli to zrobisz, prawdopodobnie będzie to tylko kilka wierszy do optymalizacji lub coś ze sprzętem, dla którego po prostu nie masz interfejsu API (ale będziesz po napisaniu jednego, który zawija kilka wierszy asemblera). Pracowałem nad kilkoma grami, nad tym projektem płyty / oprogramowania układowego, a łączna liczba linii montażowych, które napisałem dla projektów komercyjnych, jest prawdopodobnie niewielka. To'