Forum: Ausbildung, Studium & Beruf Wechsel von Hardware zu Embedded SW vorbereiten


von David K. (knut-knueppel)


Lesenswert?

Hallo

Meine Frage kurz zusammengefasst: Wie bereite ich meinen Wechsel von 
Hardwareentwickler zum Embedded-Softwareentwickler vor?

Ich bin Hardwareentwickler mit Schwerpunkt Analog, RFID, EMV, kapazitive 
Sensorik, PCB-Design. Ich bin 40 Jahre alt und will die zweite Hälfte 
meines Erwerbslebnes etwas umgestalten. Mein Plan ist, während einem 
Jahr zuhause KnowHow anzueignen, vieleicht auch eine Weiterbildung 
besuchen. Und mich dann für Embedded Softwareentwicklung zu bewerben.

Wie könnte ich diese private Weiterbildung anpacken?
Welches KnowHow soll ich mir aneignen?
Wie kann ich mich über das Level eines Studienabgängers anheben?

Was ich schon kann:
Im Elektrotechnikstudium (Level Fachhochschule Schweiz) hab ich 
natürlich schon Softwareentwicklung gehabt. Nur ist das nie so richtig 
vertieft worden. Ich beherrsche:

* C: Hab ich dann und wann auf 8 Bit Controllern gebraucht. Da 
beherrsche ich die meisten Sprachelemente.

* C++: Seit dem Studium nie mehr gebraucht. Theorie ist aber noch 
einigermassen präsent.

* C#: Ich besitze ein Buch :-)

* html, php, css: Ist zwar fachfremd, hab ich aber immer wieder mal 
gebraucht

* Python: Hab ich schon mal installiert und ein Skript geschrieben.

* LabView: Da kann ich einiges.

* Software Versionsverwaltung, Branching, usw. : Hab ich keine Ahnung 
von.

* Mikrocontroller: Bis jetzt nur PIC und AVR 8 Bit.


Mein Fahrplan, den ich mir ausgedacht habe:
1) Zuerst auf nem 8 Bit uC mit einem kleinen Projekt alle C Elemente 
repetieren.
2) Eine Hardware und IDE für embedded C++ beschaffen und das 
objektorientierte programmieren einüben.
3) Software Versionsverwaltung erlernen

Was könnte ich sonst noch tun?
Was wären gute Thmen, die ich mir aneignen könnte?

Welche Ausrüstung (uC Development Board und IDE) ist bei Schritt 2) für 
einen Anfänger geeignet? Ich will nicht zuviel Energie darauf 
verschenden, das Ding zum laufen zu bringen, sondern ich will einfach 
einstecken und drauf los programmieren.

Vielen Dank für Tips, Anregungen und Ermutigungen ;-)

Knut

: Bearbeitet durch User
von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Hol dir ein Launchpad deiner Wahl.
Anstecken Software runterladen und loslegen.

von David K. (knut-knueppel)


Lesenswert?

Patrick L. schrieb:
> Hol dir ein Launchpad deiner Wahl.
> Anstecken Software runterladen und loslegen.

Danke, das ist mal ein karer Tip für den Anfang. Ich bin aml auf der 
Seite von TI gewesen.

* Das programmiert man ja mit Code Composer Studio. Ist die IDE 
einigermassen benutzerfreundlich? Also nicht, dass ich zuerst 1000 
Einstellungen konfigurieren muss?

* Da ist c++ standardmässig möglich, oder? Dazu muss ich nicht eine 
superteure Extension dazukaufen, bei der ich dann schon bei der 
Installation scheitere?

* Gibt es vieleicht eine Empfehlung, ob ich da mit den MSP430, den ARM 
oder den C2000 Chips starten soll? Einerseits soll der Chip 
anspruchsvoll genug sein, dass sich c++ (anstelle von c) lohnt, 
andererseits will ich keinen Chip, der so komplex ist, dass ich einen 
Digitalport zuerst über 20 Register konfigurieren muss, bevor ich eine 
LED ansteuern kann.

Sorry, meine Fragen sind vieleicht für erfahrene Entwickler etwas naiv, 
aber ich habe infach etwas Berührungsängste mit komplexeren Systemen.


Aber das hier ist ja das Beufs-Forum, also nicht zu tief ins Detail. 
Sonst mache ich dann einen Extra Thread woanders auf.

Hat vieleicht sonst jemand Ideen, Welche Fachkompetenz ich mir 
sinnvollerweise zutun könnte?

Was ist zum Beispiel ein sinnvolles Tool um erste Erfahrung mit 
Softwareversionsverwaltung zu machen?

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Die GCC von TI ist nicht nur eine IDE sondern eine Comunity und nein nix 
Parameter, den Richtigen Launchpad anhängen, die GCC findet ihn meist 
sogar selber und schlägt dir dann Projekte vor.

Aber es gibt auch IAR als Umgebung und mittlerweile noch paar andere.

Auch Opensource gibt es auf Github zum Download.

Du kannst aber auch ein Launchpad (Nicht TI) Kaufen, wobei bei TI kann 
ich dich zu 100% unterstützen.
Zur zeit dümpeln bei mir etwa 300 TI Launchpad rum, da ich für jedes 
Neue Projekt ein Launchpad hole und dann stepp by stepp das Drumherum 
aufbaue.
Wenn es läuft mache ich dann erst eine Platine, das spart Unmenge an 
Zeit, da es für fast jede Anwendung ein Launchpad oder Dok dazu gibt.

von Alex -. (alex796)


Lesenswert?

Meine Empfehlung, ganz klar:

Nimm ein STM32F4 ARM von STMicroelectronics und ziehe dir die Udemy 
Kurse von Fastbitlab rein.

MCU:
https://de.aliexpress.com/item/1005001456186625.html?gatewayAdapt=glo2deu&spm=a2g0o.9042311.0.0.20b24c4dtb7mBH

Kurse:
http://fastbitlab.com/

Warte ein paar Tage, bis Udemy eine Aktion hat, dann bekommst du die 
Kurse für ca 10Eur oder so.

Man muss sich ein wenig an den Lehrer und seinen Lehrstil gewöhnen. Kann 
man sich damit abfinden und anfreunden, sind die Kurse wirklich 
brauchbar für Anfänger und etwas Fortgeschrittene.

