Keil编译警告:function "assert_param" declared implicitly的解决方法

发布者:AdventureSeeker最新更新时间:2019-09-24 来源: eefocus关键字:Keil  编译警告  解决方法 手机看文章 扫描二维码
随时随地手机看文章

1 问题描述

新建STM32的keil工程,在编译时出现警告“..FWLIBsrcstm32f10x_rcc.c(273): warning: #223-D: function “assert_param” declared implicitly”,接下来一堆警告和错误。

这里写图片描述 

出错的原因:函数“assert_param”未声明。assert_param


2 问题分析

函数assert_param是STM32官方库文件中用到的。


对于我采用的《STM32F10x_StdPeriph_Lib_V3.5.0》库文件来说,assert_param函数在文件“stm32f10x_conf.h”的第59-73行。

这里写图片描述

查看函数说明可知,assert_param是一个条件表达式宏定义,主要作用是对函数的输入参数进行检查。仔细查看程序段,不管是否定义USE_FULL_ASSERT,函数assert_param均有定义,编译时不应该出现上述警告。


还有一种可能,那就是虽然定义了函数assert_param,但是包含定义的文件“stm32f10x_conf.h”没有被编译。


在工程文件中搜索字符“stm32f10x_conf.h”,在文件“stm32f10x.h”的第8301-8303行找到程序段。

这里写图片描述

这段代码的意思:如果定义USE_STDPERIPH_DRIVER,则包含文件“stm32f10x_conf.h”。同样的,如果没定义则不包含。


在工程中搜索文本USE_STDPERIPH_DRIVER,没有找到有关 USE_STDPERIPH_DRIVER的宏定义,因此也就没有包含stm32f10x_conf.h文件,工程中也就没有assert_param的声明。


文本“USE_STDPERIPH_DRIVER”的字面意思:使用标准外设驱动。也就是说如果需要使用ST官方提供的外设驱动库则需要定义“USE_STDPERIPH_DRIVER”。


很明显问题出在使用了官方的标准外设库又没有定义“USE_STDPERIPH_DRIVER”。


3 问题解决

解决问题的办法就是在工程中定义“USE_STDPERIPH_DRIVER”。这有两种方法。


方法一:标准宏定义


在工程中定义USE_STDPERIPH_DRIVER。通过上面的分析,在“stm32f10x.h”文件的起始位置定义USE_STDPERIPH_DRIVER即可。


先修改“stm32f10x.h”的只读属性。在工程文件中找到文件后,把文件属性修改为可读写的。


然后在Keil打开“stm32f10x.h”文件,在文件头添加代码“#define USE_STDPERIPH_DRIVER”。

这里写图片描述

重新编译工程,问题解决。


方法二:工程参数设置


在Keil工程中,点击“options for Target…”,在弹出窗口中点击“C/C++”,在“Preprocessor Symbols”的“Define”栏输入“USE_STDPERIPH_DRIVER”。


Preprocessor Symbols 就是预处理符号,输入“USE_STDPERIPH_DRIVER”就是向工程中添加预处理标号“USE_STDPERIPH_DRIVER”,等同于在代码中添加宏定义“#define USE_STDPERIPH_DRIVER”。 


这里写图片描述

设置完后,编译工程,问题解决。

关键字:Keil  编译警告  解决方法 引用地址:Keil编译警告:function "assert_param" declared implicitly的解决方法

上一篇:STM32之RCC库函数介绍2
下一篇:GPIO库函数配置方法

推荐阅读最新更新时间:2026-03-25 04:36

