Forum: Offtopic C Programmierung vertiefen


von Eric (Gast)


Lesenswert?

Hallo Leute,

ich habe im vergangenen Semester (Maschbau) eine Veranstaltung 
"Datenverarbeitung" gehabt und nun die Prüfung erfolgreich absolviert.
In Datenverarbeitung haben wir C-Programme geschrieben, von einfach bis 
relativ anspruchsvoll.
Meist waren es mathematische Aufgabenstellungen (Numerik, Folgen & 
Reihen..usw), aber keine Hardware Programmierung wie zb Mikrocontroller.

Mir hat das Fach auch wirklich Spaß gemacht und würde mich in diesem 
Bereich gerne weiter vertiefen!
Als ich neulich aber in ein Buch über Mikrocontroller Programmierung 
reingeschnuppert habe, habe ich festgestellt das dieses C für 
Mikrocontroller doch ganz anders ist und mir viele Dinge unbekannt 
waren..
Wenn man die Klausur Datenverarbeitung gut besteht, meint man zumindest 
das man gut im Programmieren ist, aber ich fühle mich jetzt wieder wie 
am Anfang des Sommeremesters als ich mich noch gefragt habe was if & 
else bedeuten und wie man eine Schleife programmiert..

Könnt ihr mir vielleicht ein paar Tipps geben wie ich meine Kenntnisse 
vertiefen kann und welche Vorraussetzungen man für die Mikrocontroller 
Programmierung braucht?
Elektrotechnik, Elektronik & Messtechnik habe ich bereits ganz gut 
bestanden und es hat mir auch Spaß gemacht.

: Verschoben durch User
von Falk B. (falk)


Lesenswert?

@  Eric (Gast)

>Als ich neulich aber in ein Buch über Mikrocontroller Programmierung
>reingeschnuppert habe, habe ich festgestellt das dieses C für
>Mikrocontroller doch ganz anders

Naja, sooo viel anders ist es nicht.

>Wenn man die Klausur Datenverarbeitung gut besteht, meint man zumindest
>das man gut im Programmieren ist, aber ich fühle mich jetzt wieder wie
>am Anfang des Sommeremesters als ich mich noch gefragt habe was if &
>else bedeuten und wie man eine Schleife programmiert..

Das ist normal.

>Könnt ihr mir vielleicht ein paar Tipps geben wie ich meine Kenntnisse
>vertiefen kann und welche Vorraussetzungen man für die Mikrocontroller
>Programmierung braucht?

Kauf dir einen Arduino und leg los.

von Daniel A. (daniel-a)


Lesenswert?

C ist C, ob für Mikrokontroller oder nicht. Was sich ändert sind nur die 
Header und Macros je nach uC & Kompielerspezifische erweiterungen, um 
Dinge abbilden zu können die es in C nicht gibt.

Deshalb finde ich gerade bei uCs eine gute Abstraktion wichtig. Eine 
Platformunabhängige Logik, mit sinvollem Interface, und 
Hardwarespezifische Files, auf welche über die Abstraktion zugegriffen 
wird.

Also z.B. ein und ausschalten von Motoren & Motorregelung = 
Hardwarespezifische implementation. Geschwindigkeit und Richtung setzen 
= implementiertes Interface. Fahrzeug steuern, richtung ändern, vor 
hindernisen abbremsen = Platformunabhängige Logik.

Da du offenbar Algorithmen usw. gelehrnt hast, benötigst du eventuell 
noch etwas Kentnisse in Softwaredesign & funktionsweise von uCs. Beim 
ersten geht es vorallem ums Entkoppeln, Abstrahieren und Modularisieren 
von Softwarekomponenten. Lezteres ist hauptsächlich Initialisierung & 
Ansteuerung von Peripherie, meist über Register, und reagieren auf 
Interrupts in ISRs, z.B. für Timer & Pinnänderungen. Und Datenblätter 
lesen, ohne das gehts nicht.