Mit dem Wissen kannst du dann deine eigenen kleinen Projekte über Github 
in deinen Bewerbungen präsentieren.

Gruß,

von Embedded (Gast)


Lesenswert?

Ob ein Jahr reicht? Viele Programmierer haben, wenn man noch ihr 
Jugendhobby dazu betrachtet, mit 40 Jahren schon 25 Jahre 
Programmiererfahrung.

von Senf D. (senfdazugeber)


Lesenswert?

Embedded schrieb:
> Ob ein Jahr reicht? Viele Programmierer haben, wenn man noch ihr
> Jugendhobby dazu betrachtet, mit 40 Jahren schon 25 Jahre
> Programmiererfahrung.

Es ist vermutlich einfach nur mal ein Anfang, freilich wird sich der 
Threadersteller nach einem Jahr Selbststudium nicht mit berufserfahrenen 
Entwicklern messen können.

Mich würde aber noch die Motivation des Threaderstellers interessieren. 
Wie kommt man im fortgeschrittenen Alter von 40 Jahren plötzlich auf den 
Trichter, dass einem Hardware-Entwicklung nicht mehr gefällt, und dafür 
lieber im Software-Bereich bei nahezu Null anzufangen? Warum?

von Reinhard S. (rezz)


Lesenswert?

David K. schrieb:
> aber ich habe infach etwas Berührungsängste mit komplexeren Systemen.

Was erwartest du dann aber von Embedded SW?

> Hat vieleicht sonst jemand Ideen, Welche Fachkompetenz ich mir
> sinnvollerweise zutun könnte?

Handwerk? Lehrer? Gehen haufen Leute in Rente und Nachwuchs sieht nicht 
so üppig aus. :D

> Was ist zum Beispiel ein sinnvolles Tool um erste Erfahrung mit
> Softwareversionsverwaltung zu machen?

Ich höre in dem Bereich (bin da aber Laie) eigentlich nur noch git, es 
gab wohl auch mal "Subversion".

von David K. (knut-knueppel)


Lesenswert?

Patrick L. schrieb:
> Die GCC von TI ist nicht nur eine IDE sondern eine Comunity und nein nix
> Parameter, den Richtigen Launchpad anhängen, die GCC findet ihn meist
> sogar selber und schlägt dir dann Projekte vor.

Klingt gut! Code Composer wird auch in meiner jetzigen Firma verwendet. 
Da kann ich mir sicher auch mal einen Entwickler schnappen und mir etwas 
zeigen lassen.
Und sonst komme ich auch gerne im Forum wieder daruaf zurück. Aber im 
Moment will ich mich noch nicht in Details verlieren. Im Moment will ich 
mir einfach ne Roadmap zurechtlegen.



Alex -. schrieb:
> Nimm ein STM32F4 ARM von STMicroelectronics und ziehe dir die Udemy
> Kurse von Fastbitlab rein.

Danke, das kannte ich noch nicht. Ich hab vorhin kurz bie Udemy 
reingeschaut und das sieht gut aus. Ich werde das noch genauer anscheun. 
Danke!!
Ein wenig kosten darf es ja schon.

Embedded schrieb:
> Ob ein Jahr reicht? Viele Programmierer haben, wenn man noch ihr
> Jugendhobby dazu betrachtet, mit 40 Jahren schon 25 Jahre
> Programmiererfahrung.

Klar bin ich nach einem Jahr erfahrener Programmierer. Ich will bis dann 
lediglich besser sein als ein Studienabgänger. Ich hab in meiner Jugend 
ja auch programmiert und auch später ab und zu gecodet. Und die c++ 
Theorie vom Studium ist noch zu einem gorssen Teil im 
(Unter-)Bewusstsein.
Timer, ADC, UART, Interrupts, I2C, SPI, Watchdog, Clockkonfiguration, 
... hab ich in der Freizeit alles in C immer wieder mal gemacht.

Was mir fehlt ist die Praxis im objektorientierten programmieren, 
Erfahrung mit Grossprojekten, Versionsverwaltung, Softwaretesting, 
Kollaboration mit anderen Programmierern, Projektplanung, UML, ...

Senf D. schrieb:
> Mich würde aber noch die Motivation des Threaderstellers interessieren.
> Wie kommt man im fortgeschrittenen Alter von 40 Jahren plötzlich auf den
> Trichter, dass einem Hardware-Entwicklung nicht mehr gefällt, und dafür
> lieber im Software-Bereich bei nahezu Null anzufangen? Warum?

Mir hat schon immer beides gefallen. Hardware und Software. Mit meiner 
ersten Stelle bin ich einfach mehr in die HW abgerutscht als ich wollte 
und wie es so ist, bleibt man oft bei dem, was man bis anhin gemacht 
hat. Oft bestimmt ja dein Arbeitgeber, in welchem Ressort du dich 
spezialisierst.

Je länger je mehr stresst mich an der HW, dass es viel zu viel um 
Zulassung, Compliance, Safety, EMV und Qualität geht.  Auch Lieferkette, 
Produktionsorte und Herstellungskosten haben so hohe Präsenz in der F&E, 
dass die eigentlich coolen Dinge wie Schaltungsentwicklung, löten, 
messen, und Kurzschlüsseproduzieren einfach zu kurz kommen. Ich mache 
fast nur noch Papierarbeit.

In der Firmwareentwicklung scheint mir das Problem weniger zu bestehen. 
Jedenfalls in den Firmen, bei denen ich gearbeitet habe. Klar geht es da 
auch viel um Qualität, Testing, Planung, usw... Trotzdem hab ich das 
Gefühl, dass ich in der Firmwareentwicklung meine Nerd-Qualitäten besser 
ausleben kann.

Bisher hab ich Hardware professionell gemacht, SW als Hobby. Jetzt will 
ich das umkehren.

: Bearbeitet durch User
von Dieter H. (kyblord)


Lesenswert?

Embedded schrieb:
> Ob ein Jahr reicht? Viele Programmierer haben, wenn man noch ihr
> Jugendhobby dazu betrachtet, mit 40 Jahren schon 25 Jahre
> Programmiererfahrung.

Reicht locker.

von Dunno.. (Gast)


Lesenswert?

David K. schrieb:
> In der Firmwareentwicklung scheint mir das Problem weniger zu bestehen

Nein. Das hast du da genau so.

