2016-11-15 223 views
1

我開始學習編寫一些低級別的微控制器軟件,並且我已經開始研究鏈接器腳本。「ENTRY」在鏈接器腳本中的含義是什麼?

在這種情況下,我沒有真正瞭解ENTRY命令的含義。由於大多數微控制器都在預定的地址開始執行,它會在鏈接器腳本中選擇哪個入口點有什麼不同?

回答

1

ENTRY()是一個ELF功能,基本上只是在您的可執行文件的ELF標頭中設置程序入口地址。該地址可能與二進制文件的第一個可執行段的起始地址不同(如果您未定義ENTRY(),則該地址可能是默認執行地址)。

是否使用此信息(即,是否開始執行發生在第一個代碼段地址或ENTRY())不受鏈接器控制,因爲它完全取決於ELF加載器的可用性和功能。

正如你通常在微控制器上沒有這樣的東西,ENTRY()在那裏實際上是沒用的,你可能不會遺漏這個聲明。

+0

謝謝!這幾乎是我得出的結論,但我不確定,因爲在許多用於裸機MCU應用程序的鏈接器腳本中,我仍然看到了入口點的定義。 – joseCM

+0

是否需要獲得gdb遠程擴展調試會話以允許使用「加載」。我發現我需要該功能才能工作(這對於開發來說非常方便)。 – aselle

1

入口點定義程序的起點。這當然是非常好的信息。這種方式閃光燈工具知道在哪裏閃光燈您的代碼和調試工具知道你的符號在哪裏。

+0

我知道這是有用的信息。但是,工具鏈接器腳本的全部用途不是知道在哪裏刷新代碼?如果你正在以完全裸機的方式進行編程,或者我錯過了什麼,指定入口點並不會改變程序的起點? – joseCM

+0

這是正確的,鏈接器腳本不能,也不應該影響MCU開始執行代碼的地址。鏈接器腳本指示如何將程序鏈接在一起以及在哪裏發生。這是它的主要目的。 – staringlizard

+0

所以我的問題依然存在。在這種情況下,是否有必要或有一些實際的理由來定義入口點? – joseCM

相關問題