Falk B. schrieb:
> Kauf dir einen Arduino und leg los.

Ok, damit gehts auch ohne Datenblätter lesen. Nunja, man kann diese ja 
auch ohne Arguino IDE & Libraries Programmieren, warum also nicht. 
Ansonsten sind AVRs noch recht Simpel, bei denen sollte man aber keinen 
zu kleinen nehmen.

: Bearbeitet durch User
von Nix (Gast)


Lesenswert?

Prinzipiell solltest du verstehen wie eine CPU funktioniert und wie dann 
die Peripherie wie ADC, PWM, SPI, I2C, ...... funktioniert. Das nennt 
man dann einen Mikrocontroller. Sonst ist das C das gleiche C, nur die 
Hardware ist anders.
Ja fange mal mit einem Arduino an. Da hast du schnell Erfolgserlebnisse.

von Philipp Klaus K. (pkk)


Lesenswert?

Wenn Du Dich schon etwas vertrauter mit C fühlst, würde ich dazu raten 
einen Blick ins (noch unfertige) "Modern C" von Jens Gustedt zu werfen:

http://icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf

Dazu empfiehlt sich aber ein Compiler der halbwegs brauchbar die 
aktuellen Standards unterstützt. Ein aktueller GCC, ICC oder clang 
sollte es tun. Mit aktuellem SDCC wird vieles, aber nicht alles aus dem 
Buch möglich sein. Keil, Raisonance und dergleichen kann man aber wohl 
vergessen.

Philipp

von Nico W. (nico_w)


Lesenswert?

Falk B. schrieb:
> Kauf dir einen Arduino und leg los.

Learning by doing. Und wenn man dann die ersten Projekte machen möchte, 
guck dir an wie das andere gemacht haben. Aber nicht nur ein Beispiel.

Dann aber nicht c'n'p sondern selbst schreiben.

Und wenn du es am Ende noch schöner machen möchtest, dann schmeißt du 
die ArduinoIDE weg und bastelst dir dein eigenes Makefile und machst 
reines C draus.

Hier noch ein kleiner Einstieg: 
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

von Jack (Gast)


Lesenswert?

Eric schrieb:
> Wenn man die Klausur Datenverarbeitung gut besteht, meint man zumindest
> das man gut im Programmieren ist, aber ich fühle mich jetzt wieder wie
> am Anfang des Sommeremesters als ich mich noch gefragt habe was if &
> else bedeuten und wie man eine Schleife programmiert..

Hat dir das noch keiner gesagt? Das gilt für jedes Fach im Studium. Dein 
Studienabschluss "berechtigt" dich in einem Unternehmen, auf dessen 
Kosten, unter Aufsicht eines Chefs, weiterzulernen. Für die Uni bist du 
mit dem Abschluss ein Ingenieur, für die Industrie nur ein Anfänger.

> Könnt ihr mir vielleicht ein paar Tipps geben wie ich meine Kenntnisse
> vertiefen kann

Programmieren, programmieren, programmieren, anderer Leute Code lesen, 
programmieren, programmieren, anderer Leute Code lesen ...

> und welche Vorraussetzungen man für die Mikrocontroller
> Programmierung braucht?

Jetzt so zum Lernen?

* Ca. 30 Euro (um sich eines der vielen netten Eval-Boards zu kaufen)

* Eine zugehörige kostenlose Entwicklungsumgebung

* Etwas Talent

* Ein paar Google- und Lesefähigkeiten

* Hohe Frustrationstoleranz

Welches Board man nimmt ist am Anfang ziemlich egal. Alle modernen 
Mikrocontroller können so viel, dass man mit jedem für eine ganze Weile 
beschäftigt ist.

Beispiele für Serien von Boards:

STM32 Discovery Serie
STM8 Discovery Serie (Wobei die nicht so weit verbreitet sind)
NXP LPC Xpresso (oder war das mbed?) Serie
TI Launchpad TIVA Serie
TI Launchpad MSP430 Serie
Atmel Xplained oder Xplained Mini Serie
Microchip PIC Curiosity Serie

uvam.

Jedes hat so seine Vor- und Nachteile. Fanboys können sich darüber 
stundenlang die Köpfe einschlagen.

Was sollte man nicht nehmen?

Alle Varianten von Arduino.

Zumindest nicht wenn man selber denken und etwas lernen möchte, statt 
halb nur Code aus dem Netz zu kopieren.

Was braucht man noch?

Möglichst ein Board mit eingebautem Programmer nehmen, sonst braucht man 
noch einen separaten Programmer.

Ein paar LEDs, Sensoren, Steckbrett usw. zum Rumspielen sind irgendwann 
ganz nett. Hier gibt es aus dem Arduino-Bereich "sorglos" Kits mit 
Bauteilen usw. auf eBay, Aliexpress usw. Nur halt keins nehmen das einen 
Arduino oder Shields enthält.

Irgendwann später kommt die große Frage nach Messmitteln. Labornetzteil, 
billiger Logicanalyser für den PC, Oszilloskop, Multimeter sind so die 
ersten Dinge. Über die beste Reihenfolge für einen Kauf kann man sich 
trefflich streiten.

von Eric (Gast)


Lesenswert?

@Daniel,
danke für deine Ausführliche Nachricht!
Das sind ein paar sehr nützliche Infos für mich!

Arduinos habe ich mir auch angeguckt, aber ich habe das gefühl das 
Arduinos eher was für Personen sind die nicht sonderlich viel mit 
Technik zu tun haben und die Anwendung damit nicht "Ingenierursmäßig 
professionel" ist.

Wie sieht es mit Boards von TI aus, oder auch AVR, kann mir da jemand 
was gutes empfehlen?
Vielleicht auch mit Video Tutorial/Buch oder ähnliches?

von Philipp Klaus K. (pkk)


Lesenswert?

Jack schrieb:
> STM8 Discovery Serie (Wobei die nicht so weit verbreitet sind)

Die STM8 sind schön. Aber wenn es darum geht, C zu lernen, solltest Du 
für STM8 entweder SDCC oder den Compiler von IAR verwenden. Die anderen 
Compiler halten sich weniger an den C Standard (wobei Cosmic da auch 
schon deutlich besser als Raisonance ist).

Philipp

von Falk B. (falk)


Lesenswert?

@Jack (Gast)

>Was sollte man nicht nehmen?

>Alle Varianten von Arduino.

>Zumindest nicht wenn man selber denken und etwas lernen möchte, statt
>halb nur Code aus dem Netz zu kopieren.

Unfug! Mit Arduino KANN man ebenso gut, schnell und direkt programmieren 
wie mit "reinem" C, denn niemand MUSS die Arduino-Funktionen bzw. 
Bibliotheken nutzen. Aber warum sollte man das tun? Warum das Rad neu 
erfinden? Das macht man nur, wenn vorhandenen Funktionen nicht 
ausreichen oder zu langsam sind.

von Falk B. (falk)


Lesenswert?

@  Eric (Gast)

>Arduinos habe ich mir auch angeguckt, aber ich habe das gefühl das
>Arduinos eher was für Personen sind die nicht sonderlich viel mit
>Technik zu tun haben und die Anwendung damit nicht "Ingenierursmäßig
>professionel" ist.

Unsinn. Wenn gleich eine große Zielgruppe schon Leute sind, welche keine 
Elektronik-Cracks sind sondern eher Anwender, die ein kleines bisschen 
programmieren können, so kann man mit diesen Boards überaus gut in die 
Materie reinkommen.

>Wie sieht es mit Boards von TI aus, oder auch AVR, kann mir da jemand
>was gutes empfehlen?

Die meisten Arduinos haben einen AVR drauf . . .

MSP430 ist auch ganz nett, da gibt es die diversen Lauchpads.

