Domanda

Quando sviluppiamo un modulo (driver di dispositivo, middleware, ecc ...) che verrà eseguito nello spazio del kernel, vorremmo avere un modo per catturare il motivo per cui un'operazione potrebbe fallire.

In VxWorks, il meccanismo errno sembra essere un buon modo per farlo.

È possibile definire i miei valori errno?

È stato utile?

Soluzione

Nel contesto di VxWorks errno è definito come due 16-bit:

  • Il 16 bit superiore identifica il " modulo " dove si è verificato l'errore.
  • I 16 bit inferiori rappresentano l'errore particolare per quel modulo.

I valori ufficiali del modulo vxWorks (per errno) si trovano nel file ../h/vwModNum.h. Attualmente stanno usando alcune centinaia di numeri. Tutti questi numeri di modulo hanno il modulo

#define M_something   (nn <<  16)

È fortemente sconsigliato modificare questo (o qualsiasi) file di intestazione vxWorks.

Quello che potresti fare è creare il tuo file di intestazione del modulo e iniziare con un numero abbastanza grande da non causare conflitti.

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

Nei file di intestazione del singolo modulo, creare i singoli valori errno.

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

Nel tuo codice, puoi quindi impostare errno sulla tua macro definita.

Altri suggerimenti

Errno è solo un numero e funzioni come strerror () restituiscono un testo descrittivo. Se si desidera estenderlo, è sufficiente fornire una propria funzione simile a strerror () che esamina l'elenco degli errori o delega a strerror ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top