許多應用程序需要從 RAM 中執(zhí)行代碼,例如出于安全原因或例如在引導加載程序用于閃存自編程的情況下。通常這樣的應用程序必須分為兩部分:
將從閃存執(zhí)行的主要部分。這部分代表主要應用程序,例如引導加載程序
主應用程序中的圖像將在運行時復制到 RAM
軟件概念
考慮到上述概念,開發(fā)需要考慮幾個問題:
如何創(chuàng)建將存儲在閃存中但在運行時從 RAM 執(zhí)行的應用程序?
如何調(diào)試在不同項目中構(gòu)建的應用程序?
公共資源
兩個應用程序的分離需要如何處理公共資源,例如 RAM。
RAM
– 堆棧和堆定義(兩個應用程序一個堆棧和一個堆;每個應用程序單獨的堆棧)
– SADDR 和數(shù)據(jù) RAM 應根據(jù)應用程序要求進行分區(qū)
選項字節(jié)
——選項字節(jié)將在應用程序之一中定義。此選項字節(jié)中的所有配置(例如看門狗)應對兩個應用程序都有效,因為它不能在運行時更改
中斷
——通過使用自編程庫,可以對 RAM 中的所有中斷使用通用中斷服務程序
下圖說明了兩個應用程序的內(nèi)存映射。這里堆棧用作兩個應用程序的公共資源。
兩個應用程序的內(nèi)存映射(ROM、RAM)
創(chuàng)建一個從 RAM 執(zhí)行的應用程序
本章介紹如何設置一個應用程序,該應用程序?qū)⑼ㄟ^主應用程序閃存中的映像加載并從 RAM 執(zhí)行。請注意,以下描述的配置基于兩個應用程序的一個公共堆棧。
內(nèi)存映射
由于 RAM 中的應用程序是獨立應用程序,因此必須相應地定義編譯器/匯編器使用的所有標準段,如 RCODE、XCODE、FAR_I、FAR_CONST 等。與普通應用程序相比的不同之處在于,該應用程序?qū)?RAM 而非閃存執(zhí)行。這意味著這些段最初位于圖像(閃存)中,稍后將逐段復制到 RAM 并從那里執(zhí)行。請注意,如果應用程序有多個片段,則無法直接復制整個圖像。
這樣做的原因是圖像中的段位置可能與 RAM 中的位置不同,因此必須逐段復制所有段。由于應用程序?qū)?RAM 中執(zhí)行,因此必須通知鏈接器該段將放置在閃存中,但從 RAM 中執(zhí)行。這可以通過將在下一章中介紹的鏈接器功能“分散加載”來完成。
編輯:hfy
-
RAM
+關注
關注
8文章
1368瀏覽量
114689
發(fā)布評論請先 登錄
相關推薦
評論