Pytanie:
Rozwój wbudowany - kolejny krok
NickHalden
2011-06-30 23:52:20 UTC
view on stackexchange narkive permalink

Zacznę od tego, co wiem. Następnie powiem ci, że chcę dostać się do tej magicznej krainy wiedzy o rozwoju systemów wbudowanych. Następnie zapytam Cię, jakie powinny być moje następne kroki, aby się tam dostać. Ta odpowiedź jest dość pouczająca, ale staram się uzyskać trochę bardziej szczegółowe informacje:

Co wiem

Widzisz, jestem sprawiedliwy z C i C ++. Oczywiście chcę być lepszy z tymi językami, ale myślę, że w tym momencie najlepszym sposobem na poprawę jest ciągłe ich używanie i ciągłe doskonalenie kodu w trakcie jego pisania. Nie sądzę, by było korzystne poświęcanie jakichkolwiek ćwiczeń do nauki języka C.

W miarę dobrze radzę sobie z projektowaniem prostych obwodów. Widzę chip z wyjściem typu open collector i wiem, że potrzebuję podciągnięcia itp. Jestem dość przekonany, że biorąc pod uwagę układ scalony i jego arkusz danych, mogę albo dowiedzieć się, jak się z nim połączyć, albo przynajmniej zadać właściwe pytania wymyśl, jak to połączyć.

Jestem bardzo dobry z matematyki i logicznego myślenia. Istnieje kilka algorytmów / koncepcji projektowych, które rzucają mi pętlę. To zdecydowanie moja najmocniejsza strona.

Co zrobiłem

Do tej pory całe moje doświadczenie dotyczyło 8-bitowych mikrokontrolerów . Mój kurs w college'u wykorzystywał Motorola HC08, Intel 8051 i Zilog EZ8. Mój profesor zbudował małą tablicę deweloperską dla wszystkich trzech z 7-segmentowym wyświetlaczem i innymi rzeczami. Zaprogramowaliśmy je w asemblerze, więc jestem trochę zaznajomiony z montażem i ukończyłem podstawowy kurs architektury komputera, więc mam przyzwoite pojęcie o sprzęcie. Jednak pracowaliśmy w środowisku Windows i wszystkie 3 MCU miały swoje własne IDE i łańcuch narzędzi są już skonfigurowane, więc nigdy nie dowiedziałem się, jak mój kod przeszedł od montażu do uruchomienia na MCU.

Następnym krokiem była samodzielna nauka. Bardzo dobrze zapoznałem się ze środowiskiem Arduino, łącząc się z czujnikami / pamięciami / wyświetlaczami, które miały wstępnie napisane biblioteki, a niektóre nie. Następnie zbudowałem własną płytkę Arduino z ICSP i połączeniami z innym MCU, aby móc flashować bootloader na gołe ATmega328s. Jednak ponownie IDE i łańcuch narzędzi były już skonfigurowane i nigdy nie zrozumiałem, jak przeszedłem od C / Arduino do kodu działającego na MCU.

Co chcę wiedzieć

Tak więc z poprzednio połączonej odpowiedzi, myślę, że najbardziej interesującą / korzystną rzeczą dla mnie byłaby punktacja dotycząca uczenia się narzędzi (kompilatora i linkera) oraz uczenia się różnych stylów architektury oprogramowania ( przechodzenie od pętli sterowania opartych na przerwaniach do harmonogramów i systemów RTOS). Taka jest moja opinia na temat tego, co byłoby najbardziej przydatne ... ale ponieważ jeszcze tego nie wiem, trudno powiedzieć, czy to prawda, czy nie, więc możesz zasugerować inne punkty z tej odpowiedzi, jeśli uważasz, że byłyby lepsze i proszę wyjaśnić, dlaczego tak myślisz.


Biorąc moją obecną wiedzę jako punkt wyjścia i powyższy opis tego, co chcę wiedzieć jako cel, szukam bardzo szczegółowe sugestie, gdzie dalej. Szukam dokładnych propozycji projektów, stron internetowych / wpisów na blogu do przeczytania, rozdziałów w książkach itp.

Czy są też jakieś inne luki w mojej bazie wiedzy, które Twoim zdaniem powinienem wypełnić, zanim przejdę do wyżej wymienione tematy?

Dzięki