Aus meiner Sicht: entweder in ne kleinere Bude gehen, vielleicht sogar 
direkt HW und SW machen..

Da ist für viel Papierkram schlicht zu wenig manpower..

von Zero V. (Firma: Freelancer) (gnd)


Lesenswert?

David K. schrieb:
> Mein Plan ist, während einem Jahr zuhause KnowHow anzueignen

Das ist der falsche Weg. Du musst Industrieluft schnuppern, z.B
 durch Praktika oder schlecht bezahlte Absolventenjobs.

von Bernd (Gast)


Lesenswert?

Boomer 2022 - der Thread.

von K. H. (hegy)


Lesenswert?

David K. schrieb:
> Mein Plan ist, während einem
> Jahr zuhause KnowHow anzueignen, vieleicht auch eine Weiterbildung
> besuchen. Und mich dann für Embedded Softwareentwicklung zu bewerben.
> Wie könnte ich diese private Weiterbildung anpacken?

Ich gehe mal davon aus, dass du einen Hochschulabschluss hast. Dann 
frage ich mich, in welchem Land ist dein Arbeitsmarkt? Andere Länder, 
andere Sitten. In der Schweiz kann es anders sein als in Deutschland.

Allgemein wird es nicht einfach werden. Neben den Fachwechsel kommt 
vllt. noch ein Branchenwechsel dazu, dass wird ganz allg. im deutschen 
Arbeitsmarkt als Problem gesehen.
Warum nutzt du deine Erfahrung nicht und baust die weiter aus, also 
Schwerpunkte setzen und dann z. B. Lead-Engineer werden? Vllt. hilft es 
ja mal abzuchecken, was deine Kollegen in anderen Firmen so tun, wie sie 
sich im Fachgebiet entwickelt haben und wohin, also ein wenig 
Orientierung suchen. Ich würde mir es ganz allgemein verkneifen, meine 
aufgebaute Erfahrung in die Tonne zu werfen und nochmal was anderes neu 
anfangen.

Und dann kommt evtl. noch die Frage dazu, warum ein Jahr Pause?
(interessiert mich nicht, aber künftige Arbeitgeber schon)

Ich würde bei deinen Plan versuchen das bei deinem Arbeitgeber zu 
machen, also die Abteilung wechseln und dann Einarbeitung in das neue 
Gebiet. Ich denke, das wird am wenigsten Reibungsverluste verursachen. 
Es muss nur der Arbeitgeber überzeugt werden.

David K. schrieb:
> Wie könnte ich diese private Weiterbildung anpacken?

Wichtig finde ich, dass da was hinter steht, also beispielsweise ein 
mehr oder weniger anspruchsvolles Projekt, dass du selber löst, dass du 
dich selbst in die Materie einfuchst. Dann lässt man auch gleichzeitig 
sehen, dass Motivation und Durchhaltevermögen dabei ist.

> Welches KnowHow soll ich mir aneignen?
Dass ist nicht so ganz wichtig. Wichtig ist, dass du es gemacht und 
geschafft hast und bei diesem Prozess kommen von ganz alleine die Dinge 
nach vorne, die wichtig sind. Vllt. wird irgendwann der Quellcode zu 
komplex, dass du dir denkst, mit C++ anstatt C komme ich weiter und 
schreibst einiges um oder dass du auf einmal feststellst, dass deine 
Programmierweise zu viel Speicher frisst oder dass das Gerät, was auf 
Batterie laufen soll, zu viel Batterien frisst. Und irgendwo ist noch 
ein Bug, wie komme ich dahinter, was da wo schief läuft bzw. wo das 
Programm falsch abbiegt.

> Wie kann ich mich über das Level eines Studienabgängers anheben?
Üben, Erfahrung sammeln, Projekt durchziehen und zeigen inkl. Know-How. 
Kurzum, motivationsbedingt einen raushauen. Ich denke, damit kannst du 
mehr Leute (Arbeitgeber) beeindrucken als dass du sagst, ich kann C++ 
mit Smartpointer, etwas Python (ohne GUI) und mixed Code öööhmmm, ja/nee 
...

Zudem kommt dann noch die Frage, warum jetzt der Wechsel? Hast du dich 
die letzten 15 Jahre gelangweilt oder was gemacht, wo keine echte 
Motivation bei war? (Wiederholungstäter?)

> Was ich schon kann:
> Im Elektrotechnikstudium (Level Fachhochschule Schweiz) hab ich
> natürlich schon Softwareentwicklung gehabt. Nur ist das nie so richtig
> vertieft worden.

Was meine Studium-Kollegen damals an SW beigebracht haben bekommen, war 
im Grunde nicht viel, man könnte auch sagen, fast nix. Deswegen könnte 
man erst recht von dir erwarten, dass deine Motiovation, wenn du über 
dem Studentenlevel Abschluss nach einem Jahr stehen willst, zeigen 
kannst. Deswegen "ballern" und nicht "rumspielen".

> Ich beherrsche:
> * C: Hab ich dann und wann auf 8 Bit Controllern gebraucht. Da
> beherrsche ich die meisten Sprachelemente.
Das ist nicht so ganz wichtig. Wichtig ist bei 8-bittern, dass man bei 
wenig Speicher ressourcenschonend damit umgehen kann. Ich habe auf einen 
ATmega48 vor diversen Jahren eine paramtrisierbare Bussimulation für 
LKW's programmiert (konform nach SAE-1... als State Machine, zeit- und 
ereignisgesteuert) und das Ding lief 1A+. Ich bin darauf richtig stolz 
zumal der ATmega48 nur 1 kB RAM hat. Dafür habe ich mit allem drum und 
dran ca. 160-180 Stunden gebraucht.

> * C++: Seit dem Studium nie mehr gebraucht. Theorie ist aber noch
> einigermassen präsent.

Das schöne an C++ ist, dass man dazu keine HW braucht um es zu lernen. 
Ich sehe es mal so, für Controller, egal ob 32-bit oder 8-bit, ist alles 
fundamentale, was mit der HW des Controllers zu tun hat, in C 
geschrieben. Wenn du den Controller also kennen lernen willst, hast du 
es mit C und einem Dev- bzw. Eval-Kit zu tun, dazu einen Debugger und 
womöglich mit Multimeter, Logic-Analyzer und Scope. Wenn du C++ lernen 
willst und dann vllt. noch mit GUI, dann reicht ein Laptop und irgendwo 
eine vernünftige Arbeitsumgebung. Und vllt. ein gutes Tutorial. In der 
Tube gibt es eine Serie, die ich ganz geil finde. Sie heißt "C++ von { 
bis }" = C++ von Anfang bis Ende.

