STM32 ASSERT断言机制

2023-05-16

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

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

#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库文件截取的断言,所达到的目的同上

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 ASSERT断言机制 的相关文章

  • 如何格式化符合PEP8的python断言语句?

    如何格式化符合 PEP8 的长断言语句 请忽略我的例子的人为性质 def afunc some param name assert isinstance some param name SomeClassName some param na
  • 在运行时动态设置Python解释器优化

    经过一段时间在这里寻找重复项后 我发现唯一的事情是无操作并使用 Cython 进行优化 这是完全不相关的 我想要完成的是动态设置python O运行时标记 基本上 有一个值sys flags optimize这是只读的 我正在寻找一个选项来
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 如何将 mimeType Assert 与 VichUploader 一起使用?

    当使用以下命令上传任何文件时 此断言会通过 Symfony 的表单验证VichUploaderBundle http github com dustin10 VichUploaderBundle Vich UploadableField m
  • Python:引发 argparse.ArgumentError 后,argparse 引发一般错误

    我为需要遵循精确格式的参数定义了一个自定义正则表达式类型 我使用了另一篇文章中的代码 正则表达式自定义类型 https groups google com forum fromgroups topic argparse users tAC1
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • JavaScript 中的“断言”是什么?

    什么是assert在 JavaScript 中是什么意思 我见过类似的东西 assert function1 function2 function3 some text 并且想知道有什么方法assert does 没有标准assert在 J
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • 打字稿检查类型 A === 类型 B | C型

    在一个文件中我有这样的内容 export const all a b c d e f type AllKeysType typeof all export type AllKey keyof AllKeysType 在另一个文件中我有这样的
  • 何时在客户端和通用 GWT 代码中使用断言

    StackOverflow 上有几个问题讨论何时应该使用断言语句而不是抛出异常 例子here https stackoverflow com questions 4333371 when to use assert and when to
  • 断言两个 java bean 是等价的

    这个问题 https stackoverflow com questions 472626 how to generically compare entire java beans很接近 但仍然不是我想要的 我想以通用的方式断言两个 bea
  • Fortran 中的断言

    Fortran 是否有与 C 等效的标准函数 关键字assert 我找不到assert我在 Fortran 2003 标准中提到过 我发现了几种使用预处理器的方法 但是在这个answer https stackoverflow com a
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • 断言列表中字段的唯一性

    我用 C 制作了一个列表 我想进行测试以查看 Id 字段的所有值是否都是唯一的 public static List
  • 使用断言的最佳实践?

    使用是否存在性能或代码维护问题assert作为标准代码的一部分而不是仅将其用于调试目的 Is assert x gt 0 x is less than zero 比更好或更差 if x lt 0 raise Exception x is l
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • Trace.Assert 没有中断,也不显示消息框

    我有一个 WPF 应用程序 我在其中在画布上移动数据 当我像怪物一样尝试用鼠标移动数据时 问题就开始了 以下是操作的顺序 画布上的 MouseMove 被触发 在 MouseMove 中 我更改了一些数据 Trace Assert 失败 调
  • C# 编译器如何删除发布版本中的 Debug.Assert?

    我最近正在浏览一些代码 并考虑是否需要小心放置在其中的表达式Debug Assert语句 例如昂贵的操作或具有副作用的操作 然而 编译器似乎非常聪明地完全删除了Assert陈述和内在表达 例如 以下内容只会在调试版本上打印 static v
  • Assert.Are Equal 和 Assert.AreSame 之间的区别?

    有什么区别断言 AreEqual and 断言 AreSame 这意味着 AreSame 检查它们是否是完全相同的对象 如果引用指示内存中的同一对象 AreEqual 检查对象是否具有相同的类型和值 相同的对象可以存在于内存中的两个不同位置

随机推荐