2013-07-12 39 views
0

我很失望,因爲我找不到關於內存分段的信息。我知道我應該將內存劃分爲諸如.text,.data,.bss,.stack之類的基本部分,這些部分用於已編譯程序的目標文件中。我知道還有更多的其他章節,其中一些對C和C++來說是必需的。我正在搜索有關哪些部分應該包含在鏈接腳本中的信息?Cortex-M4的GNU鏈接描述文件中的內存段

回答

2

它取決於您的具體編譯器和目標架構哪些輸出節將出現或可能存在。在你的代碼中,你可以定義任意名稱的輸入節。鏈接描述文件用於將來自文件的符號或顯式定義的輸入節中列出的符號綁定到輸出節。

找出哪些輸出節存在的最好方法是編譯和鏈接示例應用程序,並檢查生成的映射文件(如果映射文件不是自動生成的,則應調整鏈接器選項)。地圖文件不適用於其他工具的使用,但可用作可讀描述,瞭解程序中的內容,位置,部分以及原因。注意:在該映射文件中,您還可以找到一些不屬於程序組成部分的名稱,並且不會將其轉換爲您的程序執行或使用的物理位,但對於您的調試器來說是相當有幫助的。

如果您沒有明確地將某些符號映射到輸出節,鏈接器通常會在最後一個顯式定義的節後添加所有剩餘的符號。

因此,您也可以定義某種'全部捕捉'部分,它肯定會吸引所有尚未分配的符號,然後驗證輸出部分是否仍爲空。 即

在你的部分終端模塊,添加

SECTION 
{ 
    <snip> 

    .mustbeempty 
    { 
    *(.*) ; 
    } 
    ASSERT(SIZEOF(.mustbeempty) = 0) ; 
} 

有關鏈接腳本

更多信息可以在很多地方找到:

+0

+1請問您可以擴展您的答案嗎?另外,您是否有鏈接瞭解更多關於鏈接器腳本的鏈接?謝謝。 – Sabuncu

+0

另請參閱:http://stackoverflow.com/q/12763041/911550 – parvus

相關問題