> * C#: Ich besitze ein Buch :-)

C# auf Contoller? Ich kenne ein Firma, die sucht Leute, die Java auf 
Controllern können.

> * html, php, css: Ist zwar fachfremd, hab ich aber immer wieder mal
> gebraucht

Das ist noch higher-level als C++. Habe ich noch nie gebraucht.

> * Python: Hab ich schon mal installiert und ein Skript geschrieben.

Python war bei mit immer interessant, wenn es um Automatisierung von 
Tests ging o. ä. Die Kommunikation mit dem Dev-Kit ging über USB bzw. 
seriell.

> * LabView: Da kann ich einiges.
Ich kann LabWindows/CVI, Labview im Embedded Bereich wird es sicher 
geben aber ist das notwendig oder nur ein nice to have?

> * Software Versionsverwaltung, Branching, usw. : Hab ich keine Ahnung
> von.

Das wird wichtig, wenn mehrere Leute an einem Projekt arbeiten. Also 
wird dein Projekt, womit die deine Motivation zeigst, auch GIT-mäßig 
darunter verwaltet. Einfach um zu zeigen, dass du dich damit befasst 
hast und vllt. auch kannst.

> * Mikrocontroller: Bis jetzt nur PIC und AVR 8 Bit.
8-bit Controller und C++ wird nicht so einfach werden, weil die 8-bitter 
nicht viel RAM haben. Wie schon geschrieben, da ist der sparsame bzw. 
sinnvolle Umgang mit den Ressourcen (RAM, Timer (soft/hard), IO-Ports, 
Stromverbrauch, Fließkommarechnen ...) wichtig.
Bei 32-bittern gibt es mehr RAM und IO-Ports und oft mangelt es nicht an 
den Ressouren, schon eher, wie bei mir gerade, an der nicht vorhanden 
Fließkomma Fähigkeit = die FPU fehlt (oder ich muss mir Workarounds 
ausdenken und das Komma später in den String dängeln, Prozessorwechsel 
ist richtig blöd). Dafür haben aber 32-bitter Dinge drin, die sind schon 
anspruchsvoller, wie z. B. Verschlüsselung, DMA, ...  und vllt. noch ein 
Real-Time Betriebssystem.

> Mein Fahrplan, den ich mir ausgedacht habe:
> 1) Zuerst auf nem 8 Bit uC mit einem kleinen Projekt alle C Elemente
> repetieren.

Zum Einstieg, Auffrischungskurs.

> 2) Eine Hardware und IDE für embedded C++ beschaffen und das
> objektorientierte programmieren einüben.

Ich würde erstmal alles selber konfigurieren, initialisieren und 
gebrauchen und das passiert in C. Auf einem 8-bitter bei 
Auffrischungskurs und dann bei einem 32-bitter. Wichtig dabei finde ich, 
ist gute Dokumentation. Frustrierend ist es, wenn man ein Problem hat 
und in Doku A steht was anderes als in Doku B und C schreibt wieder was 
anderes und nach Tagen ohne weiter zu kommen, steht die Lösung im Forum 
irgendwo beim Hersteller, wo es dann heißt, alle Lösungen sind 
unvollständig bzw. unrichtig. Und ein Mitarbeiter der Fa. schreibt dann 
ausführlich, wie es geht und warum es so muss und nicht anders. Die User 
fragen sich dann, warum das nicht irgendwo im Datenbladl steht oder 
sonstwo. (Das ist meine TI-Erfahrung, s. u.)

> 3) Software Versionsverwaltung erlernen

Learning by doing.
Neben GIT gibt es noch SVN. Aber das ist, denke ich, nicht sooo wichtig. 
Wichtig ist, dass man die "Mechanik" dahinter verstanden hat und damit 
umgehen kann. Wenn dann mal was schief läuft, dann gibt es sicher 
jemanden, der das irgendwie wieder gerade ziehen kann.

> Was könnte ich sonst noch tun?
> Was wären gute Thmen, die ich mir aneignen könnte?
Elementäre Busprotokolle erlernen wie SPI, I2C und andere inkl. 
Initialisierung. Und dann gleichzeitig beide benutzen ohne dass es hakt 
und klemmt...
Real-Time OS mit den Themen wie Tasks erstellen mit Prioritäten, Mutexe 
und Semaphoren, wie man was macht, was es dazu noch alles gibt und 
generell solche Dinge wie State-Machine, was das ist und was es macht 
usw.

Und ganz wichtig: Motivation und Durchhaltevermögen zeigen. Ich denke, 
das ist die größte Herausforderung. Und auch ein halb fertiges Dingen 
zeigen können.

Ob man das alles in einem Jahr schafft? Ich habe da meine Zweifel.

> Welche Ausrüstung (uC Development Board und IDE) ist bei Schritt 2) für
> einen Anfänger geeignet? Ich will nicht zuviel Energie darauf
> verschenden, das Ding zum laufen zu bringen, sondern ich will einfach
> einstecken und drauf los programmieren.

Das finde ich eine suboptimale Einstellung. Sicher gibt es solche Dinge 
aber die Hintergründe sollte man sich schon aneignen auch deswegen, wenn 
was schief läuft, dass man weiß warum, welche Auswirkungen das hat und 
wie man damit umgeht.
Was schon von Haus aus was kann, sind z. B. STM32F... Dev-Kits bzw. 
Eval-Boards. Zudem gibt es zu dem STM32-Zeug (und sicher auch zu dem 
STM8-Zeug sowie Atmel) gute und eindeutige Doku, von TI (wurde oben 
schon mal empfohlen) kann ich das leider nicht sagen, da hatte ich vor 3 
Jahren das Problem, was ich oben schon beschrieb, mit halbgarer Doku, im 
Forum (e2e.ti.com, (enginer to engineer)) dann nach Tagen die Antwort 
finden usw. Auch toll, die TI's schrieben zu einem anderen Problem mit 
I2C Kommunikation kein Wort, wie das Verhalten des Controllers ist, wenn 
der I2C Eingangsbuffer beschrieben wird während eine I2C Kommunikation 
läuft. Ich habe bei der Doku bzgl. TI's C2000 und CC3240 oder so 
Controllern einen ziemlich schlechten Eindruck.