To bardzo otwarte i subiektywne pytanie, ale dobrze przemyślane i zaowocowało świetnymi odpowiedziami. Takie pytania powinny być CW.
@Kevin Vermeer Ach ok, jak mam to zrobić na przyszłość?
@JGord, musisz zgłosić, aby zwrócić uwagę moderatora. Tylko moderatorzy mogą tworzyć CW.
Dziewięć odpowiedzi:
Toby Jaffey
2011-07-01 00:05:51 UTC
view on stackexchange narkive permalink

Tak więc z poprzednio połączonej odpowiedzi myślę, że najbardziej interesującą / korzystną rzeczą dla mnie byłaby punktacja dotycząca uczenia się narzędzi (kompilatora i linkera) oraz uczenia się różnych stylów architektury oprogramowania (przechodzenie od sterowania opartego na przerwaniach pętle do harmonogramów i RTOS)

Przeniesienie małego systemu operacyjnego na nowe urządzenie może pomóc w zrozumieniu harmonogramów i systemów RTOS. FreeRTOS jest popularny i dobrze udokumentowany. eCos to kolejna.

Napisanie bootloadera to dobry sposób na uporanie się z linkerem, ponieważ będziesz chciał podzielić pamięć i flash na regiony.

Kolejną wskazówką jest wybranie zupełnie nowej architektury lub układu i zbudowanie własnej płytki programistycznej. Zmuszenie się do rozpoczęcia od samego początku i sprawdzenia wszystkiego w arkuszu danych to dobry sposób na naukę.

Przeglądaj Protwątki. Spróbuj napisać te same programy w stylu wątkowym i automatycznym. Kiedy skończysz z Protothreads, napisz prawdziwy harmonogram wątków.

Hej Joby, dziękuję za odpowiedź, ale tak naprawdę starałem się uniknąć takiej odpowiedzi. Wyszukuję w Google rzeczy takie jak „jak się uczyć RTOS” i nie ma po prostu żadnych przydatnych linków. Czy masz jakieś dobre przewodniki lub zasoby do nauki dotyczące wymienionych przez Ciebie rzeczy?
Jeśli naprawdę próbuje się tego nauczyć, RTOS na początku tylko zasłoni rzeczy. Zrobiłem ponad 100 projektów mikrokontrolerów i nie znalazłem jeszcze takiego, w którym RTOS byłby dobrą odpowiedzią. Kilka razy korzystałem z prostego, kooperacyjnego harmonogramu zadań, ale to o wiele mniej niż to, co większość ludzi uważa za RTOS. Moje programy do planowania zadań dla rodzin PIC 18 i dsPIC są dostępne bezpłatnie na mojej stronie internetowej.
@Olin, czy mógłbyś to rozwinąć? Czy masz na myśli, że powinienem zacząć uczyć się tworzenia wątków i planowania przed przejściem na RTOS?
@Olin W przypadku małych systemów preferuję współpracę wielozadaniową z zadaniami odpytywanymi. Jest deterministyczny i lekki, idealny do systemów z ograniczeniami. Wielozadaniowość prewencyjna z wątkami, choć bardzo potężna, może powodować koszmary związane z debugowaniem - z warunkami wyścigu i niepowtarzalnymi błędami. Daj mi maszynę stanu każdego dnia.
@JGord Najlepszą drogą do poprawy jest działanie. Proponuję zajęcia, które poprawią Twoje umiejętności, a nie podręcznik do nauki. Wydaje mi się, że często dopiero po pierwszym wdrożeniu odkrywam interesujące pytania.
@JGord: Nie, mówię, że pełny RTOS jest nieodpowiedni dla mikrokontrolerów, a najbardziej naprawdę potrzebujesz być kooperatywną zamianą zadań. RTOS jest czymś dla "dużych" systemów wbudowanych, którymi nie są mikrokontrolery. Istnieje wiele wbudowanych komputerów PC i tym podobnych, gdzie RTOS lub inne systemy operacyjne mają sens, ale nie znalazłem jeszcze takiego, który miałby sens w przypadku mikrokontrolera.
@Joby: OK, to nie było jasne z Twojej odpowiedzi. Brzmiało to tak, jakbyś był zwolennikiem niektórych systemów RTOS w tym przypadku.
Aby uzyskać informacje na temat systemu RTOS, zapoznaj się z książką Jeana Labrosse na temat jego RTOS: MicroC OS II Real Time Kernel. Ma wspaniały rozdział, w którym ogólnie omawia mechanizmy RTOS. Dzięki jego książce zyskujesz prawo do korzystania z jego RTOS.
old_timer
2011-07-01 08:59:09 UTC
view on stackexchange narkive permalink

