Hallo liebe Forenmitglieder :)
Als ein derzeitiger Student könnte ich es mir gut vorstellen, als
Software-Entwickler speziell im Bereich Mikrocontroller-Programmierung
zu arbeiten.
Jedoch haben wir das erste Semester wirklich ziemlich auf Registerebene
gearbeitet, also wirklich Bit für Bit in den jeweiligen Register
gesetzt, was ziemlich frustrierend war, da der verwendete
Mikrocontroller ziemlich komplex war und alleine schon der ADC mehr als
100 Register hatte. Leider habe ich auch schon die Erfahrung gemacht,
dass wenn man ein Register nicht setzt oder zumindest "falsch", dass
dann der uC entweder nichts macht oder nicht das macht was man braucht.
Meine Frage wäre jetzt, (speziell an die Leute, welche auch in diesem
Bereich arbeiten) ob man in der Berufswelt wirklich auf Registerebene
arbeitet oder auch API's verwendet? Weil ich kann mir nicht vorstellen,
dass das für eine Firma rentabel ist, wenn man soviel Zeit rein
investiert oder sehe ich das falsch?
Ich hoffe ihr könnt mir diesbezüglich paar Ratschläge geben.
Mit freundlichen Grüßen
Johannes H.
Du kannst es Dir aussuchen.
Es gibt auch Firmen, die schreiben die API.
Und es gibt Firmen, die benutzen nur die API.
Oder es gibt Firmen, die abstrahieren selbst das und sprechen nur noch
von Steuergeräten und die Implementierung ist dann das Problem eines
Zulieferer.
Viele Grüße
Thorsten
Es gibt auch Firmen, die (zurecht) der Meinung sind wenn sie 10 Cent
Produktionskosten sparen, dann ist das einen großen Entwicklungsaufwand
wert. D.h. sollte es durch nicht Verwendung der Api möglich sein auf
einen kleineren (in Sinne von Einkaufspreis) Chip umzusteigen, dann wird
das gemacht.
Johannes H. schrieb:> da der verwendete> Mikrocontroller ziemlich komplex war und alleine schon der ADC mehr als> 100 Register hatte
Welcher MC ist das denn?
Ich vermute mal, da sind die Register für jeden MUX-Input separat, d.h.
sie haben die gleiche Funktion. Also nichts kompliziertes.
Für komplexere MCs gibt es oft ne HAL-Lib, aber in meinen Augen ist das
nur ne zusätzliche Zwischenschicht, d.h. das Datenblatt muß man trotzdem
lesen, um das HAL zu verstehen.
Johannes H. schrieb:> Weil ich kann mir nicht vorstellen,> dass das für eine Firma rentabel ist, wenn man soviel Zeit rein> investiert oder sehe ich das falsch?
Es wäre noch weniger rentabel, die Zeit nicht zu investieren und dann
überhaupt kein funktionsfähiges Produkt zu haben.
In der Tat gibt es aber mittlerweile für sehr viele Microcontroller auch
schon funktionsfähigen Beispielcode und auch Bibliotheken. Zudem bieten
einige Hersteller auch Konfiguratoren an, in denen man die gewünschten
Peripheriefunktionen zusammenklickt und die dann entsprechende
C-Quelltexte oder zumindest Includedateien generieren. Insbesondere wenn
man mehrere Peripherieblöcke hat, deren benötigte Takte nicht durch
einfaches Teilen voneinander abgeleitet werden können, sondern bei denen
ggf. iterativ die Einstellungen für verschiedene PPLs und Frequenzteiler
bestimmt werden müssen, sind solche Konfiguratoren sinnvoll.
In der Praxis stellt sich aber heraus, dass die mitgelieferten oder
generierten Quelltexte und Bibliotheken manchmal auch ziemlich
fehlerhaft sind und nur als Anregung verwendet werden können.
Alternativ kann man natürlich auch bei kommerziellen Anbietern für
Bibliotheken, Betriebssystemen und Protokollstacks das erforderliche
Kleingeld einwerfen.
Nils H. schrieb:> Schreib dir deine eigene Api. Sauber getrennt in Bibliotheken kannst du> nacher deine Quellen auch sehr schnell auf einen anderen µC portieren.
Ich bezweifele, dass dieser Hinweis für den TE zielführend ist, denn zum
einen hat er schon mit den Registern seine Probleme, und als Anfänger
wird es ihm sicherlich nicht gelingen, wohlstrukturierte und gut
wartbare Bibliotheken und APIs zu definieren. Das große Problem besteht
ja in den Abhängigkeiten der Hardwareressourcen voneinander. Kaum hat
man nämlich eine passable Struktur für die prozessorinternen Ressourcen
gefunden, kommt dann die Einsatzumgebung, d.h. die umgebende Hardware,
hinzu. Wenn die Pins knapp werden, werden ggf. Pins anderer
Funktionsblöcke zweckentfremdet. Dann hängt plötzlich die
Hintergrundbeleuchtung des LCD an einer freien Handshakeleitung des
UARTs, so das man zusehen darf, wie man diese Abhängigkeit in seinen
APIs und Treibern darstellt. Manche Hardwareentwickler sind da auch
gnadenlos, insbesondere dann, wenn sie nicht einsehen, dass man bei der
wenigstens Microcontrollern die Peripherieblöcke frei den Pins zuordnen
kann. Im schlimmsten Fall muss man dann in Software einige
Schnittstellen per Bitbanging bedienen.
Allerdings kann man bei einem solchen Versuch auch sehr viel lernen.
Wenn es hingegen schnell gehen soll und man naiverweise hofft, auf keine
Probleme zu stoßen, kann man sich natürlich an den erwähnten frei
zugänglichen Beispielquellen und Bibliotheken bedienen.
Vielen Dank für die zahlreichen Antworten. Die einzige Möglichkeit, in
diesen Gebiet bisschen Sattelfest zu sein, ist glaube ich auf
registerebene programmieren, programmieren, programmieren oder habt ihr
einen anderen Tipp für mich? Weil liege ich richtig wenn ich sage, dass
wenn ich das progarmmieren auf Registerebene gut beherrsche, dann sollte
die Benutzung der Bibliotheken kein problem sein oder?
Johannes H. schrieb:> Weil liege ich richtig wenn ich sage, dass> wenn ich das progarmmieren auf Registerebene gut beherrsche, dann sollte> die Benutzung der Bibliotheken kein problem sein oder?
Das stimmt. Allerdings haben einige APIs Besonderheiten an die man sich
erstmal gewöhnen muss. APIs helfen einem aber gut dabei, wenn zum
Beispiel die Reihenfolge der Registereinstellungen wichtig ist.
Johannes H. schrieb:> oder habt ihr> einen anderen Tipp für mich?
Das Einstellen der Register muss man sich erst mal verinnerlichen. Wenn
man es an ein paar Mikrocontrollern gemacht, geht es leichter.
Johannes H. schrieb:> oder habt ihr einen anderen Tipp für mich
Guten Code lesen und versuchen zu verstehen. Wenn man immer nur selber
programmiert merkt man ja nicht wo man besser werden könnte .
Wer mit Z80-CPU, Z80-PIO, Z80-SIO und Z80-DMA gross geworden ist,
findet ueberhaupt nichts dabei, mal in ein "paar" Register
Werte zu schreiben um das Zeug in Betrieb zu setzen und zu halten.
Nur weichgespuelte Weicheier von heute schreien gleich nach einer API
die ihrem faulen/igen Hirn das bisschen Denken abnimmt.
Aktuelles Beispiel bei uns (Studium Elektrotechnik):
Wir müssen für ein Fach einen Prüfplatz entwerfen.
Ich bin in einer etwas größeren Gruppe. Es ist einfach frustrierend
wenn, wenn ein Teil der Leute keine Ahnung von Mikrocontrollern hat und
ein paar andere sind der Meinung, mit einem Arduino könne man nur Zeiten
im Millisekundenbereich auflösen. Nicht daß ich einen Arduino nehmen
würde, aber manche kennen leider nix anderes. Und Mikrocontroller im
Speziellen war kein Thema in unserem Studium.
Und nun überzeug die Leute mal daß da weitaus mehr geht, mit Timern und
externen Interrupts und so...und "mehr" ist für unsere Aufgabe
notwendig...ich hab (schon vor meinem Studium) AVRs in ASM programmiert.
Und daher weiß ich wie das ein oder andere funktioniert. Und bin nicht
auf APIs angewiesen. Selbst wenn ich diese nutze und nie wieder in ASM
programmiere, so profitiere ich noch jahrelang von diesen Erfahrungen.
Grundsätzlich gilt: Du kannst dein Studium auf zwei Arten bewältigen.
1.) Durch Auswendiglernen.
Eigentlich läuft es in der Regel auf das sog. Bolemielernen raus. Bis
zur Klausur alles rein in den Kopf, und nach der Klausur alles wieder
vergessen, weil ja noch mehr Klausuren kommen.
2.) Durch Verstehen.
Du wirst die eine spezielle Anwendung mit hoher Wahrscheinlichkeit nie
wieder sehen. Uralter Controller, veraltete Sprache, was auch immer.
Aber du hast einige grundlegene Dinge und Mechanismen kennengelernt, die
in gewisser Abwandlung immer wiederkommen. Neuere Techniken und deren
Vorteile verstehst du weitaus besser als die, die nur auswendiggelernt
haben.
Meines Erachtens ist jemand, der nur auswendig lernt, des Studiums nicht
würdig. Was man auswendig wissen muß, steht in Büchern. Oder im
Internet. Aber Verständnis-das findest du in deinem eigenen Kopf.
(º°)·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.· schrieb im Beitrag
#5009574:
> Wer mit Z80-CPU, Z80-PIO, Z80-SIO und Z80-DMA gross geworden ist,> findet ueberhaupt nichts dabei, mal in ein "paar" Register> Werte zu schreiben um das Zeug in Betrieb zu setzen und zu halten.
Ich bin genau mit diesen Bausteinen groß geworden und habe auch schon
etliche Mikroprozessoren und Microcontroller auf dieser Registerebene
programmiert. Und dabei habe ich festgestellt, dass die korrekten
Einstellungen für PLLs, Taktgeneratoren usw. bei etlichen Prozessoren
der letzten ca. 10 Jahre ein Ausmaß angenommen haben, dass eine rein
händische Abschätzung der korrekten Konfiguration zu lästig und
fehlerträchtig geworden ist.
> Nur weichgespuelte Weicheier von heute schreien gleich nach einer API> die ihrem faulen/igen Hirn das bisschen Denken abnimmt.
Nur weichgespuelte Weicheier von heute verwenden so kleine
Microcontroller, dass sie noch den Überblick über alle Register
behalten. :-)
Andreas S. schrieb:> In der Praxis stellt sich aber heraus, dass die mitgelieferten oder> generierten Quelltexte und Bibliotheken manchmal auch ziemlich> fehlerhaft sind und nur als Anregung verwendet werden können.
jo
Andreas S. schrieb:> Ich bezweifele, dass dieser Hinweis für den TE zielführend ist, denn zum> einen hat er schon mit den Registern seine Probleme, und als Anfänger> wird es ihm sicherlich nicht gelingen, wohlstrukturierte und gut> wartbare Bibliotheken und APIs zu definieren.
Das gelingt den mir bekannten Herstellern aber auch nicht. Möchte
wirklich mal wissen, wer das Zeug da zusammenfrickelt. Wahrscheinlich
gelernte Informatiker aus Bangalore. Brrr, Ressourcenverschwendung und
übler Code ohne Ende.
Also ich finde es megaspannend mich in einen einzelnen chip
einzuarbeiten. Es gibt Chips die haben so eine Funktionsvielfalt... wow.
Irgendwann habe ich dann herausgefunden welcher mode fuer meine
Anwendung passt, und welche Moden in der Zukunft allenfalls interessant
sein koennten. Wenn ich diesen Chip die naechsten 10 Jahre verbaue hat
es sich sicher gelohnt ein Tag darin zu investieren.
Sonst bin ich moeglicherweise falsch in meinem Beruf, resp. sollte mich
langsam um orientieren.
Claus M. schrieb:> Andreas S. schrieb:>> In der Praxis stellt sich aber heraus, dass die mitgelieferten oder>> generierten Quelltexte und Bibliotheken manchmal auch ziemlich>> fehlerhaft sind und nur als Anregung verwendet werden können.>> jo>> Andreas S. schrieb:>> Ich bezweifele, dass dieser Hinweis für den TE zielführend ist, denn zum>> einen hat er schon mit den Registern seine Probleme, und als Anfänger>> wird es ihm sicherlich nicht gelingen, wohlstrukturierte und gut>> wartbare Bibliotheken und APIs zu definieren.>> Das gelingt den mir bekannten Herstellern aber auch nicht. Möchte> wirklich mal wissen, wer das Zeug da zusammenfrickelt. Wahrscheinlich> gelernte Informatiker aus Bangalore. Brrr, Ressourcenverschwendung und> übler Code ohne Ende.
Was für Hersteller und Produkte sind das?
Leider hab ich noch nicht ganz die Erfahrung, um immer zu erkennen, ob
es jetzt ein abschrekendes Beispiel ist, oder ob man es sich zum Vorbild
nehemen soll. Oft frage ich mich, warum ist das jetzt so umgesetzt,
obwohl ich es anders machen würde, manchmal erkennt man denn Sinn, und
man lernt wieder ein Stückchen dazu, aber manchmal hat man einfach
zuwenig Erfahrung in einem Bereich, um die Qualität beurteilen zu
können.