Noch was zu dem STM32 Zeug: auf den Seiten von ST gibt es zu den 
einzelnen Dev-Kits/ Eval-Board reichlich Demo-Programme, die sich mit 
einem Thema beschäftigen, z. B. STM32F030 und mehrere Timer, läuft 
direkt auf dem Board mit LED's und Tasten. Dazu gibt es dann auch eine 
Doku, die alles erklärt. Und es gibt eine große Community, da kann man 
auch Infos bekommen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

David K. schrieb:

> Meine Frage kurz zusammengefasst: Wie bereite ich meinen Wechsel von
> Hardwareentwickler zum Embedded-Softwareentwickler vor?

Kurze Antwort: einfach machen. :-)

Sieh zu, dich möglichst aktiv und kreativ zu betätigen.

Mein Einstieg war übrigens eine malloc()-Implementierung für die 
avr-libc. ;-) (Die war nicht ohne Bugs, aber sie lebt heute noch.)

Beteiligung an Opensource-Projekten in dem Bereich ist immer ein gutes 
Betätigungsfeld, wenn du nicht gerade genügend eigene Projekte hast, die 
du angehen kannst.

Mach dir den Einstieg nicht zu schwer; auch mit einem AVR kann man das 
Thema nach wie vor angehen. Hat den Vorteil, dass du schneller und auch 
"bare metal" loslegen kannst. Während ich mir eine Cortex-M-Umgebung 
noch einrichte, läuft das erste AVR-Projekt schon lange, denn dort 
genügt schon der Klassiker
1
avr-gcc -Os -mmcu=atmega328 -o helloworld.elf helloworld.c

um ein lauffähiges Binary zu erzeugen. Startup-Code, Linkerscript etc. 
bringt die Toolchain passend mit.

Arbeite grundsätzlich mit eingeschalteter Optimierung beim Compiler. 
Alles andere ist Kokolorus, du debuggst dann was ganz anderes als das 
eigentliche Problem. OK, deine C-Kenntnisse müssen natürlich sattelfest 
genug sein, dass du nicht nur Anfängerfehler debuggen musst: Zeiger und 
Indizes verwechselt und solche Dinge. Die kann man ohne Optimierung 
vielleicht wirklich einfacher debuggen, aber das lernt man viel 
schneller gleich auf dem PC. Alle ernsthaften Probleme treten eh erst 
mit eingeschalteter Optimierung auf, das fängt beim berüchtigten 
vergessenen "volatile" an für eine Variable, die aus verschiedenen 
Kontexten gesetzt und abgefragt wird. Da beginnt die eigentliche Arbeit 
des Embedded-Entwicklers: man muss kreativ werden, wie man das Problem 
gefasst bekommt. Debugger mit Singlestep geht so gut wie nie wirklich 
brauchbar. Für jedes "richtige" Embedded-Problem ist beim Erreichen des 
ersten Breakpoints sowieso alles zu spät, weil das Timing im Eimer ist. 
Man kann dann nur noch post-mortem debugging machen, also fast so, als 
hätte man einen Coredump vor sich. Man muss sich da rantasten. Mal ein 
Array mit Log-Daten irgendwo hinlegen um so zu tracen, wo die Firmware 
schon lang gekommen ist. (Das Entwicklungssystem sollte immer genügend 
Speicherreserven haben, sowohl RAM als auch Flash.) An bestimmten 
Stellen mit GPIOs wackeln und das mit einem Logic Analyzer tracen. 
(Falls du noch keinen hast: das wäre deine ersten Anschaffung.)

> * C: Hab ich dann und wann auf 8 Bit Controllern gebraucht. Da
> beherrsche ich die meisten Sprachelemente.

Musst du fließend sprechen können.

> * C++: Seit dem Studium nie mehr gebraucht. Theorie ist aber noch
> einigermassen präsent.

Nach wie vor eher selten. Wenn man es benutzen kann (und der Kunde das 
vor allem auch will), kann es ganz praktisch sein. Man sollte stets im 
Hinterkopf behalten, welches Feature wie viele Ressourcen kostet. Eine 
Zeile C++ kann viel schneller den erzeugten Assemblercode explodieren 
lassen als eine Zeile C. Wenn man es wirklich sinnvoll benutzen kann, 
kann man aber manche Sachen sehr schön und gut dokumentierend 
abstrahieren.

> * C#: Ich besitze ein Buch :-)

Braucht kein Mensch in diesem Bereich.

> * html, php, css: Ist zwar fachfremd, hab ich aber immer wieder mal
> gebraucht

Brauchst du höchstens, falls deine Plattform sowas ausgeben will. Aber 
dann wirst du stattdessen besser jemanden fragen, der sich damit gut 
auskennt.

> * Python: Hab ich schon mal installiert und ein Skript geschrieben.

Braucht man laufend. Nicht so sehr auf dem embedded target (wenngleich 
es hübsch ist, wenn man eins hat, wo sowas läuft, aber das sind die 
etwas größeren), aber auf dem PC. Auswerten von Logdaten, PC-Gegenstelle 
zur Schnittstelle auf dem Controller, allgemeine 
Automatisierungsaufgaben.

In meinem aktuellen Job habe ich vielleicht 80 % Python auf dem PC und 
20 % C auf der MCU aktuell.

> * LabView: Da kann ich einiges.

Kenne ich nicht. ;-)

Messgeräte kann man prima auch mit Python ansteuern.

SCPI zu kennen, ist dafür dann wiederum sehr hilfreich.

> * Software Versionsverwaltung, Branching, usw. : Hab ich keine Ahnung
> von.

Essenziell. Eigentlich auch für Hardwareentwicklung, wenngleich ich 
zugeben muss, dass ich bei Dingen wie privaten PCB-Entwürfen da manchmal 
schlampig bin. Da sollte ich noch viel öfter auch Zwischenschritte 
aufzeichnen.

Aktuell macht praktisch jeder Git. Ich finde dort zwar viele Dinge nicht 
so toll gelöst, aber es gibt halt ganz viel Tooling drumrum (Gitlab und 
solche Dinge), weshalb daran nunmehr kein Weg vorbei führt.

