<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          stm32 DMA性能資料

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          為了快速傳送一個數(shù)據(jù)塊,使用 DMA 傳送程序(Mem to Mem 16bits) 測量了一下傳送的時間,128個16b數(shù)據(jù)大約用了12us (72Mhz 時鐘)。 換句話來說,STM32 DMA 性能為10M/s


          又使用memcpy 來比對一下,用時約4us ,顯然memcpy 要快很多。

          btw, 在ST的手冊里面未見對DMA性能的表述。

          本文引用地址:http://www.ex-cimer.com/article/201611/321188.htm

          ----------------------------------

          DMA傳送數(shù)據(jù)的速度不會比CPU直接傳送數(shù)據(jù)快,因為總

          線頻率沒有變。

          當(dāng)CPU也在運(yùn)行執(zhí)行指令時,DMA傳送數(shù)據(jù)的速度會比CPU直接傳送數(shù)據(jù)慢,這是因為DMA與CPU分時使用同一條總線的緣故。

          ----------------------------------

          有一個專門講DMA性能的手冊的,你可以在官網(wǎng)上找到的
          里面對DMA的性能描述得很清楚
          AN2548 Using the STM32F101xx and STM32F103xx DMA controller

          ----------------------------------------

          這個說法有點問題
          DMA數(shù)據(jù)傳送是memory->memory
          memcpy是memory -> cpu_internal_register -> memory

          memcpy快應(yīng)該是因為1. memcpy采用了ldm/stm指令,這個對提高速度很有幫助 2. 總線仲裁偏袒cpu core

          ---------------------------------------

          恩............ DMA控制器并不在memory之內(nèi)?我想你的意思是指MASTER DMA吧,像PCI那樣。但即使是legacy dma,由dma controller通過硬件的方式存取memory在通常情況下也應(yīng)該比cpu快,因為不需要取指/解碼/執(zhí)行這樣的流程。不過stm32的 controller不支持bust mode確實對其速度有很大影響,而ldm/stm指令實際上起到了bust mode的作用,可以在一次取指/解碼/執(zhí)行過程中操作多個數(shù)據(jù)。如果controller支持burst,相信就可以超越memcpy的速度了。目前來看stm32 dma的速度確實不如memcpy,其最大的好處在于cpu可以不參與其過程。

          -----------------------------------

          非常同意byeyear 的解釋,順便問一句,其他品牌的M3的DMA是否也不支持 burst 模式?

          ------------------------------------

          DMA并不一定快,只是提高了有效代碼的運(yùn)行效率。



          關(guān)鍵詞: stm32DMA性能資

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();