巧用 STM32CubeIDE 之编译警告
1.前言 编译警告对于工程师们来说,是再常见不过的东西了。对于严谨的工程师们,任何 warning 都是不会忽视的。 2.巧妙使用 warning 在 STM32CubeIDE 中可以通过warning(甚至 error)的方式来通知工程师,使得一些容易遗漏的配置得到重视。 例如,在释放参考代码给客户时,希望客户注意到里面的项目名称和项目版本,那么我们可以在代码中,通过“#error ”来强调必须要修改的信息,通过“#warning”来备注需要注意的信息。具体代码如图 1: 这样,当客户编译工程时,会出现 error 和 warning,见图 2,只有将“#error”和 “#warning”两行分别注释掉,才会分别消除这
[单片机]
巧用 STM32CubeIDE 之<font color='red'>编译</font><font color='red'>警告</font>
用IAR编译STM8单片机报警告
警告图片: 由警告提示可知,有一个编译选项执行失败了,但是我们仍然可以继续去执行代码 【 就像是你点了一份盖浇饭,和服务员说你要微辣,结果上来后你发现你的盖浇饭是不辣的,而这并不影响你继续享受盖浇饭,你同样可以吃的饱! 但是对于我这样的强迫症来说,这样吃起来就不香了,所以我还是得手动去加点辣椒才行。】 怎样才能吃的香呢? 第一步: 第二步: 第三步:重新编译- 下载,你会发现没有了警告! 到此,就是我的解决办法! 希望你也能早点解决
[单片机]
用IAR<font color='red'>编译</font>STM8单片机报<font color='red'>警告</font>
STM32开发笔记40: Keil链接时”No section matches selector“解决方法
单片机型号:STM32F070F6P6 首先指明,此问题是STM32CubeMX升级时造成的,我现在STM32CubeMX的版本是4.27.0,原先的版本生成的程序在Keil中打开是不报错的。 这个问题是链接错误,仔细查看工程目录就可以看见4.27.0版本生成的程序,在工程目录中缺少启动的汇编文件startup_stm32f070x6.s,只需将此文件加载到工程中,再重新生成,此问题就可以解决。
[单片机]
Keil IAR - Cortex M3 调试问题及解决方法(1)
看到一篇文章,转载如下。 其实不光是STM32, 其它芯片甚至其它的IDE 都可参考。 STM32调试过程中常见的问题及解决方法 一、 在“Debug选项卡”下设置好仿真器的类型后,下载程序时却提示“No ULINK Device found.” 解决办法: Keil MDK默认使用ULINK仿真器下载程序,在“Utilities选项卡”下把编程所使用的仿真器改为相应的类型即可。 二、 编译工程时提示如下信息: main.axf: Error: L6218E: Undefined symbol __BASEPRICONFIG (referred from stm32f10x_nvic.o). main.axf:
[单片机]
Keil IAR - Cortex M3 调试问题及解决方法(2)
最近又用stm32 和 lm3s 做点协议栈等,把一些调试心得写出来吧,本文可是原创,转载请注明出处。 芯片是stm32f103 stm32f107 lm3s9790 lm3s9b90, 开发环境是 keil mdk 4.22 iar arm 6.30. 1 stm32 官方库的更新 并不向下完全兼容,其中有他们家的新的芯片不断推出有关。 使用库,本人想做了个模板, 可以使用keil 和iar 使用,像官方库一样,只是它文件管理不方便。 项目的配置可以抄袭官方的配置,就行了。 注意: c 语言代码文件可以完全移植,但是汇编文件如 启动文件却不同,因为编译器不同,而且,官方库升级后,启动文件和底层文件发生了很大
[单片机]
<font color='red'>Keil</font> IAR - Cortex M3 调试问题及<font color='red'>解决方法</font>(2)
keil调试出现反汇编的解决方法
若经常出现反汇编要看Debug目录下的Load Application at Startup前面的勾是否打上。是否打上直接影响加载的程序,请看Edit前面的路径,编辑它。出现下面的形式。 重点看这一行。LOAD power.axf INCREMENTAL // Download (assumes that 'load application at startup' is unchecked) 意思是说若load application at startup前面没有打对勾,那么加载的程序将是power.axf。如果你是自己建立的工程,并且按照别的一个模板进行配置,这个地方一定要小心。要不会很头疼的。刚开始的
[单片机]
Keil5 点击Debug Setting 使软件奔溃的解决方法
今天再网上下了一个别人Dome工程,在本地编译通过,正准备选择调试器的时候发现IDE奔溃了 重新进软件和重新编译都无法解决,再度娘之后找到了解决方法 和大家分享一下 再工程路径下找到与项目同名的 .UVOPTX 文件 uvoptx文件记录了工程的配置选项,如下载器的类型、变量跟踪配置、断点位置以及当前已打开的文件等等,闪退的原因就是这个文件引起的 删除后 重新编译保存项目便可解决闪退奔溃问题。
[单片机]
泰克示波器波形失真不稳定原因及其解决方法分析
波形表示信号的形状、形式,这个信号可以是波在物理介质上的移动,也可以是其他物理量的抽象表达形式。 在许多情况里,波传播的介质的形式不能直接用肉眼观察。在这些情况中,“波形”这个术语指相应物理量在时间或空间上分布情况的图形抽象。作为最典型的例子,泰克示波器可以被用来在显示设备上表现出两个探头之间电压的变化情况。将这个概念扩展后,波形也可以描述任何物理量在时间上变化所对应函数的曲线图形。    一、波形分类 波形的种类很多,不同的波形有不同的定义和测量方法。正弦波形是在时域中定义的,但其波形失真参数却用正弦波形通过傅里叶变换后在频域中各谐波分量相对于基波幅度的大小来表示(见失真度测量);锯齿波的非线性是指实际波形偏离理想直线的
[测试测量]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved