[STM32F1]

这段代码为什么报警?

[复制链接]
1016|8
手机看帖
扫描二维码
随时随地手机跟帖
lwsandy|  楼主 | 2017-2-21 09:14 | 显示全部楼层 |阅读模式
本帖最后由 lwsandy 于 2017-2-21 14:02 编辑

代码:

time2 = Clock_Time();
            tClockTime diff = time2-time;
            PRINTF("%d packets. Elapsed time: %d ms. App throughput: %d kbps.\n", NUM_PACKETS, diff, (int)((float)NUM_PACKETS*20*8/diff));



编译报警..\user\src\sample_service.c(400): warning:  #177-D: variable "diff"  was declared but never referenced

代码中,printf()函数不是引用了diff这个变量了吗?为什么还会报警。????

找到问题了,在这里定义了

void PRINT_MESG_UART(const char * format, ... );

#define PRINTF PRINT_MESG_UART
mmuuss586| | 2017-2-21 09:26 | 显示全部楼层
和编译器有关吧;
你把引用那句拎出来,单独写一句看看

使用特权

评论回复
john_lee| | 2017-2-21 09:57 | 显示全部楼层
最大的可能:PRINTF是个宏,在不同的编译环境(例如:debug/release)中,该宏的定义是不同的。在产生警告的环境中,该宏的定义可能把该语句转换成了注释或空语句。在其它编译环境中,该语句是有效的,语句中访问了某些数据;而在本环境中,由于该语句被忽略掉了,那些数据的访问也就自然不存在了,导致了该警告的发生。

使用特权

评论回复
lwsandy|  楼主 | 2017-2-21 10:19 | 显示全部楼层
john_lee 发表于 2017-2-21 09:57
最大的可能:PRINTF是个宏,在不同的编译环境(例如:debug/release)中,该宏的定义是不同的。在产生警告 ...

#ifdef DEBUG
#include <stdio.h>
#define PRINTF(...) printf(__VA_ARGS__)
#else
#define PRINTF(...)
#endif

应该是你说的情况,不过,我找了很久没发现  DEBUG  在哪里有定义过,求指点

使用特权

评论回复
lwsandy|  楼主 | 2017-2-21 10:35 | 显示全部楼层
john_lee 发表于 2017-2-21 09:57
最大的可能:PRINTF是个宏,在不同的编译环境(例如:debug/release)中,该宏的定义是不同的。在产生警告 ...

现在我在文件中 define  DEBUG 后该警告消失了。

在别人给的源码中我没有找到这个DEBUG在哪定义过,不过他的代码编译没有警告。

我自己修改的代码编译就有这个警告,有点困惑。

使用特权

评论回复
john_lee| | 2017-2-21 11:00 | 显示全部楼层
原则上DEBUG不应在源码中定义,而应该通过编译参数(开关)定义,比如:-DDEBUG。
编译参数一般在IDE的相关target设置中定义,命令行一般使用Makefile不同的target定义。

使用特权

评论回复
lwsandy|  楼主 | 2017-2-21 11:32 | 显示全部楼层
john_lee 发表于 2017-2-21 11:00
原则上DEBUG不应在源码中定义,而应该通过编译参数(开关)定义,比如:-DDEBUG。
编译参数一般在IDE的相关 ...

确实在源码中没有找到定义,但在IDE中也没找到,我用的MDK522,

使用特权

评论回复
john_lee| | 2017-2-21 15:10 | 显示全部楼层
本帖最后由 john_lee 于 2017-2-21 15:13 编辑

没有就自己定义,算了,送佛送到西吧。
先上图:
target.png
点工具条上右边蓝色的工具按钮,弹出对话框“Manage Project Items”:
item.png
新建的工程,在 Project Targets 框里只有一项(名字不关心),你点 Project Targets 旁边的功能按钮新建一项(新建的项的环境,会复制原有项的环境),再把两项的名称更改为 Debug 和 Release(这不是必须的,只是推荐)然后点 OK。
现在主界面工具条上的选择目标下拉框(Select Target)(左边蓝色的),就可以选择当前使用的环境了,选择后 Project 框里的 target 名称也会相应变化(Project 框里的蓝色部分)。
你然后可以修改各自环境,比如在 Debug 环境中加上你需要的 DEBUG 定义(Release 当然就不要加了):
debug.png
够详细了么?

使用特权

评论回复
lwsandy|  楼主 | 2017-2-21 16:14 | 显示全部楼层
john_lee 发表于 2017-2-21 15:10
没有就自己定义,算了,送佛送到西吧。
先上图:

这个我懂,原来那个是在源码定义的。不过还是感谢你的耐心指导。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

69

帖子

4

粉丝