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

1 问题描述

新建STM32的keil工程,在编译时出现警告“..\FWLIB\src\stm32f10x_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”。
这里写图片描述

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

【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
内容概要:本文详细介绍了一种基于动态时间规整(DTW)距离与Kmeans聚类算法相结合的时间序列聚类分析模型,并提供了完整的Matlab代码实现。该模型通过引入DTW距离度量方式,有效解决了传统欧氏距离在处理长度不一或存在时间偏移的时间序列数据时的局限性,能够更准确地捕捉序列间的形状相似性。结合Kmeans算法,实现了对具有相似变化趋势的时间序列进行高效聚类,适用于电力负荷、气象数据、金融走势等领域中的模式识别与数据挖掘任务。文中系统阐述了算法原理、关键步骤、代码结构及参数设置,便于用户理解、复现与拓展应用。; 适合人群:具备一定Matlab编程基础,从事数据分析、信号处理、电力系统、自动化、气象预测、金融工程等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①对非等长时间序列或存在时间错位的数据进行聚类分析;②研究DTW与传统聚类算法融合的技术路径;③应用于负荷曲线分类、设备运行状态识别、金融市场走势划分、气候模式聚类、生物信号分析等实际科研与工程项目中的特征提取与数据降维任务。; 阅读建议:建议结合所提供的Matlab代码进行动手实践,重点理解DTW距离矩阵的构建过程以及Kmeans在非欧式空间中的迭代优化机制,可通过加载真实数据集验证模型性能,并尝试将其扩展至其他聚类算法(如层次聚类、谱聚类)以比较效果差异。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值