Forum: Mikrocontroller und Digitale Elektronik Allgemeine Fragen zur Porgrammierung von Mikrocontrollern


von Marco (Gast)


Lesenswert?

Hi an alle,

ich habe einmal eine Allgemeine Frage zur Programmierung von 
Mikrocontrollern. Genauer gesagt, geht es um die Übersichtlichkeit des 
Codes.

Man sieht immer wieder Beispiele, in denen restlos alles in eine Datei 
geschrieben wurde, was das Ganze ziemlich unübersichtlich macht für 
meinen Geschmack.

-> Die Frage wäre nun, wie man den Code wirklich sinnvoll in mehrere
   Dateien aufsplittet?

-> Was habt ihr in der main.c stehen?

-> Ist es Sinnvoll #defines, Deklarationen von Variablen auch in eine
   eigene Datei auszulagern oder gehört so etwas in die main.c?

Ich würde mich freuen, wenn der ein oder andere seine Meinung oder 
Erfahrungen dazu beitragen würde.

Grüße
Marco
von Jens (Gast)


Lesenswert?

Also nur der kurze Hinweis, ich habe z.b. sehr viele Defines und 
Funktionen (einmal globale und einmal nur für main) und include diese 
über eine *.h Datei.

Diese *.h Dateien haben bei mir in etwa genausoviel Zeilen wie der 
eigentliche Code, verbessern die Übersichtlichkeit also doch erheblich.
von Felix i. (felixix)


Lesenswert?

Was oft gemacht wird, und meiner Meinung nach sehr sinnvoll ist, ist 
verschiedene "Module" in verschiedene Dateien zu packen. Zum Beispiel 
alles was mit einem LCD zu tun hat nach lcd.c/.h, alles was mit einer SD 
Karte zu tun hat nach sd.c/.h, usw.

In die main.c (bzw die main Methode) kommen dann Aufrufe zu den 
verschiedenen Funktionen. Ich schreibe in jedem Modul jeweils eine 
"init" und eine "periodical" Funktion, am Anfang der main() rufe ich die 
ganzen init()s auf, und danach in einer Endlosschleife die ganzen 
periodical()s.
Am besten verwendet man dann noch Kooperatives Multitasking, dh jedes 
Modul/jede periodical() muss sehr schnell return-en so dass sich die 
ganzen Module ständig abwechseln. Verzögerungen realisiert man dann 
nicht durch warten in der Funktion, sondern indem man jeden Zyklus 
prüft, ob genug Zeit vergangen ist.

Sehr sinnvoll ist dann auch noch eine globale Header Datei wo alle 
Hardware abstahiert ist, dh jedem Pin usw. ein #define spenden. Macht 
den Code sehr viel leserlicher, und man braucht nicht den ganzen Code 
durchforsten wenn sich ein Pin ändert :)
von Karl H. (kbuchegg)


Lesenswert?

Marco schrieb:

> -> Die Frage wäre nun, wie man den Code wirklich sinnvoll in mehrere
>    Dateien aufsplittet?

Für den Anfang wirst du mit "modulweise" auskomme.

Die UART Funktionen sind ein Modul, können daher in eine eigene Datei. 
Die LCD Funktionen sind ein Modul und können in eine eigene Datei.

Es gilt einen sinnvollen Kompromiss zu finden.
Zu wenig einzelne Dateien -> Dateien sind riesig lang
Zu viele einzelne Dateien -> man findet nichts mehr.

> -> Was habt ihr in der main.c stehen?
>
> -> Ist es Sinnvoll #defines, Deklarationen von Variablen auch in eine
>    eigene Datei auszulagern oder gehört so etwas in die main.c?

Kommt drauf an.
Alles was das Potential hat, von mehreren C-Files benutzt zu werden, 
gehört in ein Header-File. #defines die nur für ein Modul relevant sind, 
sind im zugehörigen C-File meist besser aufgehoben.
von Marco (Gast)


Lesenswert?

Hallo,

vielen Dank schon einmal für die vielen Hinweise. Ich werde mal schaun, 
was ich so machen kann und was für mich das Beste ist.

Ich werde den einzelnen Modulen schonmal eine eigene Datei verpassen. 
Mal sehen, was ich noch an Deklarationen usw. auslagern kann/werde.

Ich denke, ich werde sicher von Projekt zu Projekt noch was ändern, also 
immer mal wieder optimieren.

Grüße
Marco
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.