历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2018年12月03日 | 关于STM32中的assert_param()

2018-12-03 来源:eefocus

在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;

在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。

所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_param()可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误,而不必等到程序运行结果的错误而大费周折。


这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。


它确实在程序的运行上牺牲了效率(但只是在调试阶段),但在项目的开发上却帮助你提高了效率。


当你的项目开发成功,使用release模式编译之后,或在stm32f10x_conf.h文件中注释掉对USE_FULL_ASSERT的宏定义,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。

#define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__))
。。。

assert_param(IS_ADC_ALL_PERIPH(ADCx));
。。。


在执行assert_param()的检验时,如果发现参数出错,它会调用函数assert_failed()向程序员报告错误,在任何一个例程中的main.c中都有这个函数的模板,如下:

void assert_failed(uint8_t* file, uint32_t line)
{


while (1)
{}
}

你可以按照自己使用的环境需求,添加适当的语句输出错误的信息提示,或修改这个函数做出适当的错误处理。

推荐阅读

史海拾趣

Giga公司的发展小趣事
用于设置提醒或自动执行某项任务。
Fine Products Microelectronics Corp公司的发展小趣事
通过定时控制LED灯的亮灭,实现视觉效果。
All Sensors公司的发展小趣事

在过去的30年里,All Sensors一直致力于为OEM客户设计定制各种经典的传感器。这些传感器不仅具有高精度、高可靠性和高灵敏度,还广泛应用于航天航空、医疗设备、环保仪器等多个领域。凭借卓越的产品性能,All Sensors的部分经典产品甚至被业界某大公司收购并发扬光大,进一步扩大了其在电子行业的影响力。

Gennum ( Semtech )公司的发展小趣事
如果电路不工作,可以逐步断开或替换部分元件,以确定问题所在。
General Electronic Devices公司的发展小趣事
提供稳定的直流电压。
Antelec公司的发展小趣事

Antelec公司创立于XXXX年,由一群富有远见和热情的电子工程师组成。创立初期,公司专注于研发先进的电子测量与分析技术,成功开发出一种具有高精度和稳定性的测量仪器,填补了市场上的空白。这一技术突破不仅赢得了客户的青睐,也为公司的后续发展奠定了坚实的基础。

问答坊 | AI 解惑

2.4G天线信号传输损耗

损耗是指在传输过程中因传输介质等因素引起的能力损失。…

查看全部问答>

二极管her307能不能用her308代替

望高手解答一下,在此先谢谢了!!!…

查看全部问答>

pdu usc-2 中文编码

我在linux下开发短信,使用开源的smstools来开发。 使用pdu模式时,发现对英语与数字可以很简单地实现。 但使用中文信息时,发现移动发过来的pdu报文解不正确。 如报文:测试 =“6D4B8BD5” 将两位一组转换为16进制数值,再转换为无符号字符。 ...…

查看全部问答>

寻求指引:不知如何问起的问题,关于和PC通讯方面(软硬驱动都需要)

(我一直做软件,虽然对Windows核心也有所了解,但却从未真正写过驱动,也未写过单片机软件,提的问题可能很不专业,请多包涵,多给点指引) 简单的说,可能这样:公司安排我项任务,改进一些旧的仪器。以前所有的仪器都是用RS232跟电脑连接的,我 ...…

查看全部问答>

各位大哥,你们好,我的朋友想学习plc但不知道用什么开发工具,希望你们能提供一些信息!谢谢

各位大哥,你们好,我的朋友想学习plc但不知道用什么开发工具,希望你们能提供一些信息!谢谢…

查看全部问答>

wince驱动开发的朋友

wince驱动开发,学了快半年了,想结交同样做wince驱动开发的朋友, QQ:181822723 …

查看全部问答>

想应聘嵌入式软件开发工程师,不知道看些什么书好

对嵌入式系统几乎知道很少知识     但是想应聘嵌入式软件开发工程师,不知道临时补充些什么知识,并且希望大家能推荐出书目来,谢谢 …

查看全部问答>

LM3S9997 J-LINK KEIL

LM3S9997 J-LINK KEIL 这几天做了个LM3S9997的最小系统。。。。 JTAG已经连接上了。。。读到的IDCODE是 0X4BA00477。。。然后用打开LM3S8662的一个LED例程。。。   有个错误。无法下载程序:error :flash DOWNLOAD FAILED - CORTEX-M3 好 ...…

查看全部问答>

STM8S常见问题大杂烩

最近再使用STM8S207RB进行开发,以下是自己使用cosmic时遇到的一些常见问题: 1.printf/sprintf入口参数必须是u16类型,否则打印结果不正确,很奇怪 2.u32位类型的判断if ((val%0x1000) == 0)此判断前必须强制转换,即     if ((u ...…

查看全部问答>

变压器制作知识

本帖最后由 paulhyde 于 2014-9-15 04:02 编辑 变压器制作大家一起学  …

查看全部问答>