mikrocontroller.net

Forum: PC-Programmierung Rückgabewerte in C - wie handhaben ?


Autor: Micha W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

inlib.c
extern int errorCode1;
extern int errorCode2;

int someLibFunction(void)
{
    //do something
    return errorCode1;
}

app.c
#include lib.h

int errorCode1 = 1;
int errorCode2 = 2;

Und das linkst du dann einfach zusammen.

Matthias

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.