Man sollte aber NICHT mit einem fetten 32 Bit Monster anfangen, denn 
deren Komplexität und Funktionsumfang hilft dem Anfänger keine Sekunde, 
im Gegenteil.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Falk B. schrieb:
> Man sollte aber NICHT mit einem fetten 32 Bit Monster anfangen, denn
> deren Komplexität und Funktionsumfang hilft dem Anfänger keine Sekunde,
> im Gegenteil.

Naja, sofern da in C programmiert wird, ist es dem Anwender und dem 
Compiler doch relativ egal, ob die unterlagerte Hardware 8, 16 oder 32 
bit breite Register im Controller verwendet, oder ob die interne 
Architektur einfach oder kompliziert ist.

Die paar "Besonderheiten" beim nackten, einfachen  I/O-handling 
(einfaches Bit-Gefummele) verschiedener Controller-Typen sind 
überschaubar. Und Interupt-Handler, Timer usw. sind 
"Grundfunktionalitäten". die muss man mal verstanden haben, danach 
wiederholt sich das alles irgendwie bei den verschiendenen Controllern.

Sofern man das mit "Algorithmen und Datenstukturen" auf Bit-Ebene mal 
verstanden hat, fällt der Wechsel von einem Controller zum nächsten 
recht einfach. Da ist eher die verwendete Entwicklungsumgebung oder ein 
Sack von Bibliotheken dasjenige, welches einen das Leben schwer machen 
kann.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@Wegstaben Verbuchsler (wegstabenverbuchsler)

>> Man sollte aber NICHT mit einem fetten 32 Bit Monster anfangen, denn
>> deren Komplexität und Funktionsumfang hilft dem Anfänger keine Sekunde,
>> im Gegenteil.

>Naja, sofern da in C programmiert wird, ist es dem Anwender und dem
>Compiler doch relativ egal, ob die unterlagerte Hardware 8, 16 oder 32
>bit breite Register im Controller verwendet, oder ob die interne
>Architektur einfach oder kompliziert ist.

Dem Anwendner keine Sekunde! Denn DER muss sich in die ganzen Module 
einarbeiten! Ob ein Timer 5 oder 50 Register hat macht schon einen 
"kleinen" Unterschied!

>Die paar "Besonderheiten" beim nackten, einfachen  I/O-handling
>(einfaches Bit-Gefummele) verschiedener Controller-Typen sind
>überschaubar.

Nein.

>Und Interupt-Handler, Timer usw. sind
>"Grundfunktionalitäten". die muss man mal verstanden haben, danach
>wiederholt sich das alles irgendwie bei den verschiendenen Controllern.

EBEN! Und um sich erst einmal das Grundverständnis zu erarbeiten, ist 
ein EINFACHER Controller deutlich besser geeignet!

>Sack von Bibliotheken dasjenige, welches einen das Leben schwer machen
>kann.

Welche vor allem auf aktuellen 32 Bittern nicht gerade klein sind.

von Garden (Gast)


Lesenswert?

An den OT:

Dieser VIDEO-Kurs ist auf Deutsch:

http://ET-Tutorials.de/Mikrocontroller

von chris (Gast)


Angehängte Dateien:

Lesenswert?

>Arduinos habe ich mir auch angeguckt, aber ich habe das gefühl das
>Arduinos eher was für Personen sind die nicht sonderlich viel mit
>Technik zu tun haben und die Anwendung damit nicht "Ingenierursmäßig
>professionel" ist.

Also ich empfehle den PSoc LP5 von Cypress. Der ist günstig und extrem 
vielfältig. Da ist ein Debugger drauf, es gibt den Ansatz der 
graphischen Programmierung, man kann auch Verilog lernen und wer Lust 
hat, kann es auch Arduino-Style mit diesem Code-Beispiel-Projekt 
probieren:

http://www.mikrocontroller.net/attachment/304817/sakrileg.cydsn2.zip

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.