我剛剛遇到了一些宏,供我的微控制器編譯器強制(或建議)從RAM執行功能。
http://processors.wiki.ti.com/index.php/Placing_functions_in_RAM
https://community.nxp.com/thread/389099
在什麼情況下有價值?如果好處只是提高速度,為什麼我不總是從RAM執行呢?通常會導致更高的電流消耗嗎?
我剛剛遇到了一些宏,供我的微控制器編譯器強制(或建議)從RAM執行功能。
http://processors.wiki.ti.com/index.php/Placing_functions_in_RAM
https://community.nxp.com/thread/389099
在什麼情況下有價值?如果好處只是提高速度,為什麼我不總是從RAM執行呢?通常會導致更高的電流消耗嗎?
除了速度&以及其他人已經提到的其他功能之外,從RAM執行代碼在需要重新編程Micro Flash的引導加載程序中很有用-您無法從中間的Flash執行代碼刪除&重編程。
我沒看過那個微型相機的數據表。但是,在這種情況下,從RAM取數據通常比從程序存儲器的閃存取數據要快。
閃光燈的優點是大批量可以相對便宜。因此,微控制器製造商有時會在芯片上放置大量閃存,然後提供可以執行代碼的更有限的RAM空間。這樣可以將對時間要求嚴格的例程複製到RAM中,然後從那裡執行。
您所引用的編譯器開關可能與鏈接器配合使用,並標記將從復位開始運行的編譯器運行時代碼將該段閃存複製到RAM。不同的實現方式會有所不同。
當您要在RAM中執行速度更快時,通常是因為該RAM是片上SRAM。這是一種稀缺資源,您可能需要用於需要讀/寫訪問權限的數據。
在擁有 ROM /閃存中的代碼時,將其用作代碼意味著您需要X數量的閃存和X數量的RAM。
它在啟動時或您要運行它時還需要一個額外的複制階段,儘管它幾乎無關緊要。
傳統上,這是通過指令緩存解決的,但是在微控制器中,保持內部SRAM通用可能更有意義,因為您不使用微控制器,因為您想要最快的執行速度。
還有一個可靠性問題-在實際ROM中執行的代碼很難通過錯誤代碼進行修改。
除了所有好的答案:
如果好處僅是為什麼我不總是從RAM中執行 提高速度?
因為在嵌入式系統中,通常您沒有所需的RAM量。例如,具有32kB或RAM和512kB EEPROM的STM32。為了能夠在RAM中執行整個程序,您需要一個大於EEPROM的RAM。
其他答案似乎並沒有太多討論功耗,您特別詢問過。
答案是,它在某種程度上取決於微控制器,但是通常從RAM執行可以減少功耗,因為從RAM讀取指令所需的能量比從閃存讀取能量要低。
典型的用途是在RAM掉電的情況下從RAM運行低功耗的“睡眠”功能。不僅降低了功耗,而且如果微控制器需要快速喚醒(例如響應外部中斷),那麼在閃存再次加電時也沒有延遲。
某些零件(例如Atmel SAM系列的某些零件)具有特殊的超低功耗RAM,可用於此目的。這樣一來,就可以將少量代碼加載到特殊的RAM中,同時將大量可用RAM和所有其他存儲器都關閉電源,並使微控制器進入深度睡眠模式。
除了別人提到的潛在的速度優勢外,RAM代碼也是動態的,可以根據需要通過FLASH中的一些定制代碼即時修改。
這可以像更改幾個參數一樣簡單,也可以是整個處理程序例程遠程上傳。
從RAM中執行代碼比從閃存中執行代碼要快得多。大多數CPU經過嚴格優化,以實現最快的RAM訪問,甚至最快的閃存也僅達到RAM速度的一小部分。
但是請記住,將代碼從閃存移動到RAM也需要時間。如果代碼僅執行一次,則只需讀取一次,因此實際上會浪費時間將其首先複製到RAM中,而不是直接執行。如果偶爾執行代碼(因此將其複製到RAM會在第二次調用時增加執行),但是系統通常處於空閒狀態,那麼通過將其複製到RAM可以更快地執行該代碼,但是沒人在乎,因為系統有足夠的時間來度過。
因此,只有頻繁執行代碼,並且已將其視為系統的瓶頸,這種優化才值得付出努力。
另一方面,RAM需要主動保存數據,而閃存則不需要,因此如果RAM需要保持活動狀態,則總功耗會增加。但是,只有在根本不使用RAM的情況下,這才有意義,但是大多數現代系統將以一種或另一種方式使用可用的RAM,因此已經使其保持活動狀態。
從RAM執行代碼有兩個很常見的原因:
某些微處理器無法在閃存編程期間從閃存執行-儘管許多代碼可以執行此操作,只要代碼位於與要寫入的閃存不同的塊中即可。Flash寫入可能正在重新編程應用程序(引導加載程序情況),或者當Flash用於存儲非易失性程序信息(配置,校準等)時
在許多微處理器上,RAM比閃存快得多。對於這些設備,可以從RAM中執行對速度有嚴格要求的小型例程,儘管通常RAM的供給要比閃存短得多。
針對隨機位翻轉的僅RAM執行安全性的另一個用例。我們在小型cubesat上使用此模型,因為主計算機板具有ECC ram,可以承受由於輻射引起的位翻轉。當啟動時的虛擬磁盤在ECC環境中完全運行時,整個OS都加載到ram中。
閃存不受ECC保護(標準的微型SD卡),但是我們還有其他方法來檢查損壞(多張圖像,校驗和等)