2016-05-14 41 views
2

我不明白爲什麼外部符號等於鏈接器中定義的RAM的末尾。自動分配給RAM末尾的外部符號值

在特別,我看到這種情況下,在下面的RTEMS代碼:

extern symbol "rdb_start" definition - start.S - line 155 -157

extern symbol "rdb_start" usage - bspgetworkarea.c - line 23-41

舉例來說,當你在連接定義你的RAM大小的0x800000,並把你的入口地址爲0x40000000,則rdb_start值自動對應於0x407FFFF0。如果您定義了與rdb_start類似的任何其他符號並將其作爲rdb_start的全局符號,則會看到相同的結果。它的值自動分配到407FFFF0。

爲什麼?

回答

2

我有一個類似的問題,試圖讓RTEMS運行在LEON3處理器上。 在詢問Gaisler(製造LEON3的人)後,我瞭解到rdb_start start代表「遠程調試器啓動」,並且是外部設置的符號。當程序通過遠程調試器(即GRMON)直接加載到RAM或通過引導加載程序(即mkprom)從PROM解壓縮時,它用來設置堆棧指針。

堆棧指針通常應該設置爲內存的末尾 - 1個字。例如,帶有8 MB RAM的LEON3處理器的內存空間一般在0x40000000 - 0x407FFFFF之間,堆棧指針設置爲0x407FFFF0。

我能夠通過將-stack選項傳遞給mkprom2並使用GRMON中的堆棧命令來設置新堆棧指針的值,從而更改rdb_start的值。

我希望這可以幫助下一個人試圖弄清楚在RTEMS環境下的rdb_start是什麼!

+0

你的回答在問題提出後僅4個月,而不是「年」。無論如何,正如你所說,這似乎很有用,所以沒有必要浪費太多的道歉。 –

+0

感謝您的答案avislash它是非常有用的。 – RedArrow