2017-04-18 60 views
-1

当我定义全局(ROM & RAM)变量但从未在我的代码中随处使用时,如何在编译时计算出这些变量。 目前,我正在与绿色山丘编译器合作。是否有机会找到未使用的全局变量。嵌入式系统中未使用的全局变量

+1

它们应该在.data中,除非声明为常量,那么它们将在.text或.rodata中。你检查过二进制文件吗? –

+1

链接器生成的.map文件应该标识全局变量的地址。但是,未使用的变量和函数可能会被链接器从可执行文件中删除。 – kkrambo

回答

0

通常可以在生成的链接器映射文件中看到这一点。
作为从a manual引述我能找到的:(第207页)

地图文件生成
控制地图文件的生成。此选项的允许设置为:
生成默认地图文件(-map) - [默认]
创建一个映射文件,其中包含对象文件的名称以及.map扩展名。
生成用户指定的映射文件(-map = filename) -
用指定的文件名创建映射文件。
禁止地图(-nomap)

您可以在项目中使用的其他参数养活这些选项,它会创建一个文件,报告一切有了解你的固件的位置和大小。

该文件将在输出目录的“可读”文本中以.map的扩展名存在。 您可以寻找删除的符号未使用的符号

请注意,它的默认行为是创建一个映射文件。

链接器中经常可用的一个便利功能是创建callgraph。您可以轻松使用它,查看哪些功能取决于对方。更重要的是,它报告每个功能最坏的情况可预测堆栈使用可能。
它通常不预测由中断引起的堆栈使用情况。