Embedded Development - Den nächsten Schritt machen


7

Ich werde Ihnen zunächst sagen, was ich weiß. Dann werde ich Ihnen sagen, dass ich in dieses magische Land gelangen möchte, in dem ich alles über die Entwicklung eingebetteter Systeme weiß. Dann werde ich Sie fragen, was meine nächsten Schritte sein sollten, um dorthin zu gelangen. Diese Antwort ist ziemlich informativ, aber ich versuche, etwas detaillierter zu werden:

Was ich weiß

Mal sehen, ich bin fair mit C und C ++. Natürlich möchte ich mit diesen Sprachen besser werden, aber ich denke, an diesem Punkt ist der beste Weg für mich, mich zu verbessern, sie einfach weiter zu verwenden und ständig zu versuchen, meinen Code zu verbessern, während ich ihn schreibe. Ich denke nicht, dass es sehr vorteilhaft wäre, irgendwelche Lernübungen nur noch dem Lernen von C zu widmen.

Ich bin ziemlich zufrieden mit dem Entwerfen einfacher Schaltungen. Ich sehe einen Chip mit einem Open-Collector-Ausgang und weiß, dass ich einen Pull-up usw. brauche. Ich bin ziemlich sicher, dass ich mit einem IC und seinem Datenblatt entweder herausfinden kann, wie ich mit ihm umgehen soll, oder zumindest die richtigen Fragen dazu stellen kann Finden Sie heraus, wie Sie es verbinden.

Ich bin sehr gut in Mathe und logischem Denken. Es gibt nur wenige Algorithmen / Designkonzepte, die mich für eine Schleife werfen. Dies ist definitiv mein stärkster Bereich.

Was ich getan habe

Bisher habe ich alle Erfahrungen mit 8-Bit-Mikrocontrollern gesammelt. In meinem College-Kurs wurden ein Motorola HC08, ein Intel 8051 und ein Zilog EZ8 verwendet. Mein Professor hatte für alle drei ein kleines Entwicklungsboard mit einem 7-Seg-Display und einigen anderen Dingen gebaut. Wir haben sie in der Montage programmiert, damit ich mit der Montage vertraut bin, und ich habe einen grundlegenden Kurs zur Computerarchitektur absolviert, damit ich eine gute Vorstellung von der Hardware habe. Wir haben jedoch an einer Windows-Umgebung gearbeitet und alle 3 MCUs hatten bereits eine eigene IDE und Toolkette eingerichtet, sodass ich nie wirklich erfahren habe, wie mein Code von der Assembly zur Ausführung auf der MCU überging.

Mein nächster Schritt war, alleine zu lernen. Ich habe mich sehr gut mit der Arduino-Umgebung vertraut gemacht, indem ich mit Sensoren / Speichern / Anzeigen verbunden war, die beide vorab geschriebene Bibliotheken hatten, und einige, die dies nicht taten. Als nächstes baute ich mein eigenes Arduino-Board mit einem ICSP und Verbindungen zu einer anderen MCU, damit ich den Bootloader auf nackte ATmega328s flashen konnte. Wiederum waren die IDE und die Toolkette bereits eingerichtet und ich habe nie verstanden, wie ich von C / Arduino zu Code übergegangen bin, der tatsächlich auf der MCU ausgeführt wird.

Was ich wissen will

Aus der zuvor verknüpften Antwort denke ich, dass das Interessanteste / Nützlichste für mich das Erlernen der Tools (Compiler und Linker) und das Erlernen verschiedener Stile der Softwarearchitektur (von Interrupt-basierten Regelkreisen zu Schedulern und RTOSs) wäre. . Das ist meine Meinung zu dem, was am nützlichsten wäre ... aber da ich es noch nicht weiß, ist es schwer zu sagen, ob das richtig ist oder nicht, also zögern Sie nicht, andere Stichpunkte aus dieser Antwort vorzuschlagen, wenn Sie denken, dass sie besser wären und Bitte erklären Sie, warum Sie das denken.


Ausgehend von meinem aktuellen Wissen und der obigen Beschreibung dessen, was ich als Ziel wissen möchte, suche ich nach sehr konkreten Vorschlägen, wohin ich als nächstes gehen soll. Ich suche nach genauen Projektvorschlägen, Websites / Blogeinträgen zum Lesen, Kapiteln in Büchern usw.

Gibt es noch andere Lücken in meiner Wissensdatenbank, die ich Ihrer Meinung nach füllen sollte, bevor ich zu den oben genannten Themen übergehe?

Vielen Dank


Dies ist eine sehr offene und subjektive Frage, aber sie ist gut durchdacht und hat zu großartigen Antworten geführt. Solche Fragen sollten CW sein.
Kevin Vermeer

@ Kevin Vermeer Ah ok, wie mache ich das als zukünftige Referenz?
NickHalden

@JGord, du musst für die Aufmerksamkeit des Moderators markieren. Nur Moderatoren können CW machen.
Kortuk

Antworten:


8

Aus der zuvor verknüpften Antwort geht hervor, dass das Interessanteste / Nützlichste für mich das Erlernen der Tools (Compiler und Linker) und das Erlernen verschiedener Stile der Softwarearchitektur (von Interrupt-basierten Regelkreisen zu Schedulern und RTOSs) ist.

Das Portieren eines kleinen Betriebssystems auf ein neues Gerät kann Ihnen helfen, Scheduler und RTOSs zu verstehen. FreeRTOS ist beliebt und gut dokumentiert. eCos ist eine andere.

Das Schreiben eines Bootloaders ist eine gute Möglichkeit, einen Linker in den Griff zu bekommen, da Sie den Speicher aufteilen und in Regionen flashen möchten.

Ein weiterer Tipp ist, eine völlig neue Architektur oder einen neuen Chip auszuwählen und sich ein Entwicklungsboard zu bauen. Es ist eine gute Möglichkeit, sich zu zwingen, von vorne zu beginnen und alles im Datenblatt nachzuschlagen.

Entdecken Sie Protothreads . Versuchen Sie, dieselben Programme sowohl im Thread- als auch im State-Machine-Stil zu schreiben. Wenn Sie mit Protothreads fertig sind, schreiben Sie einen echten Thread-Scheduler.


Hey Joby, danke für deine Antwort, aber das ist eigentlich die Art von Antwort, die ich vermeiden wollte. Ich google nach Dingen wie "Wie man RTOS lernt" und es gibt einfach keine nützlichen Links. Haben Sie gute Anleitungen oder Lernressourcen für die Dinge, die Sie erwähnt haben?
NickHalden

Wenn er wirklich versucht, dieses Zeug zu lernen, wird ein RTOS die Dinge nur am Anfang verdunkeln. Ich habe über 100 Mikrocontroller-Projekte durchgeführt und noch kein Projekt gefunden, bei dem ein RTOS eine gute Antwort gewesen wäre. Ich habe einige Male einen einfachen Round-Robin-Planer für kooperative Aufgaben verwendet, aber das ist weit weniger als das, was die meisten Leute als RTOS betrachten. Meine Aufgabenplaner für die Familien PIC 18 und dsPIC sind kostenlos auf meiner Website verfügbar.
Olin Lathrop

1
@Olin Für kleine Systeme bevorzuge ich kooperatives Multitasking mit abgefragten Aufgaben. Es ist deterministisch und leicht, ideal für eingeschränkte Systeme. Präventives Multitasking mit Threads ist zwar sehr leistungsfähig, kann jedoch zu Debug-Albträumen führen - mit Rennbedingungen und nicht wiederholbaren Fehlern. Gib mir jeden Tag eine Zustandsmaschine.
Toby Jaffey

1
@JGord: Nein, ich sage, ein vollständiges RTOS ist für Mikrocontroller ungeeignet. Das Beste, was Sie wirklich brauchen, ist ein kooperativer Task-Swapper. RTOS ist etwas für "große" eingebettete Systeme, die Mikrocontroller nicht sind. Es gibt viele eingebettete PCs und dergleichen, auf denen RTOSs oder andere Betriebssysteme sinnvoll sind, aber ich habe noch keinen gefunden, auf dem es für einen Mikrocontroller sinnvoll ist.
Olin Lathrop

3
RTOS-Informationen finden Sie in Jean Labrosses Buch über seinen RTOS: MicroC OS II-Echtzeitkernel. Er hat ein wunderbares Kapitel, das über RTOS-Mechanismen im Allgemeinen spricht. Mit seinem Buch erhalten Sie Rechte zur Nutzung seines RTOS.
Jay Atkinson

