Hi, wie handhabt ihr bei euren C-Funktionen die Rückgabewerte, wenn die Rückgabewerte Aussage über aufgetretene Fehler geben? Arbeitet ihr mit festen Werten, also z.B. 0 für keinen Fehler, 1 für Fehler-Nr.1 usw.? Ich möchte meine Funktionen in Libs verpacken. In diesem Fall sind die Rückgabewerte ja dann fix. Ich sehe da jetzt folgende Probleme: Wenn ich eine H-Datei erstelle, in der alle möglichen Fehlermeldungen per #define aufgeführt sind, darf ich die Werte ja nicht mehr ändern, da ich sonst die Libs jedesmal neu compilieren muss. Da ich es für besser halte, meine Funktionen in Libs zu verpacken, suche ich also eine Möglichkeit, die Werte der Rückgabewerte unabhängig von der Lib zu verwenden, also die Lib so zu erstellen, dass die Werte der Fehlermeldungen erst dann hinzukompiliert werden, wenn das Hauptprogramm erstellt wird. Ist das in C möglich? Hoffe ich konnte das Problem verständlich machen... Micha
Hi du kannst deine Fehlercodes als extern deklarieren und sie dann später dazulinken. Das sollte kein Problem sein. Mir verschließt sich aber etwas der Sinn hinter diesem Vorhaben. Üblicherweise ist eine Lib ein abgeschlossenes etwas. Erzeugt eine Funktion einen Fehler so meldet sie das über ihren Rückgabewert (wie hängt ganz von der jeweiligen Funktion ab). Soll die Fehlermeldung detailierter sein realisiert man das wie diverse andere C-Bibliotheken über ein getError-Funktion die den letzten aufgetretenen Fehler detailierter beschreibt. Matthias
Hi Matthias, danke für deine Antwort. > Mir verschließt sich aber etwas der Sinn hinter diesem Vorhaben. > Üblicherweise ist eine Lib ein abgeschlossenes etwas. Richtig, aber die Lib ist für einen µC, und hinzu kommt, dass in der Lib einige Portpins des µC verwendet werden. Welche Portpins das sind, möchte ich über das zur Lib gehörende H-File definieren. > du kannst deine Fehlercodes als extern deklarieren und sie dann > später dazulinken. Das sollte kein Problem sein. Kannst du mir ein Beispiel hierfür zeigen? Danke Micha
Hi inlib.c
1 | extern int errorCode1; |
2 | extern int errorCode2; |
3 | |
4 | int someLibFunction(void) |
5 | {
|
6 | //do something
|
7 | return errorCode1; |
8 | }
|
app.c
1 | #include lib.h
|
2 | |
3 | int errorCode1 = 1; |
4 | int errorCode2 = 2; |
Und das linkst du dann einfach zusammen. Matthias
> Richtig, aber die Lib ist für einen µC, und hinzu kommt, dass in der > Lib einige Portpins des µC verwendet werden. Welche Portpins das > sind, möchte ich über das zur Lib gehörende H-File definieren. Das wird so nichts. Wenn eine Library einmal uebersetzt ist, dann ist sie ueber- setzt. Wenn Du also die Library konfigurieren moechtest, dann muss es dort eine Funktion geben, die das Hauptprogramm aufruft und die der Library ihre Wuensche vortraegt. Die Library speichert sich dann diese Wuensche in Variablen und die Funktionen der Library richten sich (hoffentlich) nach diesen Wuenschen.
danke für die Beiträge. Hm... Sieht aus, als ob das gar nicht so einfach ist mit Libs... Mal sehen, was ich hinbekomme... Micha
So weit wie ich mich durch den Linuxkernel gelesen habe, werden dort für Fehler nur negative Werte zurückgegeben. Das hat den Vorteil das die positiven Werte noch frei sind für andere Angelegenheiten. Feadi
Das Problem mit Libs, die Portpins verwenden sollen, hatte ich auch. Ich hätte es gerne so gelöst: Welche Pins verwendet werden sollen, wird der Lib erst zur Laufzeit von der Applikation übergeben. Letztlich braucht dieses Verfahren aber einiges an Ressourcen: die Lib muss dafür Aufrufe zur Verfügung stellen, die Daten speichern, und beim Verwenden ist es i.d.R. auch etwas aufwendiger. Mittlerweile hab ich mich deshalb von "richtigen" Libs verabschiedet und importiere stattdessen das Coding mittels #include in die Applikation. Dadurch kann man vorher mit normalen #defines die Port Pins etc. festlegen, und die "Lib" wird zusammen mit der Applikation compiliert und verwendet die aktuellen Definitionen. Das hat den gewünschten Effekt (sehr universelle Lib) und ist bzgl. der Ressourcen eher Mikrocontroller-gerecht, finde ich. Gruß, Ulrich
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.