Embedded 如何定义自己的errno值?

Embedded 如何定义自己的errno值?,embedded,vxworks,Embedded,Vxworks,在开发将在内核空间中运行的模块(设备驱动程序、中间件等)时,我们希望有一些方法来捕获操作可能失败的原因 在VxWorks中,errno机制似乎是一种很好的方法 可以定义我自己的errno值吗?errno只是一个数字,类似strerror()的函数返回一个描述文本。如果要扩展它,只需提供一个类似于strerror()的函数,它可以查看错误列表或委托给strerror()。Errno只是一个数字,类似strerror()的函数会返回一个描述文本。如果您想扩展它,只需提供一个类似于strerror()

在开发将在内核空间中运行的模块(设备驱动程序、中间件等)时,我们希望有一些方法来捕获操作可能失败的原因

在VxWorks中,errno机制似乎是一种很好的方法


可以定义我自己的errno值吗?

errno只是一个数字,类似strerror()的函数返回一个描述文本。如果要扩展它,只需提供一个类似于strerror()的函数,它可以查看错误列表或委托给strerror()。

Errno只是一个数字,类似strerror()的函数会返回一个描述文本。如果您想扩展它,只需提供一个类似于strerror()的自己的函数,用于查找错误列表或委托给strerror()。

在VxWorks的上下文中,errno定义为两个16位:

  • 高16位标识发生错误的“模块”
  • 较低的16位表示该模块的特定错误
vxWorks模块的官方值(用于errno)位于../h/vwModNum.h文件中。 他们目前使用几百个数字。 这些模块编号都具有以下形式:

#define M_something (nn << 16) #定义M_某物(nn<< 16) 强烈不鼓励修改此(或任何)vxWorks头文件

您可以做的是创建自己的模块头文件,并从足够大的数量开始,以避免引起冲突

/* myModNum.h */ #define M_MyModule (10000 << 16) #define M_MyNextModule (10001 << 16) ... /*myModNum.h*/ #定义M_MyModule(10000<< 16) #定义M_MyNextModule(10001<< 16) ... 在各个模块头文件中,创建各个errno值

/* myModule.h */ #define S_MyModule_OutOfResources (M_MyModule | 1) #define S_MyModule_InvalidHandle (M_MyModule | 2) ... /*myModule.h*/ #定义S_MyModule_OutOfResources(M_MyModule | 1) #定义S_MyModule_InvalidHandle(M_MyModule | 2) ...
在代码中,可以将errno设置为定义的宏。

在VxWorks上下文中,errno定义为两个16位:

  • 高16位标识发生错误的“模块”
  • 较低的16位表示该模块的特定错误
vxWorks模块的官方值(用于errno)位于../h/vwModNum.h文件中。 他们目前使用几百个数字。 这些模块编号都具有以下形式:

#define M_something (nn << 16) #定义M_某物(nn<< 16) 强烈不鼓励修改此(或任何)vxWorks头文件

您可以做的是创建自己的模块头文件,并从足够大的数量开始,以避免引起冲突

/* myModNum.h */ #define M_MyModule (10000 << 16) #define M_MyNextModule (10001 << 16) ... /*myModNum.h*/ #定义M_MyModule(10000<< 16) #定义M_MyNextModule(10001<< 16) ... 在各个模块头文件中,创建各个errno值

/* myModule.h */ #define S_MyModule_OutOfResources (M_MyModule | 1) #define S_MyModule_InvalidHandle (M_MyModule | 2) ... /*myModule.h*/ #定义S_MyModule_OutOfResources(M_MyModule | 1) #定义S_MyModule_InvalidHandle(M_MyModule | 2) ... 在代码中,可以将errno设置为定义的宏