(1)移植 ① 添加文件到工程中:将开源库中(cm_backtrace)目录拷贝复制到自己工程目录下。 ② 添加源码文件(将fault_handler 目录下iar和keil目录删除): ③ 添加头文件路径 ④ 添加所需宏定义(USE_FULL_ASSERT) (2)使用 ① 配置 ② 屏蔽函数重复定义(HardFault_Handler) 由于我们在移植时直接使用了汇编文件(cmb...
在ST 标准库的函数中,一般会包含输入参数检查,即上述代码中的“assert_param”宏,当参数不符合要求时,会调用“assert_failed”函数,这个函数默认是空的。实际开发中使用断言时,先通过定义USE_FULL_ASSERT 宏来使能断言,然后定义“assert_failed”函数,通常我们会让它调用printf 函数输出错误说明。使能断言后,程序运行...
默认,STM32的assert_param是没有开启检测,需要 #define USE_FULL_ASSERT 开启后,才能检测形参是否符合要求 //#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))#defineassert_param( x ) if( x == 0 ) { for(;;); }/*Exported functions --...
STM32 --- 断言(assert_param)的开启和使用 默认,STM32的assert_param是没有开启检测,需要 #define USE_FULL_ASSERT 开启后,才能检测形参是否符合要求 // #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) #define assert_param( x ) if( x =...
在ST 标准库的函数中,一般会包含输入参数检查,即上述代码中的“assert_param”宏,当参数不符合要求时,会调用“assert_failed”函数,这个函数默认是空的。实际开发中使用断言时,先通过定义USE_FULL_ASSERT 宏来使能断言,然后定义“assert_failed”函数,通常我们会让它调用printf 函数输出错误说明。使能断言后,程序运行...
看上图中第59行代码,是个条件编译语句,意思是:如果定义了USE_FULL_ASSERT,就把assert_param定义为一个三目运算的结构(第68行),否则(第71行),就把assert_param定义成((void)0)(第72行)。也就是说,你只有定义了USE_FULL_ASSERT,assert_param才会起作用,这个作用就是通过一个三目运算结构(如下)来判断的。关...
当你的项目开发成功,使用release模式编译之后,或在stm32f10x_conf.h文件中注释掉对USE_FULL_ASSERT的宏定义,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。 #define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__)) ...
若是定义了USE_FULL_ASSERT它,我们调用这个函数assert_param时,及对参数IS_GPIO_ALL_PERIPH(GPIOx)的正确性进行检查,通过一个C语言中的双目运算符来判断,若是返回1,执行语句(void)0,跟上面一样,若是返回0,则执行后面的函数assert_failed((uint8_t *)__FILE__,__LINE__),函数的作用在库函数中有解释,用...
#endif/*USE_FULL_ASSERT*/ 运行如下: 63.制作下载算法 重新生成不带main函数的工程 添加修改编程算法文件FlashPrg.c 模板工程里面提供了FlashOS.h和FlashPrg.c ,复制到此工程中,然后对FlashPrg.c 代码进行填充。 #include"FlashOS.H" #include"sfud.h" ...
在ST 标准库的函数中,一般会包含输入参数检查,即上述代码中的“assert_param”宏,当参数不符合要求时,会调用“assert_failed”函数,这个函数默认是空的。实际开发中使用断言时,先通过定义USE_FULL_ASSERT 宏来使能断言,然后定义“assert_failed”函数,通常我们会让它调用printf 函数输出错误说明。使能断言后,程序运行...