Was bei dir in der Liste noch fehlt: grundlegende Assemblerkenntnisse 
für die verwendete(n) Plattform(en). Damit sollst du nicht programmieren 
(dauert viel zu lange), aber du musst das lesen und analysieren können, 
was der Compiler ausspuckt. Spätestes im Disassembler-Listing des 
Debuggers solltest du in der Lage sein nachzuvollziehen, was der 
Compiler da zusammen gestöpselt hat.

von Purzel H. (hacky)


Lesenswert?

Der Standard Einstieg ist darauf zu arbeiten. Das Schwierige an Embedded 
Software ist uebrigens nicht die Sprache, sondern das Drum-Herum.
Die Software muss fehlerfrei sein, denn ein Update ist nicht immer 
moeglich, auch falls man das denn wollte. Ein Rueckruf geht extrem ins 
Geld. Und eigentlich ist die Software sehr oft sicherheitsrelevant. 
Bedeutet man muss auch ueber die Normen Bescheid wissen. Und man muss 
die Hardware sehr genau kennen. Man sollte auch mit dem Einkauf zu tun 
haben. Sonst kauft ein smarter Einkaeufer ein Schnaeppchen, mit einer 
einzigen Ziffer anders in der Bezeichnung eines Bauteils und schon hat 
man unerklaerbare Ausfaelle. Wo liegt der Fehler ? Hardware - Software ?

Debuggen hat einen viel hoeheren Stellenwert, denn die Software soll 
fehlerfrei sein.
Mich wundert eigentlich nur wie man Hardware machen kann, ohne die 
Embedded Software dazu ...? Ich mache schon seit immer beides zusammen.

Ah, ja, Embedded hat meist auch eine PC Anbindung. Die sollte man auch 
gleich machen. Sonst wird das nie was.

: Bearbeitet durch User
von Embedded (Gast)


Lesenswert?

Also für mich ist die Hauptkompetenz eines Embedded Entwicklers das 
effiziente Einsetzen des Speichers und Rechenzeit.
Im Vergleich dazu gibt es auf dem PC unendliche Ressourcen.

Dementsprechend muss auch ein Embedded-Entwickler sich auch um das 
Memory Mangement bis zur genauen Speicheraddresse kümmern und wissen, 
dass auch z.B. wenn man nicht das Attribut "packed" benutzt, dass es 
dann zum Padding auf die Wordbreite des Systems kommt.

Das andere gravierende Problem bei Embedded ist die Synchronisation des 
Programmablaufs.
Wie teile ich Ressourcen, z.B. Peripherals, einzelnen Tasks zu. Tasks 
müssen pausieren, wenn Daten und Ressourcen noch nicht zur Verfügung 
stehen.
Tasks müssen sich gegenseitig mit Mutex ausschließen, wenn sie auf eine 
einzelne Ressource, wie gemeinsame globale Daten oder ein Peripheral 
zugreifen wollen.
Bei mehrere Peripherals kann man Semaphores benutzen, wobei man dann die 
Peripherals als Tokens verpacken muss.
Datenaustausch über globale Variablen ist unglücklich, daher sollte bei 
Embedded immer ein Realtime-OS zum Einsatz kommen, damit Daten über 
sichere Messageboxes ausgetauscht werden.
Wie bei der Thread-Programmierung üblich, sollten auch Signals und 
Events benutzt werden.

So sieht der Stand der Technik aus, wobei ich nicht ausschließe, dass 
man für Lowlevel-IO-Aufgaben auch mal einen einfachen 8051 oder AVR8 
programmieren muss, was dann wieder eine Wissenschaft für sich ist im 
Verlgeich zum eher komfortablen ARM-Cortex Architektur.

Daher ist es wichtig, eine ganze Bandbreite von Controllern zu kennen, 
dazu gehören auch PIC und ARM-Cortex Controller von verschiedenen 
Herstellern wie TI, STM, Microchip (ATMEL), NXP usw.

Als Embedded-Entwickler hat man es auch gelegentlich mit 
programmierbaren Prozessoren bzw. SoMs mit SoCs auf Embedded-Linux-Basis 
oder FPGAs. Manchmal gibt es das sogar kombiniert, einen MPSoC, FPGA mit 
SoC.
Das nur mal nebenbei.

von Embedded (Gast)


Lesenswert?

In diesem ganz nicht ernst gemeinten Thread sind auch einige Hürden zum 
Embedded-Entwickler gut beschrieben:

Beitrag "Bootcamp embedded systems"

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Embedded schrieb:
> Also für mich ist die Hauptkompetenz eines Embedded Entwicklers das
> effiziente Einsetzen des Speichers und Rechenzeit.

Die Hauptkompetenz für mich ist, dass es sicher und stabil läuft, was 
produziert wird.

Ressourceneffizienz kann eine Rolle spielen, aber oft nicht die größte. 
Das heißt nicht, dass man damit verschwenderisch umgehen sollte, aber 
Stabilität ist wichtiger. So'n Kram wie "packed" spielt im realen Leben 
oft genug eine völlig untergeordnete Rolle.

Für nicht genutzte Ressourcen bekommt man vom Controller-Hersteller eh 
kein Geld zurück.

> Daher ist es wichtig, eine ganze Bandbreite von Controllern zu kennen

"It depends."  Lieber mit einem effizient arbeiten können als 20 
verschiedene nur halbherzig kennen. Oft genug hat der Kunde eh seine 
ganz eigene Idee.

von David K. (knut-knueppel)


Lesenswert?

Vielen Dank für all eure Antworten, Ermutigen, Entmutigungen, Tips und 
Hiweise. Ich weiss das alles sehr zu schätzen.

Mittlerweile hab ich meine 8-Bit Developmentbords ausgepackt und die 
UART tauscht fleissig Daten mit dem PC-Terminal aus. Natürlich 
interruptgesteuert ;-) Erste Materialbestellungen für weitere Hardware 
ist getätigt. Will heissen: Ich hab mich auf den Weg gemacht und bin 
gespannt, wie schnell ich wie weit komme.

Übrigens mache ich das ganze berufsbegleitend. Wenn am Abend die Kinder 
im Bett sind, investiere ich einige Stunden in meine Weiterbildung. 
Hoffentlich halte ich es durch, mehrere Male pro Woche intensiv dran zu 
sein.


