STM32 ASSERT断言机制

调试代码经常会有跑崩的时候,当整机调试是出问题特别让人崩溃,断言机制能很好的定位由于参数错误导致的系统异常的情况。

在代码重要的代码区,添加断言,相当于对出入参数做了预判操作,当参数不符合条件时,程序不再继续执行,同时打印错误信息。

#define ASSERT(message, 表达式) do { if(表达式) \
  TEST_ASSERT(message); } while(0)

#define TEST_ASSERT(x)\
do {printf("\"%s\"failed at line %d in %s\r\n",x,__LINE__,__FILE__);\
}while(0)

断言方式:当参数满足"表达式"时,执行断言TEST_ASSERT,同时打印错误信息。错误信息格式可自定义输出格式,

使用方式:

void test(int a)
{
	LWIP_ASSERT("Paramter Err",(a>255));
}

 

 #define assert_param(表达式) ((表达式) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
  void assert_failed(uint8_t* file, uint32_t line);

void assert_failed(uint8_t* file, uint32_t line)
{
    printf("Wrong parameters value: file %s on line %d\r\n", file, line);
    while(1);
}

断言方式:如果表达式为ture,则执行(void)0,空操作。如果为false则执行assert_failed()

使用方式:(引用自STM32 串口配置文件)

assert_param(IS_USART_ALL_PERIPH(USARTx));

此为STM32库文件截取的断言,所达到的目的同上

断言可在项目开发阶段的初前期快速的定位一些编译器识别不到的错误,让我们在编程("掉头发")的路上事半功倍

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值