OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5176|回复: 6

为什么必须在配置文件里定义USE_STDPERIPH_DRIVER和STM32F40_41xxx

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-9-11
在线时间
3 小时
发表于 2018-9-13 01:04:32 | 显示全部楼层 |阅读模式
1金钱
如题:为什么必须在配置文件里定义USE_STDPERIPH_DRIVER和STM32F40_41xxx  ?
而在主函数前面采用
#define STM32F40_41xxx
#define USE_STDPERIPH_DRIVER

这种预定义方式程序就会编译不通过,出现很多warning和一个错误:
....
..\FWLIB\src\stm32f4xx_wwdg.c(242): warning:  #223-D: function "assert_param" declared implicitly
    assert_param(IS_WWDG_COUNTER(Counter));
..\FWLIB\src\stm32f4xx_wwdg.c: 4 warnings, 0 errors
linking...
..\test1.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 1 error messages.
"..\test1.axf" - 1 Error(s), 545 Warning(s).
Target not created.
Build Time Elapsed:  00:00:34

最佳答案

查看完整内容[请看2#楼]

谢谢! #define 只在包含的c文件里有效!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-9-11
在线时间
3 小时
 楼主| 发表于 2018-9-13 01:04:33 | 显示全部楼层
DreamWaterPro 发表于 2018-9-14 08:40
额不是的,虽然提前编译,但是这个宏的作用域不一样,建议参考C语言中变量的作用域/生存期/有效区域等等 ...

谢谢!
#define 只在包含的c文件里有效!!
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-9-13 08:33:36 | 显示全部楼层
如果这个定义只是写在main.c中的话,那么它只是在mian.c中有效。
这一点和变量的作用域是相同的,楼主可以看一下相关的资料。所以一般地全局的宏定义我们都是在编译时通过编译器的命令行给定(keil已经自动帮我们处理好了),而且我们如果自己要定义某个宏的话,为了让别的文件知道有这个宏的存在,我们一般是将宏定义放在头文件中,这样需要使用这个宏的各个源代码文件只需要包含这个头文件就可以了。
十六进制带我飞。
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-9-11
在线时间
3 小时
 楼主| 发表于 2018-9-13 23:55:51 | 显示全部楼层
DreamWaterPro 发表于 2018-9-13 08:33
如果这个定义只是写在main.c中的话,那么它只是在mian.c中有效。
这一点和变量的作用域是相同的,楼主可以 ...

谢谢!但是按编译顺利,不是应该先编译#define STM32F40_41xxx
#define USE_STDPERIPH_DRIVER
然后才是#include "stm32f4xx.h",
这样的话STM32F40_41xxx和USE_STDPERIPH_DRIVER已经预定义了的啊
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-9-14 08:40:37 | 显示全部楼层
slbm 发表于 2018-9-13 23:55
谢谢!但是按编译顺利,不是应该先编译#define STM32F40_41xxx
#define USE_STDPERIPH_DRIVER
然后才是 ...

额不是的,虽然提前编译,但是这个宏的作用域不一样,建议参考C语言中变量的作用域/生存期/有效区域等等字样的相关知识。
十六进制带我飞。
回复

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
发表于 2018-9-14 10:31:32 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-9-16 09:31:39 | 显示全部楼层
slbm 发表于 2018-9-15 20:30
谢谢!
#define 只在包含的c文件里有效!!

正解!
十六进制带我飞。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 10:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表