Um auf einige eurer Anregungen etwas einzugehen:

Da ich in einer Firma Arbeite, die grpssere Geräte herstellt, ist die HW 
und SW Entwicklung strickte getrennt. Am liebsten würde ich auch beides 
machen. Aber in grösseren Firmen, die auch gut bezahlen ist die 
Entwicklung oft aufgeteilt. Ich fände es aber am coolsten, einen Job zu 
haben, wo ich Hardware und Firmware gleichzeitig machen kann.


Da ich Firmwareentwickler in meiner Abteilung habe, kann ich sicher viel 
auf die zugehen und fragen. Trotzdem will ich da nicht zu aufdringlich 
sein, weil ich meinem Chef meinen angepeilten Wechsel noch nicht 
offenbaren will.

Am meisten zu lernen hab ich vermutlich (wie ienige angedeutet haben) 
bei Real Time, Threading und Sicherheit. Da habe ich noch keine Ahnung, 
wie ich das anpacke.


Ein Projekt, das ich machen will habe ich schon länger im Kopf: Einen 6- 
oder 8- beinigen Roboter (Modellbauservos und 3D Drucker) der sich mit 
einem neuronalen Netzwerk selber das laufen beibringt. Und wenn das 
laufen etwas anspruchsvoll ist, soll er doch wenigstens selber lernen, 
das Gleichgewicht zu halten.

Mit Github hab ich angefangen, mich zu befassen. Werde da in den 
nächsten Tagen einen Account einrichten und beginnen, selber 
geschriebenen Code hochzuladen.

Für die Messgeräteansteureung mit Python hab ich auch schon einen Plan. 
Bei uns in der Firma steht im EMV Keller ein HF-Signalgenerator, der 
danach schreit, endlich automatisiert angesteuert zu werden. Kann sicher 
nicht schaden, wenn ich bei der Stellensuche vorweisen kann, dass ich 
sowas schon mal gemacht haben.

Speziellen Dank an K. H. (hegy) für die lange Anbtwort. Da konnte ich 
viel nützliches draus ziehen.

Wie ich mich an Opensource Themen beteiligen soll, weiss ich noch nicht. 
Bin auch nicht sicher, ob ich die richtige Vorstellung habe, wie gut man 
dazu sien muss, wie viel Energie man reinstecken sollte. Jedenfalls 
könnte es sicher nicht schaden, einige opensource projekte zu studerien 
um zu schauen, wie andere Leute ihren Code schreiben.

Und ja, grundlegende Assemblerkenntnisse, könnten sicher auch nicht 
schaden. Zumindest so, dass ich lesen kann, was der compiler produzeirt 
hat. Das wird für mich eine grössere Hürde werden.

Nochmals herzlichen Dank für alle Antworten!!!

Gruss, David

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

David K. schrieb:
> Mit Github hab ich angefangen, mich zu befassen.

"git" heißt nicht (notwendig) "Github".

Du kannst ein git-Repository auch ganz simpel lokal einrichten, ganz 
nicht-verteilt. Dann brauchst du Dinge wie "clone", "fetch", "push" und 
"pull" nicht, aber den Workflow hinsichtlich "add", "commit", "checkout" 
auf jeden Fall, und irgendwann sicher auch "branch" und "merge".

von K. H. (hegy)


Lesenswert?

David K. schrieb:
> Speziellen Dank an K. H. (hegy) für die lange Anbtwort.

Vielen Bitte.
Die Kostennote an welche Adresse?

> Da konnte ich viel nützliches draus ziehen.

Und danach ist mir noch das eine oder andere dazu eingefallen.

Jörg W. schrieb:
> "git" heißt nicht (notwendig) "Github".

Github ist von Microsoft übernommen worden. Damit sind viele Leute von 
Github abgehauen und u. a. nach Gitlab gewechselt.
Vllt. gibt es mit Microsoft dann künftig ein anderes Git, eins das mehr 
kann und mehr kaputt machen kann und zudem nicht besonders 
benutzerfreundlich ist oder logisch. Es könnte dann ein MS-Git mit 
anderen Kommandos geben, statt "push", "pull", "commit" usw. gibt es 
dann "up", "down", "transfer", "take", "give", "buy¨, "sell" usw. und 
ganz neu "repair", wobei das noch mehr Chaos verursacht.

Neben Git gibt es auch noch SVN. Wo die Unterschiede genau liegen weiß 
ich nicht.
Und solltest du z. B. eine Eclipse IDE benutzen, da gibt es für GIT und 
SVN entsprechende Plugins/Add-Ons mit grafischer Ausgabe, das macht das 
ganze etwas einfacher.

von Senf D. (senfdazugeber)


Lesenswert?

K. H. schrieb:
> Vllt. gibt es mit Microsoft dann künftig ein anderes Git, eins das mehr
> kann und mehr kaputt machen kann und zudem nicht besonders
> benutzerfreundlich ist oder logisch.

Man kann an Microsoft viel kritisieren, aber Benutzerfreundlichkeit 
gehört nicht dazu, da sind sie immer weit vorne mit dabei; ganz im 
Gegensatz zur Unix/Linux-Welt. Sicherlich ein ganz wichtiger Faktor für 
den kommerziellen Erfolg von Microsoft Produkten. Und nein, dieser 
Beitrag enthält keine Ironie.

von Pepe T. (pepe_t)


Lesenswert?

Was ist der unterschied von C auf 8bit und C auf 64bit?
Richtig, keiner.

Also besorg die ein einfaches und günstiges experimentiersystem. Etwas 
was dich nicht gerade mit komplexität erschlägt, sonst gibst du nämlich 
auf.

Kauf dir arduino clones. Dann fängst du mit "blink" auf dem 328p an. 
Dann PWM mit registern, interrupts etc. Wenn du den 328p beherrschst 
machst du einen webserver mit dem esp8266, immer noch mit arduino IDE.

Hände weg von proprietären systemen. Das sind sackgassen. C# ist was für 
tiefenunfähige, C++ muss man verstehen aber nicht benutzen.

Warum denn 1 jahr warten?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

K. H. schrieb:
> Es könnte dann ein MS-Git mit anderen Kommandos geben

Halt, Moment, ob MS wohl schon damals bei "git" Pate stand? ;-)

