【发布时间】:2015-04-13 00:34:10
【问题描述】:
我正在尝试诊断问题。问题是如果我在程序的开头放置一个 printf(特别是 printf),我的程序可以正常工作,如果我不这样做,它就不会。该问题非常特定于读取我在 systick_handler 中递增的 systick 变量的循环。
如果我使用 -fno-common 进行编译,那么一切正常。为什么会有这种行为?
此外,我已经从链接描述文件中删除了 .COMMON 部分,因为它们使程序几乎翻了一番。无论如何,如果没有它们,一切都运行良好,但我怀疑当我使用默认 (-fcommon) 标志进行编译时,它们的缺失会以某种方式导致无限循环。我仍然在我的文件中看不到对 .COMMON 部分的引用。它必须只是来自 libc。
谁能解释发生了什么?
【问题讨论】:
-
我不能提供一个,因为我不太确定问题是什么。我认为它在 libc 内部的某个地方,因为我根本没有使用 .common 部分。我通过使用 -fno-common 编译解决了这个问题,只是因为我首先省略了 .common 部分。但我不太确定这是否会导致将来出现一些未知问题,或者 -fno-common 是否永久解决了该问题。出现问题的平台我无法访问硬件调试界面,很遗憾。
-
生成地图文件,看看 '.COMMON' 里放了什么。