开发指导
错误码简介
调用API接口时可能会出现错误,此时接口会返回对应的错误码,以便快速定位错误原因。
错误码是一个32位的无符号整型数,31~24位表示错误等级,23~16位表示错误码标志(当前该标志值为0),15~8位代表错误码所属模块,7~0位表示错误码序号。
错误等级 |
数值 |
含义 |
---|---|---|
NORMAL |
0 |
提示 |
WARN |
1 |
告警 |
ERR |
2 |
严重 |
FATAL |
3 |
致命 |
例如将任务模块中的错误码LOS_ERRNO_TSK_NO_MEMORY定义为FATAL级别的错误,模块ID为LOS_MOD_TSK,错误码序号为0,其定义如下:
#define LOS_ERRNO_TSK_NO_MEMORY LOS_ERRNO_OS_FATAL(LOS_MOD_TSK, 0x00)
#define LOS_ERRNO_OS_FATAL(MID, ERRNO) \ (LOS_ERRTYPE_FATAL | LOS_ERRNO_OS_ID | ((UINT32)(MID) << 8) | ((UINT32)(ERRNO)))
LOS_ERRTYPE_FATAL:错误等级为FATAL,值为0x03000000
LOS_ERRNO_OS_ID:错误码标志,值为0x000000
MID:所属模块,LOS_MOD_TSK的值为0x2
ERRNO:错误码序号
所以LOS_ERRNO_TSK_NO_MEMORY的值为0x03000200
错误码接管
有时只靠错误码不能快速准确的定位问题,为方便用户分析错误,错误处理模块支持注册错误处理的钩子函数,发生错误时,用户可以调用LOS_ErrHandle接口以执行错误处理函数。
Huawei LiteOS 的错误处理模块为用户提供下面几个接口,接口详细信息可以查看API参考。
接口名 |
描述 |
参数 |
备注 |
---|---|---|---|
LOS_RegErrHandle |
注册错误处理钩子函数 |
func:错误处理钩子函数 |
- |
LOS_ErrHandle |
调用钩子函数,处理错误 |
fileName:存放错误日志的文件名 |
系统内部调用时,入参为"os_unspecific_file" |
lineNo:发生错误的代码行号 |
系统内部调用时,若值为0xa1b2c3f8,表示未传递行号 |
||
errnoNo:错误码 |
- |
||
paraLen:入参para的长度 |
系统内部调用时,入参为0 |
||
para:错误标签 |
系统内部调用时,入参为NULL |
系统内部会在某些难以定位的错误处,主动调用注册的钩子函数(目前只在互斥锁模块和信号量模块中主动调用了钩子函数)。