Forum: Mikrocontroller und Digitale Elektronik Eure Codebasis bei Projekten?`


von suchend (Gast)


Lesenswert?

Hallo Forum,

ich habe mal eine Frage zur Codebasis eurer Projekte, damit meine ich 
die Dateien mit Basisfunktionalitäten, die ihr immer wieder braucht.
Wie organisiert man sich da geschickt?

Wie sieht das bei euch aus?
Es gibt ja schöne Libs für UART, Displays, Entprellung etc.
Diese bedienen aber ja meist nur die Grundfunktionalität. Um zB 
Variablen zu Testzwecken auf der UART oder einem Display auszugeben 
braucht es ja noch ein paar Umrechnungen und Formatierungen. Warum ist 
sowas zB nicht mit in den Libs. Das braucht doch jeder. Also Hexwert, 
Dezimalwert mit Kommastellen etc ausgeben, einen String scrollen. Ich 
meine, das ist kein Hexenwerk, aber ich möchte das Rad nicht neu 
erfinden und vertraue gerne auf getesteten Code. Außerdem habe ich dann 
immer extra Dateien, da ich die Libs nicht ändern möchte, falls mal ein 
Update kommt.

Eine andere Sache ist, wie behandelt ihr die Peripherie des Controllers?
Also habt ihr für alles eigene Dateien, also Timer, ADC, SPI etc? Sind 
diese universell gehalten? Also kann man die Init über Parameter 
einstellen, oder passt ihr den Code für jedes Projekt immer wieder an? 
Oder haut ihr etwa alles in eine Datei?
Ich finde, dass es schnell sehr komplex wird, wenn man Konfigurationen 
allgemein halten will. Es entstehen viele Abhängigkeiten und 
Wertebereiche, die man prüfen muss.

Was benutzt ihr sonst noch so für Definitionen, die ihr immer einbindet?
Verwendet ihr zB einen Grundtimer, mit dem ihr euch eine Art 
timeover-Funktion realisiert?

Mich interessiert, wie man sich einen soliden Grundstock an Funktionen 
aufbaut und diesen geschickt organisiert?

Gibt es hier irgendwo eine Sammlung solcher nützlichen Funktionen?

Lohnt sich das Anlegen einer eigenen Lib?

Ich hoffe, ihr könnt mir ein paar wertvolle Tipps geben!
Danke.

von Purzel H. (hacky)


Lesenswert?

Ja. eine eigene Libray wird man sich langsam erarbeiten.
Ja. Ich hab auch meine Standardfunktionen. Die muss ich aber bis auf das 
letzte Bit kennen, sonst sind sie nicht effektiv.

von Gerd (Gast)


Lesenswert?

> Warum ist sowas zB nicht mit in den Libs

Weil es viel Arbeit ist? Eine Lib schreibt sich schnell, ein 
zusammenhängendes System von Linker-Libs ist ein Grossprojekt. Ausserdem 
haben viele so etwas schon und wollen lieber Code, der sich auf die 
konkrete Funktion beschränkt (z.B. LCD-Protokoll) und einfach in eigene 
Projekten einzufügen ist.

> Wie sieht das bei euch aus?

Ich habe pro Subsystem (Hardware wie ADC, I2C usw., aber auch 
Software-Subsysteme wie Menücode, App-Framework usw.) zwei Quelltexte 
(c, h) in einem globalen Modulverzeichnis. Dieses Verzeichnis füge ich 
im Projekt-Setup von Eclipse zum Pfad jedes Projektes hinzu - so wird 
alles gefunden. Funktionen, Konstanten und globale Variablen eines 
Subsystems haben den gleichen Prefix, z.B. "owi_". Die Modulcodes hängen 
natürlich teilweise voneinander ab, so dass man immer das grosse ganze 
im Auge behalten muss.

> Also kann man die Init über Parameter einstellen, oder passt ihr den Code für 
jedes Projekt immer wieder an?

Bestimmte Dinge werden bei mir mit define's geregelt, andere mit 
Funktionsparametern, andere gar nicht (z.B. ist ein AVR-Timer fest als 
1ms-Timer belegt) - je nachdem, was praktikabel ist. Alles mit 
Parametern zu lösen würde den Code sehr umfangreich machen.

Das Umbiegen von Modulcode mit defines erfolgt, indem im Modulcode eine 
<defs.h>-Datei eingebunden wird - diese Datei muss jedes Projekt 
bereitstellen. Das ist eine (die einzige) rückwirkende Abhängigkeit 
Modulcode-Projektcode. Umwandeln in Linker-Libs geht also nicht.

Um ISRs im Modulcode inline erweitern zu können, gibt es an geeigteten 
Stellen Makros, die das jeweilige Projekt in <defs.h> umdefinieren kann. 
Die Verwendung der inline-Anweisung wäre schöner, funktioniert aber IMHO 
nicht über Dateigrenzen hinweg.

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.