Frage

Wenn ein Modul (Gerätetreiber, Middleware, etc ...) zu entwickeln, die im Kernel-Space laufen wird, möchten wir eine Möglichkeit haben, den Grund eine Operation fehlschlagen, zu erfassen.

In VxWorks Der errno Mechanismus scheint ein guter Weg, dies zu tun.

Ist es möglich, meine eigenen errno Werte zu definieren?

War es hilfreich?

Lösung

Im Rahmen der VxWorks errno als zwei 16-Bit definiert ist:

  • Das obere 16-Bit identifiziert das "Modul", wo der Fehler aufgetreten ist.
  • der untere 16-Bit stellt die bestimmte Fehler für dieses Modul.

Die offiziellen vxWorks Modulwert (errno) in der ../h/vwModNum.h Datei. Sie sind zur Zeit als ein paar hundert Zahlen. Diese Modulnummern alle haben die Form

#define M_something   (nn <<  16)

Es ist stark entmutigt, dies zu ändern (oder überhaupt) vxWorks Header-Datei.

Was Sie tun können, ist Ihre eigene Modul-Header-Datei erstellen und an einer ausreichend großen Zahl beginnt nicht zu Konflikten führen.

/* myModNum.h */
#define M_MyModule     (10000 << 16)
#define M_MyNextModule (10001 << 16)
...

Die in den einzelnen Modul-Header-Dateien erstellen, die einzelnen errno Werte.

/* myModule.h */
#define S_MyModule_OutOfResources (M_MyModule | 1)
#define S_MyModule_InvalidHandle  (M_MyModule | 2)
...

In Ihrem Code können Sie dann errno auf Ihre definierten Makro eingestellt.

Andere Tipps

Errno ist nur eine Zahl und Funktionen wie strerror () geben einen beschreibenden Text. Wenn Sie erweitern mögen es nur eine eigene Funktion bietet ähnliche strerror (), die in der Fehlerliste bzw. die Delegierten sehen strerror ().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top