Książka MicroC OS II jest prawdopodobnie czymś, w co warto zainwestować. Powinieneś także tworzyć projekty, aby nauczyć się różnych interfejsów i2c, spi, mdio itp. W szczególności, jak bitować każdy z nich. Od czasu do czasu sprzęt będzie obsługiwał magistralę (trzeba się tego nauczyć na podstawie dostawcy przez dostawcę), ale często z różnych powodów nie będziesz w stanie używać sprzętu i2c / spi i będziesz musiał bić.

Avr / arduino jest w porządku, powinieneś nauczyć się ARM, thumb i thumb2, a także msp430 i kilka starszych (nie-mips) pic. Spójrz na kod bootloadera dla arduino i dowiedz się, jak stworzyć program ładujący, wymazać z niego flash i przejąć kartę / chip. Zdobądź ramię mikro oparte na lpc, to samo spojrzenie na protokół programowania portu szeregowego. Kup sam7s lub coś z ramieniem7, które ma tradycyjny jtag, weź olimex wiggler lub jtag-tiny (polecam to drugie). Poczuj się komfortowo z openocd. SWD ARM jest bardziej bolesny niż normalny jtag, ale na tym rynku będzie dominował (dla produktów opartych na cortex-m). Krótko mówiąc, poznaj różne sposoby, które dostawcy oferują w programowaniu obwodów. Od czasu do czasu będziesz ceglał deski i będziesz chciał czuć się komfortowo przy ich rozbieraniu. Wzdłuż tych linii napisz kod do parsowania plików Intel hex, srec i elf, być może kiedyś będziesz musiał napisać program ładujący i będziesz musiał obsługiwać jeden lub więcej z tych popularnych formatów.

Wspomniałeś o narzędziach. Nie możesz się pomylić, ucząc się gcc i binutils, dowiedz się, jak kompilować krzyżowo, przynajmniej dla obsługiwanych platform (zwykle obejmuje na przykład --target = msp430 --prefix = / coś). Obsługiwane platformy dla mainline gcc i binutils to ruchomy cel, więc avrgcc, mspgcc i tym podobne są w zasadzie zrobione za Ciebie. Musisz nauczyć się pisać skrypty konsolidatora, jak pisać kod w C, aby na przykład stałe tabele pojawiały się w ROM, a nie w pamięci RAM. Poczuj się również przy demontażu plików binarnych, musisz upewnić się, że tabele są we właściwym miejscu, upewnić się, że kod jest tam, gdzie myślisz, że tabele wektorowe i kod rozruchowy / startowy są tam, gdzie procesor powinien być bagażnik. Również nie zaszkodzi dowiedzieć się, co robią optymalizacje kompilatora i jak wygląda kod C po skompilowaniu do asemblera / kodu maszynowego. jeśli to możliwe, nie ograniczaj się do gcc / gnu. llvm jest silnym graczem, ma potencjał do omijania gcc jako lepszego narzędzia. Być może używałeś już sdcc. wypróbuj wersje eval kiel, iar itp. Szybko przekonasz się, że w standardach C / C ++ jest dużo szarej strefy i każdy kompilator inaczej je interpretuje, także dramatyczne różnice w jakości kodu wytwarzanego z tej samej wysokości źródło poziomu. Jeśli pozostaniesz przy tym zawodzie, będą chwile, kiedy będziesz zmuszony użyć niezbyt dobrego kompilatora i obejść jego brodawki i słabości. W branży komputerów stacjonarnych często można uniknąć korzystania z narzędzi niezgodnych ze standardami. W świecie mikrokontrolerów czasami dostajesz to, co dostajesz i to wszystko. Czasami spotykasz dostawców, którzy modyfikują / ulepszają język C, aby dostosować go do swoich funkcji sprzętowych lub rzekomo ułatwić Ci życie (przychodzą na myśl króliki semi i xmos). (xmos to bardzo atrakcyjna platforma z wielu powodów, uważam ją za zaawansowaną, ale z dźwięków twojego doświadczenia prawdopodobnie jesteś gotowy, narzędzia są do pobrania za darmo, naprawdę dobry symulator, ważne, aby nauczyć się studiować .vcd / waveformy twojego kod wykonywania).