Bei git ist alles (OK, vieles) anders als bei allen anderen …

K. H. schrieb:
> Wo die Unterschiede genau liegen weiß ich nicht.

Das wusste offenbar Linus Torvalds auch nicht, als er sich an git 
geschafft hat, auch CVS scheint er nicht gekannt zu haben. Sonst hätte 
er manche Fehler, die beim Übergang von CVS auf SVN repariert worden 
sind, nicht wieder eingebaut.

Aber OK, das geht jetzt hier zu weit …

von K. H. (hegy)


Angehängte Dateien:

Lesenswert?

Senf D. schrieb:
> Man kann an Microsoft viel kritisieren, aber Benutzerfreundlichkeit
> gehört nicht dazu, da sind sie immer weit vorne mit dabei

Das glaube ich jetzt nicht. Was ist z. B. aus dem Ur-Skype geworden, das 
von Skype bzw. der Firma dahinter stammt? Das war ganz einfach zu 
bedienen, ein paar Steuer-Icons unten mittig im Bild und man wusste 
intuitiv Bescheid. Dann hat MS das übernommen und alles umgeworfen und 
das gratis Skype ist alles andere als bedienerfreundlich. Ebenso meinten 
sie mit Ribbons den großen Wurf gemacht zu haben aber scheinbar hat sich 
dieser große Wurf nicht durchgesetzt, sonst hätten andere SW-Hersteller, 
freie wie kommerzielle, das Konzept übernommen. Auch sehr fragwürdig 
finde ich Yammer, eine Austauschplattform von MS. Anmelden ist kein 
Problem, aber wo zum Himmel kann ich mich ausloggen? Nachdem ich mich 
eingeloggt habe steht oben rechts ein "Profilbild" (sofern vorhanden, 
ansonsten ein rundes Teil mit irgendwas drin) und links daneben mein 
Name. Wenn ich auf das "Profilbild" klicke, lande ich auf einer Art 
Startseite, wo oben drüber wieder ein Kreis ist mit meinen Initialien. 
Auf der Seite kann ich mich nicht ausloggen. Vllt., wenn ich auf das 
runde Teil mit meinen Initialien klicke? Auch nicht. Wo denn dann? Na 
da: <siehe Bild oben> ein Haus, ein Briefumschlag und eine Glocke in 
dunkelgrau, mit etwas Abstand ein Zahnrad in grau auf grauem 
Hintergrund. Und hier kann ich mich irgendwo ausloggen. Nur wo? Die 
Lösung steht weiter unten. :)

Pepe T. schrieb:
> Was ist der unterschied von C auf 8bit und C auf 64bit?
> Richtig, keiner.

Es gibt welche. Wenn du mal auf einen 8-Bit Controller ein printf() 
laufen lässt, wirst du feststellen, dass dann i. A. Feierabend mit dem 
Programm ist bzw. schon vorher, weil printf() relativ viel Stack 
braucht. Vllt. funktioniert es mit den Nano-Libs, aber zu viel Gebrauch 
machen würde ich davon nicht. Generell ist Stringverarbeitung und C ein 
ziemlich heftiges Dingen. Der Hintergrund ist übrigens, dass 8-Bit 
Geräte rel. wenig SRAM haben ggü. 32-bit oder mehr. Das macht C auf 
einen 8-Bit Gerät was anspruchsvoller, auch was Programmaufbau angeht 
bzw. das benutzen von irgendwelchen Konstrukten, Stichwort MISRA. 
Lesense dazu auch dies:
https://de.wikipedia.org/wiki/MISRA-C

Noch ein Ding sind Variablen. Bei wenig SRAM und dann vllt. float/double 
Variablen benutzen oder Arrays, die vllt. noch in der Schleife... Da 
kommt dann MISRA ins Spiel.

Jörg W. schrieb:
> Halt, Moment, ob MS wohl schon damals bei "git" Pate stand? ;-)

Ich kenn mich in der Historie von GIT nicht aus. Aber MS schafft es 
auch, einen quasi-Standard über den Haufen zu werfen und mit was neuem 
zu kommen, weil das doch viel vorteilhafter ist, z. B. kann Outlook 
versandte Emails an einem Outlook Kontakt wieder zurückholen. Und wer 
braucht noch das alte Zeug aus den <eben mal nachkucken...> Anfang 
2000er Jahren?
Und beim Nachsehen file mir auf, dass GIT 2005 entstand ohne Microsoft 
aber seit 2017 das Repository vom Linux-Kernel auf einen Microsoft-GIT 
Server liegt. Aber was interessiert mich das Betriebssystem, auf dem GIT 
läuft?
(Quellchen: https://de.wikipedia.org/wiki/Git)

***
Unter dem Zeichen, das allgemein bekannt ist für Einstellungen, dem 
Zahnrad, kann ich mich beim Yammer abmelden. Wer hätte das gedacht?
Sehnse hier im Bildchen unter dem Link, der letzte Punkt in der Auswahl, 
nur da kann man sich abmelden. Wirklich genial! Die wollen wohl nicht, 
dass man sich abmeldet, die wollen die Leute wohl tracken oder so. 
https://abload.de/img/screenshot_20220202_2ppj0q.jpg

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

K. H. schrieb:
>> Was ist der unterschied von C auf 8bit und C auf 64bit?
>> Richtig, keiner.
>
> Es gibt welche. Wenn du mal auf einen 8-Bit Controller ein printf()
> laufen lässt, wirst du feststellen, dass dann i. A. Feierabend mit dem
> Programm ist bzw. schon vorher, weil printf() relativ viel Stack
> braucht.

Es gibt größere 8-Bitter als einen ATtiny13. :-)

Ich mache seit vielen Jahren printf auf AVRs, das geht völlig 
problemlos. Der Stack-Verbrauch ist in der Gleitkommaversion bissel 
größer als in der Standardversion, aber das ist auch alles. (Aktuell 
schaue ich mir gerade an, was man für 64-bit double in printf machen 
müsste, das wird dann wohl wirklich etwas größer werden. Aber 
64-bit-double-Argumente werden halt ohnehin über den Stack übergeben, 
32-bit double passte noch in 4 Register.)

> Wer hätte das gedacht?

"Drücken sie 'Start', wenn sie anhalten möchten." ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.