2013-02-12 102 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。