Chibios to kolejna rzecz, na którą warto zwrócić uwagę.

Tworzenie skutecznych programów ładujących to ważna umiejętność. Bootloader, a przynajmniej jego początkowa część, chce być solidny, nie chcesz dostarczać produktu, który łatwo zamurować. Prosty rozruch ze sposobem ponownego załadowania części aplikacji z pamięci flash bez narażania wejściowej części bootloadera jest kluczem.

Płyty Stellaris eval są ładowane z urządzeniami peryferyjnymi, chociaż zapewniają biblioteki, które warto uczenie się, zwłaszcza dlatego, że różnią się tym, jak ci mówią, że to działa, a jak to faktycznie działa. Aby się tego dowiedzieć, musisz sprawdzić ich kod i inne zasoby.

Będąc fanem avr, jeśli nadal istnieje, polecam motyl avr. Naucz się trochę programowania szeregowego, przylutuj złącze i przeprogramuj je. Kilka urządzeń peryferyjnych do nauczenia się programowania.

Może zdobędziesz kiedyś półprzewodnikowy Dallas, teraz myślę, że maksymalny, urządzenie jednoprzewodowe. Podobnie jak ich czujniki temperatury. Jeszcze bardziej bolesne niż i2c i mdio z ich dwukierunkową magistralą danych, ta jedna rzecz to jeden przewód (i masa). Moc, mistrz do zależnego i zależnego, by opanować wszystko na jednym przewodzie.

Kiedy byłem tam, gdzie teraz jesteś, dekodowanie protokołów zdalnego sterowania na podczerwień było dla mnie zabawą. Moduły odbiornika podczerwieni są łatwe do zdobycia, radio shack miał naprawdę dobry. Zasadniczo, w przeciwieństwie do uderzania bitów, chcesz mierzyć czas między zmianami stanu, używając tego wykrywania czasu i / lub dekodowania protokołu. Uniwersalny odbiornik nie jest konieczny, wystarczy jeden protokół naraz. Podobnie jest z możliwością wysyłania poleceń bitbang do diody IR, w szczególności, jeśli bit uderzył w częstotliwość nośną.

Rozmowa z kartą SD przez spi jest prawdopodobnie również dobrym pomysłem. Zdecydowanie nauczysz się, jak wymazywać i programować części flash i2c i / lub spi, często spotykasz je w przypadku numerów seryjnych, adresów MAC i tym podobnych.

Polecam również zapoznanie się z podstawowymi protokołami Ethernet. Umiejętność analizowania i tworzenia pakietów arp i udp (od zera) (a także icmp / ping). Dość łatwo jest stworzyć stos UDP, jeśli trochę oszukujesz, nie przestrzegając rzeczywistych reguł arp, jeśli ktoś wyśle ​​ci coś, wyślij odpowiedź z powrotem do wysyłającego mac / ip. A może posunąć się nawet do oglądania pakietów arp, aby inni ludzie kupowali i śledzili adresy MAC / IP wokół ciebie. tcp wymaga dużo więcej pracy i jest wykonalne, ale lepiej jest najpierw o nim przeczytać, niż próbować go wdrożyć.

Powodzenia i, co najważniejsze, dobrej zabawy.

