国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

STM32的代碼,跑在RAM里快?還是跑在Flash里快?

發布時間:2009-11-25 18:04    發布者:STM32
關鍵詞: Flash , RAM , 代碼
這肯定是很多人關心的問題,下面通過一個例子看看會有什么樣的結論:

測試手段如下:

主循環一直在做一個變量的自加(sum1++),當然前提保證不會溢出。

Cortex-M3內部的Systick計數,以一秒鐘為限,這個sum1的數值大小,可以判斷哪種方式比較快。為了嚴密,我們觀察第一秒到第二秒之間的計數效果;而不是從第0秒到第1秒(因為使能Systick到真正開始執行sum1++可能有間隙)。在第一次進入Systick的ISR時,記錄下sum1的值;第二次進入Systick的ISR時,再次記錄sum1的值,兩次值之差即為一秒鐘間隔中sum1執行了多少次自加。由此看出哪種方式比較快。

同樣的測試前提:Prefetch Buffer Enable + Flash Latenty="2" (根據Flash Programming Manual中要求的那樣,當48MHz
測試結果如下:

不對代碼優化,在RAM中執行程序:sum1計數69467/秒
不對代碼優化,在FLASH中執行程序:sum1計數43274/秒 (Flash里跑得慢)

/***********循環體內代碼為N個以下的block*************/
(1)LDR R0,[PC, #0x154]
(2)LDR R1,[PC, #0x154]

(3)LDR R1,[R1,#0]
(4)ADDS R1, R1,#0x1

(5)STR R1,[R0, #0]

    ......
/****************************************************/

打開速度優化開關,在RAM中執行程序:sum1計數98993/秒
打開速度優化開關,在FLASH中執行程序:sum1計數115334/秒 (Flash里跑得快)

/***********循環體內代碼為N個以下的block*************/
(1)LDR R1,[R1,#4]
(2)ADDS R1, R1,#0x1
(3)STR R1,[R0, #0]
    ......
/****************************************************/

結論就是:

1)程序運行在RAM里速度快還是運行在Flash里速度快,不是絕對的一概而論的,取決于代碼;

2)就以上兩種具體的代碼情況來說,我覺得無優化時,如果在Flash里執行:(1)(2)的取指(讀flash)->譯碼->執行 (讀flash);取指和執行階段flash的目標地址不是連續的,因此是non-sequencial access,所以會很慢;
打開優化時,(1)(2)(3)都不會造成flash的non-sequential access,所以在flash里的優勢(取指和取數據走不同的總線ICode和DCode以及Prefetch)就體現出來了。

再進一步的分析,又有這樣一些結論:

沒有優化時,指令執行時要到Flash中取常數,結果造成指令預取隊列的取指中斷,取完常數后需要重新填充指令預取隊列,而Flash訪問需要插入等待周期,當然時間就比較長了。

經過代碼優化后,指令執行時不用再到Flash中取常數,指令預取隊列不會被打斷,而Flash訪問需要插入等待周期的效應被下面貼子中介紹的取指緩沖區抵消,所以自然速度就快了;而這個時候在RAM中執行反而慢了是因為RAM不在ICode總線上,從RAM取指需要繞一圈,當然要比在ICode總線上的Flash慢了。

關于Flash的性能,請看我的另一篇分析:【分析】STM32從Flash中運行程序的時序分析

另外,STR9與STM32的總線架構是一樣的,這里有一個在STR9上實現的FFT函數的實測數據,可以進一步說明在Flash中運行代碼可以比在RAM中快!

在ST的網站上有一個DSP的函數庫,這是它的文檔《STR91x DSP library (DSPLIB)》,在這篇文檔中有一節討論FFT運算速度的,那里給出了實際的運算時間比較,摘錄如下:

Radix-4
Complex FFT     Operation Mode     Cycle Count     Microseconds
64 Point     Program in Flash & Data in SRAM     2701     28.135
64 Point     Program & Data in SRAM     3432     35.75
64 Point     Program & Data in Flash     3705     38.594
256 Point     Program in Flash & Data in SRAM     13740     143.125
256 Point     Program & Data in SRAM     18079     188.323
256 Point     Program & Data in Flash     19908     207.375

最初發表日期:2008-8-28
本文地址:http://m.qingdxww.cn/thread-5774-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節省時間和空間
  • Dev Tool Bits——使用DVRT協議查看項目中的數據
  • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監視
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲香蕉网久久综合影院3p | 国产99视频精品免费视频7 | 狠狠入ady亚洲精品 狠狠热精品免费观看 | 麻豆网站在线免费观看 | 最新国语自产精品视频在 | 国产四级 | 日本人的色道免费网站 | a一级一色一情 | а天堂中文最新版在线 | 日韩欧美高清在线观看 | 麻豆md国产在线观看 | 手机在线看片国产 | 日韩精品福利在线 | 成人精品国产亚洲 | 毛片特级| 国产精品久久久亚洲456 | 日本中文字幕网站 | 一区两区三不卡 | 岛国视频在线 | 自拍视频在线免费观看 | 大又大又粗又爽女人毛片 | 亚洲最大情网站在线观看 | 视频二区 国产精品 职场同事 | 亚洲欧美日韩国产综合高清 | 国内自拍视频在线播放 | 最新精品在线视频 | 日韩三级毛片 | avtom影院永久转四虎入口 | 国产免费播放一区二区三区 | 亚洲欧洲日产国码久在线观看 | 国产tv在线观看 | 中文字幕 在线观看 | 国产精品国产欧美综合一区 | 色综合视频在线 | 欧美黄色片免费看 | 妈妈的朋友们3线在线观看 妈妈的朋友伦理在线观看 妈妈的朋友伦理片在线观看 | 国产一区二区视频在线 | 尹人在线| 日日噜噜夜夜狠狠tv视频免费 | 亚洲精品香蕉婷婷在线观看 | 国产一区二区三区日韩欧美 |