7

Das MicroC OS II-Buch ist wahrscheinlich etwas, in das Sie investieren sollten. Sie sollten auch Projekte erstellen, um die verschiedenen Schnittstellen i2c, spi, mdio usw. zu lernen. Insbesondere, wie man jedes einzelne Bit knallt. Von Zeit zu Zeit unterstützt die Hardware den Bus (dies muss von Anbieter zu Anbieter gelernt werden), aber häufig können Sie aus verschiedenen Gründen keine i2c / spi-Hardware verwenden und müssen ein bisschen knallen.

Das avr / arduino ist in Ordnung, Sie sollten ARM, Daumen und Daumen2 und das msp430 und einige ältere (Nicht-Mips) Bilder lernen. Schauen Sie sich den Bootloader-Code für das Arduino an und finden Sie heraus, wie Sie ein Loader-Programm erstellen, den Flash darauf löschen und das Board / den Chip übernehmen. Holen Sie sich ein lpc-basiertes Armmikro. Schauen Sie sich auch das Programmierprotokoll für die serielle Schnittstelle an. Holen Sie sich ein Sam7s oder etwas mit einem Arm7, der einen traditionellen Jtag hat, einen Olimex-Wiggler oder einen Jtag-Winzling (ich empfehle letzteres). Machen Sie sich mit openocd vertraut. ARMs swd ist schmerzhafter als normales jtag, wird sich aber in diesem Markt durchsetzen (für Produkte auf Cortex-m-Basis). Kurz gesagt, lernen Sie die verschiedenen Möglichkeiten kennen, die Anbieter bei der Schaltungsprogrammierung bieten. Sie werden von Zeit zu Zeit Bretter ziegeln und möchten sich mit dem Lösen von Brettern wohlfühlen. Schreiben Sie in diesem Sinne Code, um Intel hex, srec, zu analysieren.

Sie haben Werkzeuge erwähnt. Sie können nichts falsch machen, wenn Sie gcc und binutils lernen und lernen, wie man zumindest für die unterstützten Plattformen kompiliert (normalerweise beinhaltet dies --target = msp430 --prefix = / etwas zum Beispiel). Unterstützte Plattformen für die Hauptlinie gcc und binutils sind ein sich bewegendes Ziel, sodass avrgcc und mspgcc und dergleichen grundsätzlich für Sie erledigt werden. Sie müssen lernen, Linker-Skripte zu schreiben und Ihren C-Code so zu schreiben, dass beispielsweise feste Tabellen im ROM und nicht im RAM angezeigt werden. Wenn Sie auch ein Gefühl für das Zerlegen der Binärdateien bekommen möchten, müssen Sie sicherstellen, dass sich die Tabellen an der richtigen Stelle befinden. Stellen Sie sicher, dass sich der Code dort befindet, wo Sie denken, dass die Vektortabellen und der Start- / Startcode dort sind, wo der Prozessor ihn benötigt Stiefel. Es tut auch nicht weh herauszufinden, was die Compiler-Optimierungen bewirken und wie C-Code aussieht, wenn er zu Assembler- / Maschinencode kompiliert wird. Wenn möglich, beschränken Sie sich nicht auf gcc / gnu. llvm ist ein starker Spieler, es hat das Potenzial, gcc als besseres Werkzeug zu überholen. Möglicherweise haben Sie sdcc bereits verwendet. Probieren Sie die eval-Versionen von kiel, iar usw. aus. Sie werden schnell feststellen, dass die C / C ++ - Standards viele Grauzonen enthalten und jeder Compiler diese unterschiedlich interpretiert, auch dramatische Unterschiede in der Qualität des Codes, der aus demselben Hoch erzeugt wird Level-Quelle. Wenn Sie bei diesem Beruf bleiben, wird es Zeiten geben, in denen Sie gezwungen sind, einen nicht so großartigen Compiler zu verwenden und seine Warzen und Schwächen zu umgehen. Im Desktop-Geschäft kann es häufig vorkommen, dass Sie sich weigern, nicht standardkonforme Tools zu verwenden. In der Welt der Mikrocontroller bekommt man manchmal das, was man bekommt, und das ist es. Manchmal gibt es Anbieter, die die C-Sprache ändern / verbessern, um ihre Hardwarefunktionen zu erfüllen, oder angeblich Ihr Leben erleichtern (Kaninchen-Semi und XMOS kommen in den Sinn). (xmos ist aus vielen Gründen eine sehr attraktive Plattform, ich halte sie für fortgeschritten, aber nach den Geräuschen Ihrer Erfahrung sind Sie wahrscheinlich bereit, die Tools sind ein kostenloser Download, ein wirklich guter Simulator, wichtig, um zu lernen, wie man .vcd / Wellenformen von Ihnen studiert Code wird ausgeführt).

Chibios ist eine andere zu sehen.

Das Erstellen erfolgreicher Bootloader ist eine wichtige Fähigkeit. Der Bootloader oder zumindest der Anfang von will absolut solide sein, Sie möchten kein Produkt liefern, das leicht gemauert werden kann. Ein einfacher Start mit einer Möglichkeit, den Anwendungsteil des Flashs neu zu laden, ohne den Einstiegsteil des Bootloaders zu beeinträchtigen, ist der Schlüssel.

Die stellaris eval-Boards sind mit Peripheriegeräten ausgestattet, obwohl sie Bibliotheken bieten, die es wert sind, gelernt zu werden, zumal sich die Art und Weise, wie sie Ihnen sagen, dass sie funktionieren und wie sie tatsächlich funktionieren, unterscheidet und Sie ihren Code und andere Ressourcen untersuchen müssen, um dies herauszufinden.

Als AVR-Fan empfehle ich einen AVR-Schmetterling, wenn er noch da draußen ist. Lernen Sie ein wenig serielle Programmierung, löten Sie einen Stecker an und programmieren Sie ihn neu. Ein paar Peripheriegeräte dort, um das Programmieren zu lernen.

Vielleicht bekommen Sie ein früher Dallas Semi, jetzt Maxime, denke ich, ein Drahtgerät. Wie ihre Temperatursensoren. Noch schmerzhafter als i2c und mdio mit ihrem bidirektionalen Datenbus ist dieses Ein-Draht-Ding ein Draht (und Masse). Power, Master to Slave und Slave to Master alles auf einem Draht.

Als ich dort war, wo Sie jetzt sind, fand ich das Dekodieren von Infrarot-Fernbedienungsprotokollen lustig. Die ir-Empfängermodule sind leicht zu bekommen, Radio Shack hatte tatsächlich ein gutes. Grundsätzlich ist das Gegenteil von Bit-Banging der Fall. Sie möchten die Zeit zwischen Statusänderungen messen, indem Sie das Timing verwenden, um das Protokoll zu erkennen und / oder zu dekodieren. Ein Universalempfänger ist nicht erforderlich, ein Protokoll zu einem Zeitpunkt ist in Ordnung. Ebenso können Sie dann Bitbang-Befehle an eine ir-LED senden, insbesondere wenn Sie die Trägerfrequenz bitbangen.

Es ist wahrscheinlich auch eine gute Idee, über SPI mit einer SD-Karte zu sprechen. Auf jeden Fall lernen Sie, wie man i2c- und / oder spi-Flash-Teile löscht und programmiert. Sie werden häufig auf Seriennummern, Mac-Adressen und dergleichen stoßen.

Ich empfehle, auch die grundlegenden Ethernet-Protokolle zu lernen. Sie können arp- und udp-Pakete (von Grund auf neu) (und auch icmp / ping) analysieren und erstellen. Es ist ziemlich einfach, einen UDP-Stack zu erstellen, wenn Sie ein wenig schummeln und nicht den tatsächlichen Arp-Regeln folgen. Wenn Ihnen jemand etwas sendet, senden Sie die Antwort zurück an den sendenden Mac / die sendende IP. Oder gehen Sie so weit, dass Sie die Arp-Pakete für andere Leute kaufen und die Mac / IP-Adressen um Sie herum verfolgen. tcp erfordert viel mehr Arbeit, ist machbar, aber es ist besser, zuerst darüber zu lesen, als zu versuchen, es zu implementieren.

Viel Glück und vor allem viel Spaß.


Wenn es Ihnen nichts ausmacht, wie alt waren Sie, "als Sie dort waren, wo ich jetzt bin?"
NickHalden

Ich würde Anfang / Mitte 20 sagen, als ich an einem Punkt war, an dem ich mich für Mikrocontroller interessierte und einen Job hatte und ihn mir leisten konnte. Zu der Zeit war das Bild dasjenige und es kostete ungefähr 150 US-Dollar für das billigste Setup aller Art, und das war nur ein Zif-Sockel-Programmierer für ein Durchgangsloch-Teil, benutzte ein Radio-Shack-Protoboard und musste nur Oszillatoren usw. kaufen um loszulegen. Das Volumen von Boards unter 50 US-Dollar und das Internet haben das Spiel völlig verändert. Ich wäre ungefähr 15 gewesen, wenn das, was heute verfügbar war, damals verfügbar wäre.
old_timer

Sie mussten das Teil von Ihrer Platine entfernen, in den Programmierer legen, neu programmieren und dann wieder in Ihre Platine einsetzen. Nichts davon in Schaltungssachen.
old_timer

Ja, das ist eigentlich die Welt, in der ich gearbeitet habe, aber viel billiger. Die meiste Zeit benutze ich das Arduino als Programmiermethode, nehme es dann heraus und lege es in das gewünschte Ziel. Ich bin froh, dass du 20+ warst, als du angefangen hast, weil ich mich erst mit diesem Zeug beschäftigt habe, als ich aufs College kam und feststellte, dass es auf dem Desktop ein Universum außerhalb von Java gibt. Das war meine Schuld, Sie haben Recht, dass es heute viel einfacher ist, früh anzufangen.
NickHalden

Zur gleichen Zeit, als Teenager, waren vic20 und ibm pc brandneu und kosteten ein Vermögen, aber mit etwas gut platzierter Inspiration kauften meine Leute (eins, na ja, beide), falls eines der Kinder etwas daraus lernen sollte und Ich habe damals das Gleiche getan, die grundlegenden Handbücher durchgesehen und Programme geschrieben, um jeden Befehl zu lernen. Später lernte ich Dos mit Assembler, dann C und schließlich, nachdem ich einen richtigen Job und etwas Geld und andere Ingenieure hatte, um mir von diesen Mikrocontrollern zu erzählen, ging ich DANN diesen Weg.
old_timer

6

Das ist eine große Frage. Leider gibt es keine Möglichkeit, die Entwicklung eingebetteter Mikrocontroller zu erlernen, genau wie beim Erlernen fast aller anderen Dinge. Ich gehe davon aus, dass Sie, da Sie hier fragen, nicht nur ein bestimmtes Projekt fertigstellen möchten, sondern wirklich verstehen möchten, was vor sich geht, damit Sie jedes Projekt später selbst erledigen können. Das ist ein guter Anfang.

Es gibt keinen Ersatz dafür, ein paar Projekte in Assembler durchzuführen, um die Dinge wirklich zu verstehen. Ein Teil der Aufgabe von Hochsprachen besteht darin, einen Teil der Komplexität zu verbergen, aber das verdeckt auch Dinge, die Sie verstehen möchten. Arduino ist eine weitere Schicht davon. Es mag für jemanden in Ordnung sein, der nicht wissen möchte, wie die Dinge funktionieren, um etwas zu erledigen, aber es ist wirklich schlecht, wenn das Ziel darin besteht, die Details zu lernen. Lassen Sie also das Arduino hinter sich, vergessen Sie, dass Sie einen Compiler haben, rollen Sie Ihre Sleaves zusammen und machen Sie sich bereit, um wirklich einzutauchen.

Der erste Ausgangspunkt für einen Mikrocontroller ist das Datenblatt. Die verschiedenen Mikrocontroller-Linien haben unterschiedliche Details, aber die Konzepte sind die gleichen. Wählen Sie eine aus und bleiben Sie dabei, bis Sie ein paar Projekte abgeschlossen haben und sich damit wohl fühlen. Die PICs TI MSP430, Atmel und Microchip sind alle gängige Mikrocontroller-Linien. Ich bin ein PIC-Typ, also werde ich darüber sprechen. Es ist nicht falsch, mit einem der anderen zu gehen, aber ich denke, es gibt eine besser zugängliche Community-Unterstützung für PICs, und die PIC-Linie ist sehr breit, so dass es einfacher ist, von Anfang an zu größeren und kleineren Mikros zu wechseln.

Wenn Sie mit der PIC-Linie beginnen, empfehle ich den 18F2520. Es ist ein ziemlich leistungsfähiger Mikrocontroller, wird in einem einfach zu verschraubenden 28-Pin-Gehäuse geliefert, verfügt über eine ordentliche Menge an Programmspeicher und RAM sowie einen ordentlichen Satz gemeinsamer Peripheriegeräte. Holen Sie sich eine kleine Handvoll und verwenden Sie sie zunächst auch für kleine Projekte, die mit etwas weniger hätten durchgeführt werden können. Es geht darum, es gut kennenzulernen. Schließlich möchten Sie etwas tun, das mehr erfordert, als dieser PIC kann. Hoffentlich sind Sie zu diesem Zeitpunkt ziemlich gut in den grundlegenden Dingen und können leicht ein anderes Modell ersetzen. Tatsächlich sind alle 18F-PICs bis auf die Anzahl der Pins, den Programmspeicher, den RAM und den Peripheriemix gleich. Nach einigen Projekten mit dem 18F2520 haben Sie kein Problem damit, direkt in einen PIC 18 zu springen.

Wenn Sie dies professionell tun, werden Sie schließlich auf Anforderungen stoßen, die etwas Kleineres oder Billigeres vorschreiben. Dann sehen Sie sich die 16F- oder möglicherweise sogar 12F- oder 10F-Familien an. Die Dinge werden weitgehend vertraut aussehen, aber einige Dinge werden etwas schwieriger sein. Dies sollte kein Problem sein, wenn Sie mit einem soliden Verständnis eines 18F beginnen. Heutzutage sind die 16F- und unteren Familien wirklich nur für die Serienproduktion oder vielleicht dann gedacht, wenn physischer Raum und manchmal Leistung sehr wichtig sind. Sie haben wenig Vorteil gegenüber einem 18F für einen Bastler.

Wenn Sie nach oben gehen, können Sie sich die 24, 30 und 33 Familien ansehen. Diese sind im Grunde alle gleich, bis auf einige kleinere Falten wie die Spannung, mit der sie laufen, die Höchstgeschwindigkeit und ob sie die DSP-Mathematik-ALU haben oder nicht. Sie sind komplizierter in Assembler zu programmieren, aber auch seltsamerweise einfacher. Es gibt mehr Anweisungen zu beachten, aber es ist daher auch einfacher, viele Dinge zu tun. Dies ist auch ein guter Punkt, um zu C zurückzukehren, wenn Sie dorthin möchten. Der C-Compiler für diese Teile ist im Gegensatz zu den C-Compilern für PIC 18 und niedriger eigentlich ziemlich gut. Es ist auch einfacher, C und Baugruppe im selben Projekt für diese Teile zu mischen. Vergessen Sie jedoch nicht den Assembler. Es ist immer noch nützlich zu wissen, wann Sie einen Bootloader schreiben müssen, sich mit Multitasking zu befassen, das unnatürliche Aktionen auf dem Stapel ausführt.

Eine schöne Sache an der Microchip-Linie ist, dass ein einzelner Programmierer / Debugger über die gesamte Menge arbeitet. Wenn Sie es ernst meinen, dies professionell zu tun, holen Sie sich das Real Ice. Um ein wenig Geld zu sparen, können Sie den ICD3 kaufen, der nur ein wenig abgespecktes Real Ice ist. Das einzige, was es nicht ist, ist ein ICE (wieder dummes Marketing schlägt zu), aber es ist ein guter In-Circuit-Debugger. MPLAB, ihr IDE-Debugger und Simulator, funktioniert auch in der gesamten Produktlinie.

Für Profis oder diejenigen, die Profis werden möchten, besuchen Sie die jährliche Microchip Masters-Konferenz. Ja, es ist im Sommer in Arizona, aber Sie sind da, um etwas zu lernen. Vergessen Sie also die 115 ° F im Schatten. (Eigentlich mag ich es, Arizona im Sommer zu erkunden, also gehe ich eine Woche früher mit meinem kleinen Zelt aus und stoße durch das Hinterland. Es ist erstaunlich, wie wenige Menschen in den riesigen Nationalwäldern, nicht weit von Phoenix entfernt, draußen sind.) Masters ist es auch Ein guter Ort, um Entwicklungswerkzeuge zu erwerben. Sie verkaufen sie normalerweise für etwa 45% Rabatt bei Masters. (Ich bin ein Microchip-Designpartner auf Platin-Niveau, daher bekomme ich die ganze Zeit 45% Rabatt, weshalb ich nicht über den genauen Masters-Rabatt informiert bin.)

Wenn Sie anfangen, Mikrocontroller mithilfe von PIC-Projekten zu erkunden, besuchen Sie meine Website, auf der ich weitere Informationen zur Strukturierung von PIC-Projekten erhalte und Ihnen eine Reihe kostenloser Tools zur Verfügung stelle, mit denen Sie einige ausgefallene Dinge erledigen können. Wenn Sie gutes Software-Design und Sauberkeit verstehen, werden Sie bei MPASM verärgert sein. Machen Sie ein oder zwei Projekte, um zu verstehen, was es tut und was nicht, und schauen Sie sich dann meine Wrapper und andere Tools an, mit denen Sie viel mehr tun können, während Sie sich an gute Software-Design-Praktiken halten. Assembler muss kein Chaos sein, nur weil das meiste davon ist. Wenn Sie sich wirklich dafür interessieren, können Sie in der Klasse vorbeischauen, die ich diesen Sommer bei Masters zu diesem Thema unterrichte.


