Pregunta

Al desarrollar un módulo (controlador de dispositivo, middleware, etc.) que se ejecutará en el espacio del kernel, nos gustaría tener alguna forma de capturar la razón por la cual una operación puede fallar.

En VxWorks, el mecanismo errno parece ser una buena manera de hacer esto.

¿Es posible definir mis propios valores errno?

¿Fue útil?

Solución

En el contexto de VxWorks errno se define como dos de 16 bits:

  • Los 16 bits superiores identifican el módulo " " donde ocurrió el error.
  • Los 16 bits inferiores representan el error particular para ese módulo.

Los valores oficiales del módulo vxWorks (para errno) se encuentran en el archivo ../h/vwModNum.h. Actualmente están utilizando unos pocos cientos de números. Todos estos números de módulo tienen el formulario

#define M_something   (nn <<  16)

Es fuertemente desaconsejado modificar este (o cualquier) archivo de cabecera vxWorks.

Lo que podrías hacer es crear tu propio archivo de encabezado de módulo y comenzar con un número lo suficientemente grande como para no causar conflictos.

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

En los archivos de encabezado del módulo individual, cree los valores errno individuales.

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

En tu código, puedes establecer errno en tu macro definida.

Otros consejos

Errno es solo un número y funciones como strerror () devuelven un texto descriptivo. Si desea extenderlo, simplemente proporcione una función propia similar a strerror () que busque en su lista de errores o que delegue a strerror ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top