2013-02-12 98 views
2

我试图删除使用ARMCC编译器的Keil ARM工具未使用的代码。 我以前使用的基于ARM GCC编译,我可以很容易地删除未使用的代码:ARMCC删除未使用的变量

-fdata-sections -ffunction-sections 

对于ARMCC我发现了相似的标志

--split_sections 

,但它仅适用于功能而不是与变量。

有什么办法可以删除未使用的变量与ARMCC?


编辑:

例如给下面的库代码:

lib.c : 

static int veryBigArray[1000000UL]; 

int func1() { ... } 

int func2() { memset(veryBigArray, 0, sizeof(veryBigArray); } 

和我的项目代码:

project.c: 

int main(void) 
{ 
    func1(); 
} 

我想用删除FUNC2()和veryBigArray编译器/链接器优化。

+0

我认为你需要更具体。它看起来像您的代码在多种情况下使用,并且当您链接它时,您希望删除未使用的代码。也就是说,有一个编译器或工具警告你某些东西没有被静态分析使用,这不是你想要的吗?所以有条件的编译或删除变量不是正确的方法吗? – 2013-02-12 22:56:37

+0

我有一个通用的库代码在多个项目之间共享。该库提供了多种接口功能。这些函数也使用内部静态变量。我的项目使用少量的接口函数,我想删除所有未使用的函数,包括未使用的静态变量。使用--split_sections我可以删除函数,但不是变量。到目前为止,我们公司使用基于GCC的编译器,我们不需要为此目的包括条件编译。 GCC可以删除未使用的代码和数据。我正在寻求类似ARMCC的功能 – 2013-02-13 05:55:55

+1

这没有帮助? http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0474i/Cchhhghb.html – auselen 2013-02-13 07:55:56

回答

1

我们从ARM支持收到的官方答复是,目前(ARMCC v5.03 [Build 24])在ARMCC编译器中没有这样的选项 - 他们从来没有想过这种情况。

希望它会被添加到未来的ARMCC版本。

1

在大多数情况下,当数据位于其自己的部分时,可以使用--remove作为链接器选项来删除未使用的数据。为了将数据在其自己的部分,你可以创建另一个文件或使用部分属性: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0375g/chr1359124982450.html

例如,如果全局数据只在一个函数中使用,并且被定义的功能,但从未使用过,则数据会自动在armcc中删除,而不会删除。

我说“在大多数情况下”,因为有些情况下用户告诉编译器特别不优化它。

Arm Compiler version 6(armclang)确实有-fdata-sections。