历史上的今天
返回首页

历史上的今天

今天是:2025年03月29日(星期六)

2019年03月29日 | assert_param函数的意义

2019-03-29 来源:eefocus

在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。


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


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


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


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


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


void assert_failed(uint8_t* file, uint32_t line)

{



while (1)

{}

}


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


1、STM32F10xD.LIB是DEBUG模式的库库文件。

2、STM32F10xR.LIB是Release模式的库库文件。

3、要选择DEBUG和RELEASE模式,需要修改stm32f10x_conf.h的内容。

    #define DEBUG 表示DEBUG模式,把该语句注释掉,则为RELEASE模式。

4、要选择DEBUG和RELEASE模式,也可以在Options,C/C++,Define里填入DEBUG的预定义。

    这样,就不需要修改stm32f10x_conf.h的内容。

5、如果把库加入项目,则不需要将ST的库源文件加入项目,比较方便。

    但是,库的选择要和DEBUG预定义对应。

推荐阅读

史海拾趣

德欣(COV)公司的发展小趣事

为了进一步提升市场竞争力,德欣公司开始在全球范围内进行布局。公司先后在亚洲、欧洲、美洲等地设立了生产基地和研发中心,加强了与国际市场的联系。同时,德欣公司还积极寻求与国际知名企业的合作,共同开发新产品、新技术和新市场。这些举措不仅提升了德欣公司的品牌影响力和市场竞争力,也为其未来的发展提供了更广阔的空间。

E. Dold & Söhne KG公司的发展小趣事

在E. Dold & Söhne KG公司的发展历程中,品质始终是公司最重视的方面之一。公司严格把控原材料采购、生产过程和产品检验等环节,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求使得E. Dold & Söhne KG公司的产品在市场上赢得了广泛的认可和信任。

Bliley Technologies Inc公司的发展小趣事

二战期间,Bliley迎来了其历史上的一个重要时刻。由于战争对通信设备的巨大需求,Bliley的产品成为军事通信领域的关键组件。政府的大量采购合同使得Bliley的销售额直线上升,员工数量也急剧增加。为了满足战争期间的巨大需求,Bliley不得不扩建工厂,并实行昼夜不停的生产制度。这段时期,Bliley不仅在军事通信领域取得了显著成就,同时也为其在战后的发展奠定了坚实基础。

AVX公司的发展小趣事

随着业务的不断发展,AVX开始在美国本土进行大规模扩张。它在多个州设立了生产基地和销售网络,进一步提升了公司的产能和市场覆盖率。同时,AVX还积极开拓国际市场,与全球各地的客户建立了紧密的合作关系。这种全球化布局使AVX能够更好地满足客户需求,提升公司的竞争力。

厦门法拉(faratronic)公司的发展小趣事

在追求商业成功的同时,FMI公司也积极履行社会责任,致力于环保和可持续发展。公司制定了一系列环保计划和程序,以确保在所有业务运营中保持环保意识。FMI的产品从设计到生产都遵循环保原则,采用环保材料和工艺,减少对环境的影响。此外,公司还积极参与行业内的环保活动,推动整个电子行业的绿色发展。这种负责任的企业形象为FMI赢得了社会的广泛赞誉和尊重。

GD Rectifiers Ltd公司的发展小趣事

为了进一步扩大市场份额,GD Rectifiers Ltd实施了积极的国际化战略。公司首先在欧洲市场设立了销售分支机构,凭借其优质的产品和服务迅速赢得了当地客户的认可。随后,公司又陆续在北美、亚洲等地区建立了分销网络,逐步构建起覆盖全球的营销体系。在国际化进程中,GD Rectifiers Ltd注重与当地企业的合作与交流,共同推动行业标准的制定和技术进步。通过不断的努力,公司成功地将品牌和产品推向了全球市场,实现了业务规模的快速增长。

问答坊 | AI 解惑

请教AD采样的系统设计

原先的产品是通过51单片机 AD 后通过串口发送到上位机,上位机显示采样结果。 现在的打算用ARM来处理,移植CE5到FLASH中。 设计时,位机用EVC或者VS2005开发这个没问题; 但是: 1、下位机如果用ADS开发,ADS的输出是运行在目标机裸机上的,CE ...…

查看全部问答>

如何在单片机里存储一个数据,在掉电后还可以读取呀

如何在单片机里存储一个数据,在掉电以后我再开始运行程序,我能够把那个数据在从单片机里读出来呀,用于本次程序的执行呀! 非常感谢! 不外加芯片…

查看全部问答>

CE打开BMP以外的图片

在WinCE上能打开BMP以外的图片,或者实现半透明等效果的图片吗?…

查看全部问答>

求教wince5.0的USB Function驱动问题!

    请问wince5.0的usb function controller驱动是怎么被加载的?在Ufnmdd.cpp中的UFN_Init等接口函数怎么被调用执行?在source文件中利用Ufnmdd.cpp只生成了个usbmddbase.lib库而没有生成DLL,在最终的image中也没有打包进去,那怎么样才 ...…

查看全部问答>

VS 2005向开发板部署空的工程,出现超大DLL问题

VS 2005新建一个C#智能设备工程。 我自己没有向里面添加代码。 然后调试编译部署到我的开发板。 选择的是我开发板sdk部署。 然后开始部署。奇怪,总是提示磁盘空间不足:错误 0x80070070: 磁盘空间不足 后来在wince开发板下,设置内存,还是不 ...…

查看全部问答>

招聘嵌入式驱动开发工程师

职位信息 ·   工作性质:全职 ·   工作地点:武汉 ·   发布日期:2010/1/4 ·   截止日期:2010/3/1 ·   招聘人数:3 ·   薪  水: ·   工作经验:1-2 ...…

查看全部问答>

WINCE下载到目标板出现问题

很奇怪,当我把系统定制的比较小的时候,下载没有任何问题,当我的系统大概大于30M的时后,当我修改了config.bib的MEMORY中的ARM,ARMIMG的起始 地址以便可以容纳镜像大小,编译可以通过,可是通过网线下载快要结束的时候PB弹出报错对话框:Downloa ...…

查看全部问答>

请教,arm的

来自 电子工程师技术交流(12425841)[<Rn>, +/-<Rm>][<Rn>, +/-<Rm>]![<Rn>], +/-<Rm>三种寻址方式有什么区别,看介绍都差不多…

查看全部问答>

我的EK-LM3S811板子被锁住了?怎么办?

我的EK-LM3S811板子被锁住了,误用了JTAG口,有网友说解锁,我试了很多办法,都不行,难道真的需要换片了吗?可是换片哪有卖的啊?…

查看全部问答>