Jeśli nie masz nic przeciwko pytaniu, ile miałeś lat „kiedy byłeś tam, gdzie ja teraz?”
Powiedziałbym, że wczesne / średnie lata dwudzieste, kiedy byłem w punkcie, w którym zainteresowałem się wypróbowaniem mikrokontrolerów i miałem pracę i było na to stać. W tamtym czasie zdjęcie było jedyne i kosztowało około 150 $ za najtańszą konfigurację, a to był tylko programator z gniazdem zif dla części z otworem przelotowym, używał płyty prototypowej radia i musiał kupić oscylatory itp. rozpocząć. Objętość płyt poniżej 50 $ plus dostęp do internetu całkowicie zmieniły grę. Miałbym mniej więcej 15 lat, gdyby to, co było dziś dostępne, było wtedy dostępne.
Trzeba było wyjąć część ze swojej płytki, włożyć ją do programatora, przeprogramować, a następnie włożyć część z powrotem do swojej płytki. Nic z tego w sprawach obwodów.
Tak, to właściwie świat, w którym pracowałem, ale za dużo tańsze. Przez większość czasu używam arduino jako sposobu na programowanie, a następnie wyjmuję go i umieszczam w dowolnym celu. Cieszę się, że kiedy zaczynałeś, miałeś ponad 20 lat, ponieważ nie zająłem się tym, dopóki nie poszedłem na studia i nie zdałem sobie sprawy, że poza Javą na pulpicie istnieje wszechświat. To była jednak moja wina, masz rację, że dziś dużo łatwiej jest zacząć wcześnie.
W tym samym czasie, chociaż jako nastolatek, vic20 i ibm pc były zupełnie nowe i kosztowały fortunę, ale z pewną dobrze ulokowaną inspiracją, którą kupili moi starzy (jeden, a potem oba) na wypadek, gdyby któreś z dzieci miało się czegoś z tego nauczyć i W tamtym czasie zrobiłem odpowiednik tego, przejrzałem podstawowe podręczniki i napisałem programy, aby nauczyć się każdego polecenia. Później nauczyłem się dos z asemblera, potem C i po tym, jak miałem prawdziwą pracę, trochę pieniędzy i innych inżynierów, aby opowiedzieli mi o tych mikrokontrolerach, POTEM poszedłem tą ścieżką.
Dla mnie, IMO, atmel avr butterfly był arduino dnia, w pełni funkcjonalną płytą za 20 dolarów, z mikrokontrolerem, programowalnym w terenie (dodaj trzy przewody i 9-pinowe złącze dsub). Miał też wyświetlacz, inne rzeczy i zapasowe wejścia / wyjścia. potem wyszło dallas tini (wyrzuciłem java i napisałem stos UDP w asemblerze 8051). ezusb, również 8051 otworzył świat USB. i te płyty o wartości poniżej 50 $ kontynuowane ... Zakładam, że launchpad msp430 i odkrywanie linii wartości ST są sprzedawane ze stratą, aby produkt był dostępny.
Zupełnie inny świat w dzisiejszych czasach i niestety zbyt wielu programistów jest bardzo oddalonych od tego, co naprawdę dzieje się w kompilatorach, procesorach, autobusach i protokołach itp. (Z powodu języków bardzo wysokiego poziomu). Przy tak łatwym dostępie do informacji, sprzętu i symulatorów nie jest on używany. Cieszę się, że widzę kogoś zainteresowanego, proszę o kontynuowanie.
Olin Lathrop
2011-07-01 00:43:11 UTC
view on stackexchange narkive permalink

To ważne pytanie. Niestety nie ma jednego sposobu, aby nauczyć się programowania wbudowanego mikrokontrolera, tak jak w przypadku uczenia się większości innych. Zakładam, że skoro tu pytasz, nie chcesz po prostu wykonać konkretnego projektu, ale chcesz naprawdę zrozumieć, co się dzieje, aby móc później wykonać każdy projekt samodzielnie. To dobry początek.

Nic nie zastąpi zrobienia kilku projektów w asemblerze, aby naprawdę zrozumieć rzeczy. Częścią zadań języków wysokiego poziomu jest ukrycie części złożoności, ale to również przesłania rzeczy, które chcesz zrozumieć. Arduino to kolejna warstwa od tego. Może być w porządku dla kogoś, kto nie chce wiedzieć, jak działają rzeczy, aby coś zrobić, ale jest naprawdę źle, jeśli celem jest poznanie szczegółów. Więc porzuć arduino, zapomnij, że masz kompilator, zwiń koszulki i przygotuj się na naprawdę zanurzenie.

Pierwszym miejscem do rozpoczęcia pracy z każdym mikrokontrolerem jest jego arkusz danych. Różne linie mikrokontrolerów mają różne szczegóły, ale koncepcje są takie same. Wybierz jeden i trzymaj się go, aż wykonasz kilka projektów i poczujesz się z nim komfortowo. TI MSP430, Atmel i Microchip PIC są głównymi liniami mikrokontrolerów. Jestem PIC, więc powiem o tym. Nie jest źle iść z jednym z pozostałych, ale myślę, że istnieje bardziej dostępne wsparcie społeczności dla PIC, a linia PIC jest bardzo szeroka, więc łatwiej będzie przejść do większych i mniejszych mikro od miejsca, w którym zaczniesz.

Jeśli zaczniesz od linii PIC, polecam 18F2520. Jest to całkiem sprawny mikrokontroler, dostępny w łatwej do wkręcenia 28-pinowej obudowie, ma przyzwoitą ilość pamięci programowej i pamięci RAM oraz przyzwoity zestaw typowych urządzeń peryferyjnych. Weź małą garść i używaj jej na początek nawet w przypadku małych projektów, które można było zrobić za pomocą czegoś mniejszego. Chodzi o to, żeby dobrze to poznać. W końcu będziesz chciał zrobić coś, co wymaga więcej niż ten PIC może zrobić. Miejmy nadzieję, że do tego czasu będziesz całkiem dobry w podstawowych rzeczach i z łatwością zastąpisz inny model. W rzeczywistości wszystkie PIC 18F są takie same, z wyjątkiem liczby pinów, pamięci programu, pamięci RAM i miksu urządzeń peryferyjnych. Po kilku projektach z 18F2520 nie będziesz miał problemu z przejściem od razu do dowolnego PIC 18.

Jeśli zrobisz to profesjonalnie, w końcu napotkasz wymagania, które narzucą coś mniejszego lub tańszego . Wtedy patrzysz na rodziny 16F lub nawet 12F lub 10F. Wszystko będzie wyglądało znajomo, ale kilka rzeczy będzie nieco trudniejszych. Nie powinno to stanowić problemu, jeśli zaczynasz od solidnego zrozumienia 18F. W dzisiejszych czasach rodziny 16F i niższe są tak naprawdę przeznaczone tylko do produkcji masowej lub być może wtedy, gdy fizyczna przestrzeń i czasami moc są bardzo ważne. Jest w nich niewielka przewaga w porównaniu z 18F dla hobbystów.

W górę możesz spojrzeć na 24, 30 i 33 rodziny. Są one w zasadzie takie same, z wyjątkiem kilku drobnych zmarszczek, takich jak napięcie, z jaką pracują, prędkość maksymalna i to, czy mają matematyczny DSP ALU, czy nie. Są bardziej skomplikowane do zaprogramowania w asemblerze, ale też dziwnie łatwiejsze. Jest więcej instrukcji, o których należy pamiętać, ale dzięki temu łatwiej jest zrobić wiele rzeczy. Jest to również dobry punkt, aby zacząć wracać do C, jeśli tam chcesz. Kompilator C dla tych części jest w rzeczywistości całkiem dobry, w przeciwieństwie do kompilatorów C dla PIC 18 i niższych. Łatwiej jest również połączyć C i montaż w tym samym projekcie na tych częściach. Nie zapomnij jednak o asemblerze. Nadal warto wiedzieć, kiedy trzeba napisać bootloader, poradzić sobie z wielozadaniowością, która wykonuje nienaturalne czynności na stosie, napisać naprawdę ciasny kod, aby odczytać kilka A / D i obliczyć cykl pracy PWM dla następnego impulsu twojego Zasilanie 100 kHz PFC itp.

Jedną z fajnych rzeczy w linii Microchip jest to, że jeden programator / debugger działa na całej masie. Jeśli myślisz poważnie o robieniu tego profesjonalnie, zdobądź Real Ice. Aby zaoszczędzić trochę pieniędzy, możesz kupić ICD3, który jest tylko nieco okrojonym Real Ice. Jedyną rzeczą, którą nie jest, jest ICE (znowu głupi marketing), ale jest to dobry debugger w obwodzie. MPLAB, ich debugger i symulator IDE, działa również w całej linii produktów.

