Jestem studentem elektroniki i inżynierii komunikacji, zanim dostałem się na studia, interesowałem się programowaniem i aplikacjami komputerowymi. Skoncentrowałem się na projektowaniu aplikacji Windows i nauce ich technik, ale teraz czuję, że jest to bezużyteczne w mojej dziedzinie ... Nie muszę się uczyć wszystkiego o informatyce i programowaniu! (Czy mam rację?)
Znam VB .Net, C # i C ++. Mam dużo czasu na wakacjach, więc chcę zagłębić się głębiej programowo w „dziedzinie elektroniki”. Na czym więc poleciłbyś się uczyć lub na czym się skupić?
Chcę, aby te języki były używane do programowania mikrokontrolerów i innych układów scalonych. Czy C ++ wystarcza, czy też powinienem opanować C? Powiedz mi, proszę, co myślisz.
microcontroller
programming
c
c++
Siraj Muhammad
źródło
źródło
Odpowiedzi:
Tak, prawie na pewno dobrym posunięciem jest nauczenie się korzystania z C tak dobrze, jak to możliwe (C ++ da ci pomocny punkt wyjścia, chociaż jako uwagi po lewej stronie nadal będzie wiele do zrobienia , zwłaszcza różnice między kodowaniem dla małych systemów osadzonych w porównaniu do pisania dla czegoś takiego jak Windows), biorąc pod uwagę jego wszechobecność.
Większość mikrokontrolerów poniżej określonego rozmiaru (np. PIC, AVR, MSP430 itp.) Używa C (lub asemblera), ponieważ istnieje wiele wysokiej jakości wersji (darmowa i $$ - np. Wiele komercyjnych kompilatorów opartych na darmowym kompilatorze GCC) Dostępne są kompilatory C .
Dostajesz inne języki, takie jak doskonały JAL dla PIC (oryginalny autor Wouter Van Ooijen, który jest tutaj członkiem), PICBASIC, warianty Ada, ale ze względu na popularność i liczbę dostępnych kompilatorów powiedziałbym, że C jest językiem wyboru dla większości. Chociaż z pewnością nie oznacza to, że jest to najlepszy język, korzystanie z najpopularniejszego języka ma oczywiste zalety (dokumentacja, wsparcie, przenośność, współpraca itp.)
W przypadku bardziej złożonych i większych 32-bitowych mikr, takich jak wiele wariantów ARM, istnieją również Dostępne C ++ i inne kompilatory.
Wskoczyłbym od razu i wziął kilka płyt programistycznych i zacząłem kodować. Możesz wybrać 8-bitową mikroprocesor niskiej jakości, taki jak PIC16F (wiele zestawów startowych w Microchip Direct).
Środek 16-bitowej mikro, taki jak PIC24, a także pewnego rodzaju ARM linux C / C ++ / wbudowany - STM32F4 ARM Cortex M4 Discovery to bardzo tania płyta deweloperska, którą warto wziąć.
Po stronie programowalnego języka logiki i opisu sprzętu (HDL - duże dwa to Verilog i VHDL), może być również warte zdobycia płyty deweloperskiej FPGA lub CPLD od Diglent lub podobnej.
Jeśli nie chcesz czekać na płytę programistyczną, możesz pobrać MPLAB lub MPLABX i skorzystać z doskonałego symulatora, aby spróbować swoich sił w tworzeniu PIC. To samo dotyczy innych narzędzi, na przykład możesz pobrać Xilinx ISE Webpack za darmo i wypróbować HDL i programowalny układ logiczny.
źródło
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'
źródło
asm()
), ładnie osadzone w kodzie C. To zwycięska kombinacja pod każdym względem. Wysoki poziom, ale kompaktowy z okazjonalnymi spadkami w montażu, gdy na przykład czas musi być odpowiedni.avr-gcc
Toolchain już robi to wiele z makrami C, więc nigdy zawiadomienie.Zgadzam się ze wszystkimi, że musisz być bardzo kompetentny w C.
Polecam również naukę co najmniej jednego języka asemblera. Dzięki temu będziesz znacznie lepszym programistą C. Musisz wiedzieć, co dzieje się pod maską, a jest to o wiele bardziej prawdziwe w świecie osadzonym niż w świecie komputerów.
Zrozumienie asemblera generowanego przez C pozwoli Ci pisać bardziej optymalne C pod względem szybkości i zwartości. Szybszy kod oznacza:
Bardziej kompaktowy kod oznacza, że możesz używać tańszego MCU z mniejszą pamięcią. Lub mieć miejsce na więcej funkcji.
Innym językiem, który możesz rozważyć nauce, jest Verilog . Jest to język opisu sprzętu, który naprawdę różni się od języka C nie tylko wyglądem, ale także funkcjonalnością. Verilog otworzy drogę do korzystania z bardzo potężnych układów, takich jak Cypress PSoC3 i 5 . Jest to mikrokontroler z analogowym i cyfrowym programowalnym sprzętem, który pozwala robić niesamowite rzeczy, które są bardzo trudne w przypadku innych MCU. Będziesz także mógł zaprojektować układ FPGA .
źródło
Jako MSEE, który pracuje w branży obronnej od 8 lat, mogę powiedzieć, że zrozumienie, jak dobrze programować w LabVIEW (graficzny, ściśle wpisany język przepływu danych) oznacza, że nigdy nie zabraknie ci pracy.
LabVIEW powstał jako język programowania dla inżynierów sprzętu, widać to po tym, że kod wygląda bardzo podobnie do schematu obwodu. Jednak w ciągu ostatnich 25 lat LabVIEW stał się pełnoprawnym, bogatym w funkcje językiem z obsługą Object Orientation i wielowątkowością. W rzeczywistości argumentowałbym, że nie ma innego języka programowania, opartego na tekście lub innym, który byłby łatwiejszy do zaprogramowania aplikacji wielowątkowej niż LabVIEW; jest to w dużej mierze spowodowane paradygmatem przepływu danych. W miarę wzrostu liczby rdzeni procesora LabVIEW będzie coraz bardziej odpowiedni jako język ogólnego przeznaczenia.
Kolejną korzyścią ze znajomości LabVIEW jest to, że jesteś o rzut kamieniem od programowania FPGA za pomocą modułu LabVIEW FPGA, który pobiera kod LabVIEW i konwertuje go do VHDL za kulisami, zanim przekaże go do kompilatora Xilinx. Możesz także wykorzystać swoje umiejętności LabVIEW, aby przejść do programowania kodu w czasie rzeczywistym za pośrednictwem modułu LabVIEW Real-Time, który używa VxWorks lub Phar Lap.
Uwaga: Jestem certyfikowanym programistą LabVIEW.
źródło
Jeśli chcesz programować mikrokontrolery na niskim poziomie, powinieneś czuć się komfortowo z programowaniem w języku montażowym (im więcej różnych architektur, tym lepiej), i tak, będziesz używać C dużo więcej niż używasz C ++.
Do ogólnych prac inżynieryjnych do modelowania i prototypowania będą powszechnie używane języki matematyczne, takie jak Matlab (również Scilab i GNU Octave).
Ponadto wiele IDE dla oprogramowania i sprzętu można skryptować, zwykle przy użyciu TCL lub LUA, więc przydatna byłaby znajomość języków skryptowych w ogóle (także Perl, Python, PHP, JavaScript itp.).
Do projektowania sprzętu będziesz potrzebować umiejętności Verilog i / lub VHDL.
źródło
Czy C ++ wystarczy? Może.
Pamiętaj, że C jest używany w około 90-99% wszystkich dostępnych mcu: s, więc C jest koniecznością w twoim CV.
Ale ponieważ jesteś facetem na wysokim poziomie, możesz zacząć grać z Arduino: s, ponieważ są one zaprogramowane w zmniejszonym C ++, a to dałoby przybliżone wyobrażenie o tym, co C ++ może teraz zrobić w świecie mcu.
źródło
W przypadku mikrokontrolerów (i zajmę się tylko mikrokontrolerami) uważam, że C jest znacznie lepszym językiem wejściowym niż C ++. Montaż byłby kolejnym krokiem, fantastycznym, aby pomóc Ci zrozumieć, w jaki sposób kompilator C Cię spieprzy, tworząc błędy, kradnąc tyknięcia zegara itp. Oraz wyciskając największą wydajność z Twojej platformy. Wszystko to przy założeniu, że mówisz o mikrokontrolerze - a nie o arduino, BASIC Stamp lub jakiejkolwiek innej platformie z zamkniętym mikrokontrolerem.
Trudno powiedzieć, co jest przydatne dla „twojej dziedziny” - i zasugerować, że jako student możesz naprawdę nie wiedzieć, czym jest twoja dziedzina !! - ale myślę, że twój zestaw językowy wydaje się całkiem rozsądny i będziesz go używać w kółko. Przynajmniej dobra znajomość jednego języka strukturalnego sprawia, że następny jest o wiele łatwiejszy, ale myślę, że zawsze znajdziesz umiejętności programowania w systemie Windows w kieszeni.
źródło
Możesz nauczyć się C i rodzaju kodu asemblera, który jest generowany przez instrukcje C, jeśli pracujesz z procesorami, ale powinieneś także nauczyć się, jak używać uniksowej powłoki wiersza poleceń, takiej jak bash, oraz związanych z nią narzędzi, takich jak sed, ed, awk, vim / vi, find, tar, gzip, ... a także Python, którego można używać na wielu platformach i jest dobrym sposobem na „załatwienie sprawy”.
źródło
Musisz nauczyć się języka C, jeśli chcesz być poważnym programistą osadzonym. Powinieneś także znać asemblera, nawet jeśli prawdopodobnie będziesz go bardzo rzadko używać.
źródło
Najpierw zdefiniuję inżyniera elektronika, aby miał na myśli osobę zajmującą się projektowaniem sprzętu, od oprogramowania układowego, poprzez projektowanie płytki i układy scalone. W niektórych przypadkach będziesz robić oprogramowanie układowe, jak wspomniano powyżej, potrzebujesz „C”. Głębsze oprogramowanie staje się po prostu narzędziem, zrozumienie niektórych pojęć z zakresu komplementarności języków od C / C ++ do języków podobnych do Lisp będzie ważniejsze niż specyfika. Będziesz potrzebował oprogramowania do wsparcia swoich wysiłków projektowych, ale to nie ma pierwszeństwa w zrozumieniu podstawowych ograniczeń tego, co można zrobić w fizycznej realizacji. Projekt cyfrowy NIE jest Verilog / VHDL, nawet jeśli projekt jest wyrażony w tych językach. W całkowicie niestandardowym i in-silico stylu zobaczysz języki podobne do Lisp i języki C - funkcjonalne.
źródło