<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 牛人工程師與PIC32一個(gè)月發(fā)生的研發(fā)故事

牛人工程師與PIC32一個(gè)月發(fā)生的研發(fā)故事

——
作者: 時(shí)間:2014-06-25 來(lái)源:網(wǎng)絡(luò ) 收藏
測量性能

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

本文引用地址:http://dyxdggzs.com/article/248807.htm

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

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

  學(xué)習外設庫

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

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

  

 

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

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

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

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

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

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

  是我開(kāi)始嘗試移植第12章中代碼的時(shí)候了:“黑屏”確實(shí)是一件有趣的事情。用,我能夠演示SPI端口是如何的簡(jiǎn)單,只需要三只電阻器,幾個(gè)中斷,以及一些創(chuàng )新就可以產(chǎn)生一個(gè)復合視頻信號,特別是可以將任意的電視機轉換成單色顯示器。要產(chǎn)生一個(gè)視頻信號,需要中斷代碼與外設之間的精密協(xié)調。實(shí)際上,因為即便是在輸出定時(shí)上只差一個(gè)時(shí)鐘周期,在顯示器屏幕的左側就會(huì )產(chǎn)生可見(jiàn)的抖動(dòng)(所有的豎直線(xiàn)都變得像鋸齒一樣),故訓練結果將是用于中斷“決策”的一個(gè)理想放大鏡,這是PIC架構傳統上一直出眾的特性。然而不幸的是,根據定義,指令預取和存儲器緩存機制都是非確定的。

  經(jīng)過(guò)一段苦思冥想,我最終明白了。我在試圖做不應該做的事情!32位內核是為了提高性能而設計的。其使命是C代碼的運行盡可能地快,而把實(shí)時(shí)嚴格的工作留給外設。特別是,DMA外設是一個(gè)非常好的工具。

  最終,我想出了如何利用定時(shí)器直接產(chǎn)生復合視頻信號,并將DMA數據傳輸同步到SPI端口的方法。這種新方案提供了確定性的定時(shí),而且還將CPU的開(kāi)銷(xiāo)減少了大約25%到5%。幾個(gè)小時(shí)工作后,我完成了2D和3D視頻演示并運行,還加上了動(dòng)畫(huà),從高清顯示一直到單顯VGA(實(shí)例見(jiàn)圖3和圖4)。

  

 

  圖3:用PIC32所產(chǎn)生的3D圖形。

  

 

  圖4:用PIC32所產(chǎn)生的不規則幾何圖形。

  開(kāi)發(fā)PIC32很快變成一件令人上癮的事情,結果是很好的回報,那就是讓我完成了一本有關(guān)32位器件新書(shū)的寫(xiě)作之旅!PIC32與早先的16-bit PIC24微控制器的兼容性是那樣的無(wú)縫。這款新的MIPS內核的速度和性能給我留下了深刻的印象,大大擴展了任何先前的PIC MCU都無(wú)法實(shí)現的應用范圍。

  

 

  表1:PIC24F AD1CON寄存器的并排比較。

  Author:Lucio Di Jasio

  FAE

   Technology Inc.

c語(yǔ)言相關(guān)文章:c語(yǔ)言教程



上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: Microchip PIC32 PIC24

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>