程序是在RAM里还是flash里执行
不是nand?flash不能運行程序嗎?難道32里用的是nor?flash?
如果你有研究過單片機編程的分散加載機制,在編程中寫過分散加載腳本。你問的第一個問題就解決了。
如果你有寫過nand?flash的驅動程序,你問的第二個問題就解決了。
STM32中的code可以不用拷貝到RAM中運行,也可拷貝到RAM中運行,這些不是技術問題,而是要看這段code
有沒有加載到RAM中運行的必要。后面再解釋。
nand?flash不支持片上執行,不能在nand?flash中執行程序,但nor?flash支持。
但不能因此就斷定STM32用的外置flash都是nor的。只要STM32帶nand?flash的控制器,就可以把nand中的code加載到RAM中運行。至于能不能用IO模擬nand?的接口協議,我沒搞過不清楚。
首先,應該所有的單片機都是片內集成RAM和ROM(在加載域和運行域的角度看,Flash就是ROM)。
一般容量小的單片機,RAM和ROM都小,不會把flash中的代碼加載到RAM中。
但有時確實需要加載,怎么辦呢。就把code中比較關鍵的,調用很頻繁的,對響應速度有要求的,就會加載到RAM中。
例如高頻率中斷的定時器中斷ISR,就可以在分散加載腳本中修改這段code的運行域到RAM中。程序在剛上電后會在main函數之前加載這段code到RAM中。這樣做的好處就是,這段code的執行速度快,我們知道ROM和RAM執行代碼的速度比差距是很大的。RAM比ROM中執行速度快得多!
當然,如果你的RAM很大,你甚至可以把全部的Code加載到RAM中運行。
nand?flash不是直接接到CPU的三總線上的,所以CPU不能直接從nand中取得可執行的指令,而是通過nand的控制器!
而nor是在總線上的,所以nor中的code可以直接執行。(nor的這個觀點僅是我個人看法,僅供參考)。
再說外置RAM的問題,單片機在帶SDRAM的控制器之后,就可以支持SDRAM了。
SDRAM在初始化好之后,SDRAM的使用方法和內置的SRAM沒有差別。
如果你的單片機支持SDRAM和Nand?flash,你可以把nand?flash中的code加載到SDRAM中運行。
如果你知道怎么寫分散加載腳本,這個功能分分鐘就能實現。
總結
以上是生活随笔為你收集整理的程序是在RAM里还是flash里执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于w600的hspi通信demo
- 下一篇: SDIO 协议分析