STM32/STM8技术william hill官网
直播中

彭少华

5年用户 13经验值
私信 关注
[问答]

__FPU_PRESENT重定义出现大量的警告

本人使用的是STM32f405+freertos
在使用fpu时如果预定义了__FPU_PRESENT=1则编译时会出现大量的警告
warning:  #47-D: incompatible redefinition of macro "__FPU_PRESENT"
提示我__FPU_PRESENT重复定义了,但此时fpu是可用的,大量警告特烦人
但如果不预定义__FPU_PRESENT=1,虽然编译成功并且无警告,但fpu功能是没启用的
微信截图_20191203023053.png 如图所示

回帖(6)

lm12041204a

2019-12-3 02:33:46
本帖最后由 lm12041204a 于 2019-12-4 21:38 编辑

宏重复定义,特别是多个头文件中都有定义,并且预编译指令不是完全周全的情况下(通常情况下也无法完全周全)。
定义外部变量有时也遇到类似问题。
修改工程选项试试,参考一下这个:

解决编译官方库中的project warning: #47-D: incompatible redefinition of macro
https://blog.csdn.net/jdwang001/article/details/21377793

解决keil常见的两类警告问题:WARNING
http://bbs.21ic.com/icview-2524150-1-1.html?fromuser=

编译SeggerRTT报错: warning: #47-D: incompatible redefinition of macro "SEGGER_RTT_LOCK"
https://blog.csdn.net/weixin_39752827/article/details/88708626
举报

王燕

2019-12-3 09:35:37
@北洋水师 可以来看看
举报

彭少华

2019-12-3 23:58:21
看了两天了,确实不知道咋整。基本确定就是头文件引用顺序的问题,但是一直搞不懂keil的编译顺序,所有问题还是解决不了,现在无奈做了一个折中的办法,修改stm32f405xx.h文件,把“#define __FPU_PRESENT             1U”注释掉,然后预定义里添加“__FPU_PRESENT=1”。这样不会报重定义的警告,而且fpu也能启动。
但是这样需要修改库文件,这样的做法总是不太好,希望各位大神们帮帮忙
举报

lm12041204a

2019-12-4 11:19:21
incompatible   __FPU_PRESENT 重新定义不兼容
2 举报

彭少华

2019-12-7 23:10:52
问题依旧,大部分做法是哪个宏报警告了,到工程选项里去掉相应的,但__FPU_PRESENT=1如果不再预定义里定义那fpu就启动不了
1 举报
  • lm12041204a: 如果工程选项里没有问题,还是出这个警告,那就检查确保确实没有重复定义吧,或者降低警告级别。

谢振

2021-7-12 00:14:03
Project->Option for Target->C/C++->Misc Controls->设置一下这个位置就好
举报

更多回帖

发帖
×
20
完善资料,
赚取积分