最近在開發stm8時,想把掉電存盤的資料保存到片上Flash中,根據手冊需要將代碼運行到ram才能運行,據此引申出幾個問題
A) . 程式運行在Flash上,是不是啟動時PC(R15)指向的是flash韌體首地址上,如stm32默認800000H,即指令直接讀取flash上的資料
B). 程式運行在Ram中,單片機的sRAM很有限,一次是無法完全加載完整程式(類似Linux 內核加載到DDR中),那么這個是怎么實作的,是將準備使用的程式預先讀取到ram中,然后通過指令去讀取運行嗎?
C). 程式鏈接時,將某段代碼鏈接到ram中運行,那么系統啟動后是先將該段程式地址加載到ram中嗎?什么時候被釋放,還是在程式生命周期結束后釋放
D). 帶有Cache的單片機在是配合資料暫存器使用還是指令暫存器器?它是提高ram的讀寫效率,那么這個能用到flash程式讀寫上嗎
uj5u.com熱心網友回復:
加分
uj5u.com熱心網友回復:
A)stm32的boot0和boot1兩個硬體引腳決定從哪里開始運行程式;b0為0 從flash,b0=1,則從ram或系統存盤區B)如果你希望從ram運行,則必須在主flash或系統存盤區上有管理程式,它負責加載程式到ram區,然后,跳轉到ram區運行,ram區末尾,必須有一段代碼用于加載下一段程式,或跳轉到某個特定入口;
C) 單片機連接時,連接的是絕對地址
D)cache對于讀寫是可做透明的看待,一般不需要考慮它是怎么起作用
uj5u.com熱心網友回復:
感謝答復,關于C的問題我重新描述下,就是我修改了ld鏈接檔案,將某段代碼定義到到ram中運行,那么這段程式是在系統啟動時就被加載到ram中嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/257940.html
標籤:單片機/工控
上一篇:ESP-01