Ponownie, profesjonaliści lub ci, którzy chcą zostać w tym profesjonalistami, powinni udać się na doroczną konferencję Microchip Masters. Tak, latem jest w Arizonie, ale jesteś tam, aby się uczyć, więc zapomnij o 115 stopni F w cieniu. (Właściwie to lubię odkrywać Arizonę latem, więc wychodzę tydzień wcześniej z moim małym namiotem i obijam się w głąb lądu. To niesamowite, jak niewielu ludzi przebywa w rozległych lasach narodowych w niewielkiej odległości od Phoenix). dobre miejsce na zakup narzędzi programistycznych. Zwykle sprzedają je za około 45% zniżki w Masters. (Jestem partnerem projektowym Microchip na poziomie platynowym, więc cały czas otrzymuję 45% zniżki, dlatego nie korzystam z dokładnej zniżki Masters).

Jeśli zaczniesz odkrywać mikrokontrolery przez robiąc projekty PIC, zajrzyj na moją witrynę internetową, gdzie znajduję więcej szczegółów na temat tego, jak zwykle konstruuję projekty PIC i udostępniam kilka bezpłatnych narzędzi do robienia wymyślnych rzeczy. Jeśli rozumiesz dobry projekt i czystość oprogramowania, w MPASM zostaniesz oceniony. Zrób jeden lub dwa projekty, aby zrozumieć, co robi, a czego nie, a następnie przyjrzyj się moim opakowaniom i innym narzędziom, które pozwolą ci zrobić o wiele więcej przy jednoczesnym przestrzeganiu dobrych praktyk projektowania oprogramowania. Asembler nie musi być bałaganem tylko dlatego, że większość z nich jest. Jeśli naprawdę się tym interesujesz, możesz zatrzymać się na zajęciach, które prowadzę tego lata w Masters na ten temat.