Hey Olin, zunächst einmal, danke, dass du so viel Zeit für diese Antwort aufgewendet hast. Zweitens habe ich bereits die Atmel-Linie als Waffe meiner Wahl gewählt, da ich 4 oder 5 Projekte damit durchgeführt habe ... sorry = (. Ich bin mir nicht sicher, wie viel mehr Zeit ich in verbringen werde Montage landen nach Wahl. Ich werde Ihre Website überprüfen und ich denke, Ihre Vorschläge werden sich als hilfreich erweisen, auch wenn ich im Moment nicht auf der PIC-Linie bin.
NickHalden

Es ist sehr einfach, die Arduino-Sandbox loszuwerden und Anwendungen für die Hardware in asm oder C oder was auch immer Sie einen Compiler finden können, zu schreiben. Viele andere gute Plattformen, das msp430-Launchpad, die stm32-Wertlinienerkennung, sam7s.
old_timer

5

Hier ist eine andere Idee. Implementieren Sie Ihr eigenes Hintergrund-Tasking-System, mit dem Sie sowohl zeitgesteuerte Aufgaben erstellen als auch Aufgaben anfordern können, die nur ausgeführt werden, wenn zeitgesteuerte Aufgaben nicht ausgeführt werden. Es ist kein echtes RTOS, sondern verhält sich eher wie ein kooperativer Scheduler. Konvertieren Sie ein vorheriges Projekt, um das neue Tasking-System zu verwenden.

Diese Art von System funktionierte sehr gut bei Produkten, die wir auf einem 8051 verwendet haben. Es wurde ursprünglich in Assembly geschrieben, aber später haben wir es in C konvertiert, um es auf andere Architekturen zu portieren. Es war wirklich glatt, wo der Herzschlag dieses Systems auf einem 5-ms-Tick lag und die zeitgesteuerten Aufgaben in 5-ms-Schritten ausgeführt wurden. Wir hatten eine Datei, in der wir alle unsere Aufgaben (Funktionszeiger) mit ihren Zeitwerten und denen, die auf Anfrage waren, benannten. Diese Datei wurde dann entweder in Assembly oder C konvertiert, je nachdem, wie wir sie implementiert und in den Code kompiliert haben.

Wenn es ziemlich gut funktioniert, können Sie Ihr eigenes einfaches RTOS für etwas Stärkeres schreiben.


Klingt ziemlich interessant! Irgendwelche Vorschläge für Lernressourcen zu Aufgabenplanern usw.?
NickHalden

2
Kapitel 15, Echtzeitkerne von "The Firmware Handbook" von Jean Labrosse, ed Jack Ganssle, ist ein guter Anfang, und der Rest des Buches wird ebenfalls empfohlen.
Martin

5

Um Ihre Frage "Was ich wissen möchte" direkt zu beantworten:

Ich habe festgestellt, dass es für mich äußerst hilfreich war, den Compiler direkt über die Befehlszeile aufzurufen, sich mit seinen Optionen vertraut zu machen und dann eigene Makefiles zu schreiben, um alle Ihre Builds auszuführen - was sich nach etwas anhört, das Sie möchten lernen. Dies trennt im Grunde die Werkzeugkette von der IDE und ermöglicht es Ihnen, die Werkzeugkette mehr als die IDE zu lernen. Dies ist eine fortlaufende Sache, die ich ebenfalls verbessern möchte.

Mir ist aufgefallen, dass Sie in der Vergangenheit Arduino verwendet haben, was großartig ist, da ich jetzt empfehlen kann, von nun an avr-gcc als Compiler zu verwenden. Probieren Sie es aus, es ist auf allen Plattformen verfügbar (Linux, WinAVR für Windows, Mac) und die Dokumentation zur avr-gcc-Toolkette und zu avrdude (Programmierer) ist großartig, und es sollte viele Beispiel-Makefiles für Sie geben lernen von. Ein angemessener Teil dieser Informationen kann auch auf andere Hardware übertragen werden, z. B. arm-gcc.


Perfekt, das könnte tatsächlich das erste sein, was ich versuche. Und noch perfekter, weil ARM mit ziemlicher Sicherheit die zweite Architektur sein wird, die ich lerne, wenn ich mit
AVRs

3

Eine Sache, die Sie nicht erwähnt haben, ist die Kommunikation.

Es scheint , dass ein Loch Sie könnten stecken die verschiedene Standard - Kommunikationsprotokolle in der Industrie zu lernen wäre - Dinge wie:

usw.


Ah, ja Kommunikation +1 Ich werde diese Links auf jeden Fall lesen. Haben Sie Projektvorschläge, die mich zwingen würden, das, was ich "lerne", nur durch das Lesen anzuwenden?
NickHalden

Die Anbindung an ein Gerät, für das dieser Bus verfügbar ist, ist oft ein gutes Projekt. Vielleicht schreiben Sie einen Fahrer. Es gibt viele Chips für Busse wie I2C, SPI, 1wire usw. Die in der Antwort genannten sind mehr Geräte-zu-Geräte-Busse. Ich könnte MIDI einwerfen, was interessant sein könnte.
XTL

3

Die Frage lautet also: "Wie lernt man, wenn jede Toolchain eine Blackbox ist?"

Ich schlage vor, einen sehr alten Experimentator von der Stange zu finden, der das Board mit jeder gängigen CPU debuggt. So etwas wie eine 2 Fuß breite Vorrichtung mit CPU, LEDs, Schaltern und der Schaltfläche "Einen Schritt ausführen". Erstellen Sie manuell ein Langschleifenprogramm mit 5 bis 10 Anweisungen unter Verwendung von Maschinencode-Binäranweisungen aus dem Datenblatt. Legen Sie es auf einen steckbaren riesigen ROM-Chip. Legen Sie das ROM ein, klicken Sie auf Power On / Reset und debuggen Sie es Schritt für Schritt.


2

Wie gut verstehen Sie Register, Betrieb und dergleichen auf einem 8-Bit-Mikro? Es könnte eine gute Idee sein, eine kleine Montage durchzuführen. Dies hat den Vorteil, dass Sie genau lernen, was los ist. Dies kann helfen, seltsame Fehler mit höheren Sprachen zu lösen.

AVRs haben einen schönen einfachen Assembler und Register. Es ist eine gute Plattform, um Ihr Futter nass zu machen. Es gibt auch einige gute Tutorials für diese Plattform.

Dies gibt Ihnen den Überblick darüber, was das Mikro tut. Dann ist der nächste Schritt, wie der Compiler und der Linker C / Arduino zum Maschinencode bringen, leichter zu verstehen.


Ich habe bereits 3 verschiedene Assemblersprachen verwendet. Ich denke, mir geht es an dieser Front gut. Vielen Dank für die Eingabe und ich stimme definitiv zu, dass das Lernen der Versammlung beim Schreiben von besserem C (oder zumindest beim Verstehen, was ich schreibe)
geholfen hat

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.