2012-03-02 90 views
0

我期待了解內存映射在嵌入式系統中的用途。 函數堆棧與正常的unix系統在這裏有何不同。RTOS的內存映射

任何可以幫助我調試嵌入式系統的少量內存相關崩潰的見解將會有所幫助。

回答

4

嵌入式系統,特別是實時嵌入式系統,通常有很多靜態分配的數據和/或放置在內存中特定位置的數據。內存映射告訴你這些事情在哪裏,當你遇到問題並需要檢查系統的狀態時,這可能會有所幫助。例如,您可能會轉儲所有內存,然後在事實之後進行分析;在這種情況下,內存映射對於查找您懷疑可能與問題相關的對象來說非常方便。

在代碼方面,您的系統可能會記錄一個硬件異常,該異常指向檢測到異常的指令地址。查看函數的內存位置,並結合對函數的反彙編,可以幫助您分析這些問題。

細節真的取決於你正在構建的是什麼樣的嵌入式系統。如果你提供更多的細節,人們可以提供更好的答案。

2

我不確定我是否理解這個問題。你似乎暗示「存儲器映射」是嵌入式系統獨有的東西,或者它是有形的軟件組件。它既不是;它僅僅是對應用程序內存使用情況的描述。

不管平臺如何,所有的應用程序都有一個內存映射,區別在於,通常在嵌入式系統上,應用程序作爲一個單一的整體實體進行鏈接,因此得到的內存佈局是指整個系統而不是單個進程因爲它可能在GPOS平臺上的應用程序中。

它是確定內存映射的鏈接器和鏈接器腳本,鏈接器將能夠輸出描述應用佈局和分配的映射報告文件。無論操作系統或體系結構如何,嵌入式和桌面應用都是如此。

2

RTOS的存儲器映射與任何計算機的存儲器映射沒有太大的不同。它定義了哪個硬件駐留在哪個處理器的地址上。該硬件可以是RAM,ROM,閃存,串行端口,並行端口,定時器,中斷向量或處理器可尋址的任何其他部分。

存儲器映射還描述了您打算如何爲系統設計中有限的資源(如RAM,ROM或Flash)進行預算。例如,如果有多個任務正在運行,則RAM可能會被映射,以便每個任務都有它自己分配給它的特定RAM區域。

反過來,RAM的每個任務的部分將被映射,以便堆棧有特定的區域,另一個用於靜態變量,可能更多的是堆(s)。

當你在目標上有一個操作系統時,它會動態地處理很多事情。但是,如果您的應用程序是設備上唯一的軟件,則必須自己管理這些決策,通常在編譯/鏈接時間。搜索「鏈接腳本」獲取更多線索,

0

內存映射是系統內存的佈局。它存在於嵌入式系統和普通應用程序中。雖然它在正常的應用程序中存在,但由於系統的限制,在嵌入式系統中它的使用是非常值得讚賞的。

存儲器映射通過鏈接器腳本或鏈接器命令文件進行管理。它將諸如Flash或內部RAM(L1P,L1D,L2,L3)或外部RAM(DDR)或ROM或外設(端口,串行,並行,USB等)或特定設備寄存器或I/O端口等資源映射到適當的固定地址在系統的內存空間中。

在嵌入式系統的情況下,根據存儲器配置或電路板和性能要求的限制,文本段或數據段或BSS等段也可以放在適當的存儲器中。

有些情況下,各種版本的開發板將有不同的內存和外設配置。在這種情況下,我們可能需要根據存儲器配置和電路板外圍設備編輯鏈接器腳本,作爲電路板啓動時的基本檢查點。

內存映射也可以幫助定義共享內存,它可以在多線程應用程序和多核應用程序中發揮關鍵作用。

可以通過反向追蹤崩潰地址並將其映射到系統內存來調試崩潰,以獲得可能導致問題的庫或對象的高級概念。