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

在VxWorks,errno机制似乎是一个很好的方式来做到这一点。

是否有可能定义我自己的errno价值?

有帮助吗?

解决方案

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

  • 上16位识别"模块"错误发生。
  • 较低的16位代表特定错误有关这一模块。

官方vxWorks模块的价值(对errno)位于../h/vwModNum.h文件。他们是目前使用的几百数字。这些模块中的数字所有有形式

#define M_something   (nn <<  16)

它是 强烈 气馁的修改(或)vxWorks头文件。

你能做什么是创建你自己的模块头文件,并开始在一个足够大的数量不会导致冲突。

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

在各个模块头文件,创建个人errno值。

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

在你的代码,然后可以将errno你定义的宏观。

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top