1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #ifndef __EXCEPTION_H__
- #define __EXCEPTION_H__
- #include <stdbool.h>
- #include <stdint.h>
- #include <string.h>
- #include <setjmp.h>
- #include "sdk_common.h"
- #include "SEGGER_RTT.h"
- #include "usr_config.h"
- typedef enum {
- //数据异常
- EXCEPT_DATA_BACK_MAG, //异常 —— 后脚地磁数据
- EXCEPT_DATA_FRONT_ACC, //异常 —— 前脚加速度数据
- EXCEPT_DATA_FRONT_GRY, //异常 —— 前脚陀螺仪数据
- EXCEPT_DATA_FRONT_MAG, //异常 —— 前脚地磁数据
- EXCEPT_DATA_CHARGE, //异常 —— 充电数据
- EXCEPT_DATA_BATTERY, //异常 —— 电池数据
- //其余异常
- EXCEPT_MODE_SUSPEND_OVERFLOW, //异常 —— 持续处于异常挂起模式
- //无异常
- EXCEPT_NO_EXCEPTION = 0
- }ExcepType_t;
- /// 异常标记
- typedef struct tagExcepSign
- {
- jmp_buf _StackInfo; // 保存异常处理入口的堆栈信息
- int _ExcepType; // 异常类型,0表示无异常,异常类型号一般取小于0的数
- } ExcepSign;
- /// 获取异常类型号
- #define ExcepType(ExcepSign) ((ExcepSign)._ExcepType)
- /// 可能抛出异常的代码块
- #define Try(ExcepSign) if ( ((ExcepSign)._ExcepType = setjmp((ExcepSign)._StackInfo)) == 0 )
- /// 捕获特定异常
- #define Catch(ExcepSign, ExcepType) else if ((ExcepSign)._ExcepType == (ExcepType))
- /// 捕获所有可能异常
- #define CatchElse(ExcepSign) else if((ExcepSign)._ExcepType < 0)
- /// 抛出异常
- #define Throw(ExcepSign, ExcepType) longjmp((ExcepSign)._StackInfo, ExcepType)
- extern ExcepSign Global_Ex;
- void Except_SaveExceptype(ExcepType_t excep_type);
- bool Except_IsError(ExcepType_t excep_type);
- void Exception_Init(void);
- #endif
|