当前位置: 首页 > 工具软件 > elog > 使用案例 >

elog调试技巧 --参考 ST官方的USE_FULL_ASSERT-调试技巧-自己工具箱

龚振
2023-12-01
+++++++++++++++++++之前小巧版本++++++++++++++++++++++++
#define	fun_chk( fun,id)	\
  do{\
    if( (fun) == TRUE)\
      { printf("Function i=%d OK\r\n",id);\
        id++;}\
    else {printf("Function i=%d Failed \r\n",id);\
        id=0;}\
  }while(0)\
    
++++++++++++++++++现在复杂版本+++++++++++++++++++	
void (*g_check_hook)(const char* expr, const char* func, size_t line);

#define G_CHECK_ENABLE

#ifdef  G_CHECK_ENABLE
    #define G_CHECK(EXPR)                                                 \
    do{\
        if (!(EXPR))                                                              \
        {                                                                         \
            if (g_check_hook == NULL) {                                       \
                printf("(%s) has assert failed at %s:%ld.", #EXPR, __FUNCTION__, __LINE__); \
            } else {                                                              \
                g_check_hook(#EXPR, __FUNCTION__, __LINE__);                  \
            }                                                                     \
        } \
        else printf("(%s) has successed\r\n", #EXPR); \
    }while(0);  【注意这里:最后一行 不能再有 \ 了 否则会认为后面还是连续的 会错误:expected a macro parameter name 】
#else
    #define G_CHECK(EXPR)                    ((void)0);
#endif	

成功则:(rst) has successed
失败则:(rst) has assert failed at lfDTM_module_init:296.TX:AT
      

notepad观看 细节都在上文中!

 

复杂版本使用说明:
1#define G_CHECK_ENABLE加入这句话 启动功能
2EXPR为0就是异常,失败等   为1就是正常,成功等
3异常的时候如果有狗子函数就执行之 否则就打印然后死机

 类似资料: