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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 從8/16位向32位圖形MCU升級的技巧

          從8/16位向32位圖形MCU升級的技巧

          作者: 時間:2009-07-06 來源:網(wǎng)絡 收藏

          測量性能

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


          在早期的一些日子里,我的好奇心促使我想知道PIC32究竟帶來什么好性能。在我的16位器件一書的第四章中,即“Numb3rs”,我對執(zhí)行基本的算術(shù)運算所需的指令周期數(shù)進行了統(tǒng)計,并將它們與各類整數(shù)和浮點類型進行了比較。這在時鐘周期與所執(zhí)行的指令密切相關(guān)的場合,如PIC24和dsPIC DSC內(nèi)核中那樣,這種方法是合理的。但在PIC32內(nèi)核中,由于采用了MIPS的傳統(tǒng),為“比賽”增加了“難度”。每個時鐘周期所執(zhí)行的指令是可變的,因為當執(zhí)行代碼快于閃存額定速度(每30MHz只插入一個時鐘周期)時可以插入等待狀態(tài),或者可以無關(guān),這要歸功于預取狀態(tài)機(能夠一次預取四條指令)。最后,激活一個高速緩存,進一步改進了高速性能。


          PIC32的高速緩存使得周期數(shù)有點不可預測,也許變得沒有意義。我好像覺得我從貨物推車一下子到了一級方程式賽車一樣!于是,我決定需要在32位器件一書中增加一章關(guān)于PIC32的性能調(diào)整內(nèi)容。為了給PIC32加上重載荷,我找到我在大學讀書時學習基本數(shù)字信號處理的一個老代碼程序:即快速付里葉變換。我采用的是標準浮點結(jié)構(gòu),沒有手工和編譯器優(yōu)化。另外還用了一個32位定時器,讓PIC32自己計時,隨后我逐步地開始選用一些新的程序選項。


          開始時,我激活指令預取,然后我找到高速緩存,再隨后我通過人工方式調(diào)整等待狀態(tài)。一開始性能改善極大,并且隨著之后對配置進行進一步的細調(diào),性能改善更多。最終,我意識到最佳的配置必須隨應用定制,但必須由標準器件庫中的SYSTEMConfigPerformance()提供一個好的起點。


          學習外設(shè)庫


          這是我第一次使用“標準”外設(shè)庫,也是這種愛/恨關(guān)系的開始。由于我在非常小型的8位器件上使用匯編進行代碼開發(fā)已經(jīng)許多年了,且通常都是需要采用手工優(yōu)化客戶代碼,我基本上都是自己親自工作,最終我開發(fā)出了一些自己的器件庫。


          這一次,在投放PIC32產(chǎn)品之前一年多的時間,我不僅移植了16位器件的庫,還對它們進行了擴展來支持一系列新功能。我沒有更多的理由-唯一理由就是我自己必須掌握并學會如何使用它們。參見用于一個使用該外設(shè)庫的程序代碼段的Listings1和2,見圖2。

          圖2:代碼移植時用于一個使用該外設(shè)庫的程序代碼段的Listings1和2。

          圖2:代碼移植時用于一個使用該外設(shè)庫的程序代碼段的Listings1和2。


          通過利用這個新庫,16位和32位應用之間的代碼兼容“絕對”沒有問題。即便是外設(shè)寄存器上的極小差別也可以通過應用代碼完全消除。實際上,這使得一個應用在16位器件和32位器件上都可以運行,從而開發(fā)人員面向兩種架構(gòu),卻維護統(tǒng)一的代碼基。


          不過,雖然在器件數(shù)據(jù)頁中對硬件控制寄存器名稱已有注明(甚至每一位都很詳細),但卻沒有所有的功能/宏名及其參數(shù)。很多時候,我發(fā)現(xiàn)必須將單個的包含文件與器件數(shù)據(jù)頁進行比較,嘗試著去猜測究竟有哪些控制位與一個特定的庫參數(shù)相關(guān)。當利用最簡單的庫(比如I/O端口操作)時,這是一件特別麻煩的事情,對我來說,在這里,庫抽象層的優(yōu)點更值得質(zhì)疑。


          最終,我發(fā)現(xiàn)可以采取一個平衡折中。即可以采用傳統(tǒng)的方法訪問絕大部分的基本外設(shè)(例如I/O端口和計時器),而在使用更復雜/新外設(shè)時才使用庫。于是,我迅速通過了有關(guān)代碼的幾個章節(jié),實際上什么都沒有改。這些章節(jié)包括:SD/MMC接口,F(xiàn)AT16文件I/O甚至包括WAV音樂文件重放。


          當我決定再深入地研究中斷時,以及后來開始使用PIC32的新DMA模塊時,這些庫的好處就變得很明顯了。

          中斷和決策


          PIC32提供兩種中斷選擇:一種是非常類似于PIC16/18 8位架構(gòu)操作方式的單矢量模式(順便指出,與RTOS也更加友好),另一種是更類似于16位PIC24 和dsPIC DSC工作模式的多矢量模式。利用interrupt.h庫來設(shè)置參數(shù)是輕而易舉的事情。



          關(guān)鍵詞: 技巧 升級 MCU 圖形 8/16位向

          評論


          相關(guān)推薦

          技術(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); })();