Pergunta

Ao desenvolver um módulo (driver de dispositivo, middleware, etc ...) que será executado no espaço do kernel, gostaríamos de ter uma maneira de capturar o motivo pelo qual uma operação pode falhar.

No VXWorks, o mecanismo ERRNO parece ser uma boa maneira de fazer isso.

É possível definir meus próprios valores de erro?

Foi útil?

Solução

No contexto do VXWorks Errno, é definido como dois de 16 bits:

  • Os 16 bits superiores identificam o "módulo" onde ocorreu o erro.
  • Os 16 bits inferiores representam o erro específico para esse módulo.

Os valores oficiais do módulo VXWorks (para errno) estão localizados no arquivo ../h/vwmodnum.h. Atualmente, eles estão usando algumas centenas de números. Todos esses números de módulos têm o formulário

#define M_something   (nn <<  16)

Isso é fortemente Desanimado para modificar esse (ou qualquer) arquivo de cabeçalho do VXWorks.

O que você poderia fazer é criar seu próprio arquivo de cabeçalho do módulo e iniciar um número grande o suficiente para não causar conflitos.

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

Os arquivos de cabeçalho do módulo individual, crie os valores individuais de errno.

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

No seu código, você pode definir Errno para sua macro definida.

Outras dicas

ERRNO é apenas um número e funções como o STRERROR () retornam um texto descrevendo. Se você deseja estendê -lo, apenas forneça uma função própria semelhante ao strerror () que examina sua lista de erros ou delegados ao strerror ().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top