2017-04-18 85 views
-1

當我定義全局(ROM & RAM)變量但從未在我的代碼中隨處使用時,如何在編譯時計算出這些變量。 目前,我正在與綠色山丘編譯器合作。是否有機會找到未使用的全局變量。嵌入式系統中未使用的全局變量

+1

它們應該在.data中,除非聲明爲常量,那麼它們將在.text或.rodata中。你檢查過二進制文件嗎? –

+1

鏈接器生成的.map文件應該標識全局變量的地址。但是,未使用的變量和函數可能會被鏈接器從可執行文件中刪除。 – kkrambo

回答

0

通常可以在生成的鏈接器映射文件中看到這一點。
作爲從a manual引述我能找到的:(第207頁)

地圖文件生成
控制地圖文件的生成。此選項的允許設置爲:
生成默認地圖文件(-map) - [默認]
創建一個映射文件,其中包含對象文件的名稱以及.map擴展名。
生成用戶指定的映射文件(-map = filename) -
用指定的文件名創建映射文件。
禁止地圖(-nomap)

您可以在項目中使用的其他參數養活這些選項,它會創建一個文件,報告一切有了解你的固件的位置和大小。

該文件將在輸出目錄的「可讀」文本中以.map的擴展名存在。 您可以尋找刪除的符號未使用的符號

請注意,它的默認行爲是創建一個映射文件。

鏈接器中經常可用的一個便利功能是創建callgraph。您可以輕鬆使用它,查看哪些功能取決於對方。更重要的是,它報告每個功能最壞的情況可預測堆棧使用可能。
它通常不預測由中斷引起的堆棧使用情況。