Hej Olin, po pierwsze, dziękuję za poświęcenie tak dużo czasu na tę odpowiedź. Po drugie, już wybrałem linię Atmel jako swoją ulubioną broń, ponieważ wykonałem z nią 4 lub 5 projektów ... przepraszam = (. Nie jestem pewien, ile więcej czasu spędzę w działka montażowa z wyboru. Sprawdzę twoją stronę internetową i myślę, że twoje sugestie okażą się pomocne, mimo że w tej chwili nie idę na linię PIC.
Bardzo łatwo jest porzucić piaskownicę arduino i pisać aplikacje dla sprzętu w asm lub C lub czymkolwiek, dla czego można znaleźć kompilator. Wiele innych dobrych platform, starter msp430, wykrywanie linii wartości stm32, sam7s.
Jon L
2011-07-01 01:36:38 UTC
view on stackexchange narkive permalink

Aby bezpośrednio odpowiedzieć na Twoje pytanie „Co chcę wiedzieć”:

Odkryłem, że wywołanie kompilatora bezpośrednio z linii poleceń, zapoznanie się z jego opcjami, a następnie napisanie własnych plików Makefile do zrobić wszystkie swoje kompilacje, było dla mnie niezwykle korzystne w nauce procesu budowania - co brzmi jak coś, czego chcesz się nauczyć. To zasadniczo oddziela łańcuch narzędzi od IDE i pozwala nauczyć się łańcucha narzędzi więcej niż IDE. Jest to ciągła rzecz, którą również staram się ulepszyć.

Zauważyłem, że w przeszłości używałeś arduino, co jest świetne, ponieważ teraz mogę polecić używanie avr-gcc jako Twój kompilator od teraz. Spróbuj, jest dostępny na wszystkich platformach (Linux, WinAVR dla Windows, Mac), a dokumentacja dotycząca łańcucha narzędzi avr-gcc i avrdude (programista) jest świetna i powinno być wiele przykładowych plików Makefile, abyś mógł uczyć się od. Spora część tych informacji można również przenieść na inny sprzęt, na przykład arm-gcc.

Idealnie, to może być pierwsza rzecz, której spróbuję. A nawet doskonalszy, ponieważ ARM prawie na pewno będzie drugą architekturą, której się uczę, gdy będę w pełni zadowolony z amplitunerów AVR
Jay Atkinson
2011-07-01 04:37:43 UTC
view on stackexchange narkive permalink

Oto inny pomysł. Zaimplementuj własny system zadań w tle, który umożliwia tworzenie zarówno zadań czasowych, jak i żądań zadań, które są uruchamiane tylko wtedy, gdy zadania czasowe nie są uruchomione. To nie jest prawdziwy RTOS, ale działa bardziej jak wspólny planista. Przekonwertuj poprzedni projekt na nowy system zadań.

Ten rodzaj systemu działał bardzo dobrze na produktach, których używaliśmy w 8051. Pierwotnie został napisany w asemblerze, ale później przekonwertowaliśmy go na C, aby pomóc w przeniesieniu go na inne architektury. To było naprawdę sprytne, gdy bicie serca tego systemu było taktowane 5 ms, a zadania czasowe działały w odstępach co 5 ms. Mieliśmy plik, którego użyliśmy do nazwania wszystkich naszych zadań (wskaźników funkcji) z ich wartościami czasu i tymi, które były na żądanie. Ten plik został następnie przekonwertowany na assembler lub C, w zależności od tego, jak go zaimplementowaliśmy i wkompilowaliśmy w kod.

Jeśli sprawisz, że będzie działał całkiem dobrze, możesz zająć się pisaniem własnego prostego systemu RTOS dla czegoś cięższy.

Brzmi całkiem interesująco! Jakieś sugestie dotyczące zasobów edukacyjnych dotyczących harmonogramów zadań itp.?
Rozdział 15, Jądra czasu rzeczywistego w „Podręczniku oprogramowania układowego” autorstwa Jeana Labrosse'a, red. Jacka Ganssle'a jest dobrym miejscem do rozpoczęcia, a reszta książki jest również zalecana.
Majenko
2011-07-01 00:12:51 UTC
view on stackexchange narkive permalink

Jedną rzeczą, o której nie wspomniałeś, jest komunikacja.

Wydaje się, że jedną dziurą , którą mógłbyś podłączyć , byłaby nauka różnych standardowych metod komunikacji protokoły używane w przemyśle - na przykład:

itp.

Ach, tak, komunikacja +1 Na pewno przeczytam te linki, czy masz jakieś sugestie dotyczące projektu, które zmusiłyby mnie do zastosowania tego, czego „nauczyłem się” tylko z ich przeczytania?
Połączenie z dowolnym urządzeniem, które ma dostępną tę magistralę, jest często dobrym projektem. Może napiszesz jakiegoś kierowcę. Jest wiele chipów dla autobusów takich jak I2C, SPI, 1wire itp. Te wymienione w odpowiedzi to więcej magistrali urządzenie do urządzenia. Mogę dorzucić MIDI, co może być interesujące.
user924
2011-07-01 18:38:24 UTC
view on stackexchange narkive permalink

A więc pytanie brzmi: „Jak się nauczyć, kiedy każdy łańcuch narzędzi jest czarną skrzynką?”

Proponuję znaleźć gotowych do użycia, bardzo starych eksperymentatorów, płytkę debugującą z dowolnym popularnym procesorem. Coś jak szerokie na 2 stopy urządzenie z procesorem, diodami LED, przełącznikami i przyciskiem „Wykonaj jeden krok”. Utwórz ręcznie program pętli zawierający 5–10 instrukcji, używając instrukcji binarnych kodu maszynowego z arkusza danych. Umieść go na podłączanym ogromnym chipie ROM. Włóż ROM, naciśnij włącz / resetuj i debuguj krok po kroku.

Joe
2011-07-01 00:03:12 UTC
view on stackexchange narkive permalink

Jak dobrze rozumiesz rejestry, działanie itp. na 8-bitowym mikro? Dobrym pomysłem może być mały montaż. Ma to tę zaletę, że uczy cię dokładnie, co się dzieje. Może to pomóc w rozwiązaniu dziwnych błędów w wyższych językach.

AVR mają ładny prosty asembler i rejestry. To dobra platforma do zmoczenia karmy. Istnieje również kilka dobrych samouczków dla tej platformy.

To da ci podsumowanie tego, co robi mikro. Wtedy następny krok, w jaki sposób kompilator i konsolidator przenoszą C / Arduino do kodu maszynowego, będzie łatwiejszy do zrozumienia.

Użyłem już 3 różnych języków asemblera. Myślę, że na tym froncie jest dobrze. Dzięki za wkład i zdecydowanie zgadzam się, że nauka asemblera pomogła w lepszym pisaniu C (a przynajmniej zrozumieniu tego, co piszę)
Sandeep
2011-07-05 08:20:03 UTC
view on stackexchange narkive permalink

Mantra czasu rzeczywistego zawiera kilka artykułów na temat tworzenia oprogramowania wbudowanego.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...