簡(jiǎn)單介紹CortexM4FPU單精度浮點(diǎn)運(yùn)算單元_第1頁(yè)
簡(jiǎn)單介紹CortexM4FPU單精度浮點(diǎn)運(yùn)算單元_第2頁(yè)
簡(jiǎn)單介紹CortexM4FPU單精度浮點(diǎn)運(yùn)算單元_第3頁(yè)
簡(jiǎn)單介紹CortexM4FPU單精度浮點(diǎn)運(yùn)算單元_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Cortex-M4PFU單元介紹近年,在Cortex-M3之后ARM公司又推出Cortex-M4內(nèi)核,和之前的M3內(nèi)核的區(qū)別之一就是M4帶一個(gè)單精度浮點(diǎn)運(yùn)算單元(PFU)。本文就FPU單元進(jìn)行一個(gè)簡(jiǎn)單介紹,幫助工程師更快的理解FPU單元。1.Cortext-M系列內(nèi)核的指令集從ARM公司發(fā)布的白皮書(shū)看,Cortex-M系列內(nèi)核的指令集如下圖所示:訥CORTEXCMNUSILfi4EVW4BCuLurCORTEJC-M3BTUrurmU7*IMTLJHMLMHTWCRItWnclixxtlSLEEsimuBi已3ESIAAMSttiTT5WI理&NULBDSMUE.THBN4JLVWWF1B驀雲(yún)

2、囂5lJL譚乂WTfUUl凳SMdLBTSHUEESATIflmiBf*WFEsassTTH1LffREXsnvrVRHTCortexM4F訥CORTEXCMNUSILfi4EVW4BCuLurCORTEJC-M3BTUrurmU7*IMTLJHMLMHTWCRItWnclixxtlSLEEsimuBi已3ESIAAMSttiTT5WI理&NULBDSMUE.THBN4JLVWWF1B驀雲(yún)囂5lJL譚乂WTfUUl凳SMdLBTSHUEESATIflmiBf*WFEsassTTH1LffREXsnvrVRHTCortexM4F從上圖可以看出,Corte-M系列的指令是向下兼容的,M0/M1的指

3、令最少,M0/M1和M3的指令都使用于M4的芯片。Cortex-M4的指令集分兩部分,一部分是在M3的指令集外增加了一些擴(kuò)展功能。另一部即上圖中粉紅色部分,就是用于FPU單元的單精度浮點(diǎn)運(yùn)算指令。這部分指令都是用V-開(kāi)頭的匯編指令,僅在FPU功能被使能時(shí)使用。需要注意的是FPU單元是指的芯片上的一個(gè)獨(dú)立于CPU處理的浮點(diǎn)運(yùn)算單元,整個(gè)單元在大多數(shù)廠家的芯片中都是可以被使能和關(guān)閉的。相對(duì)于芯片,編譯器也設(shè)置了相應(yīng)的FPU功能開(kāi)啟/關(guān)閉的選項(xiàng),在編譯時(shí)需要告訴編譯器是否開(kāi)啟FPU功能。編譯器一旦開(kāi)啟FPU功能,在處理單精度浮點(diǎn)運(yùn)算的語(yǔ)句時(shí)就會(huì)用帶V-開(kāi)頭的匯編指令進(jìn)行編譯。如果編譯器使能了FPU功

4、能,而芯片未開(kāi)啟FPU單元,程序運(yùn)行到浮點(diǎn)語(yǔ)句時(shí)就會(huì)出現(xiàn)異常。相反,如果編譯器未使能FPU功能,芯片即使開(kāi)啟了FPU單元,程序還是會(huì)按照未使能FPU的代碼進(jìn)行處理。2.編譯器中的FPU功能使能以KEIL為例,在創(chuàng)建一個(gè)CORTEX-M4的工程后,在工程的optionsfortarget“XXX”窗口的Target頁(yè)面中選擇是否開(kāi)啟fpu功能。如下圖所示:冋OptionsforTargetfpujestTargEt|riu+putListing|UserC/C+AsmLink-DebugUtilitiesalMHz):阿CodeGenerationOperating:|NoneSjem-View

5、erFile(.Sfr):IsFDLuminaIyLM4F12OH3QR.SFR二!UseCross-ModuleCptimizationUseMicroLIBFloaftngPointHardware:UseFPURead/OnlyMemoryAreasdefaultoff七h(yuǎn)ipStartupRead/WriteMemorprAressdefaultoff-chipStartLink-DebugUtilitiesalMHz):阿CodeGenerationOperating:|NoneSjem-ViewerFile(.Sfr):IsFDLuminaIyLM4F12OH3QR.SFR二!Us

6、eCross-ModuleCptimizationUseMicroLIBFloaftngPointHardware:UseFPURead/OnlyMemoryAreasdefaultoff七h(yuǎn)ipStartupRead/WriteMemorprAressdefaultoff-chipStartNoInit|QiD|k4DDGDIRCM1:IRGM1:IROM2:RCM2:ROMS:onchipRAfvll:RAM2:on-chipIRAM1:IRAM2:|C:=Lncel編譯器通過(guò)該選項(xiàng)來(lái)判斷是否使用V開(kāi)頭的浮點(diǎn)運(yùn)算指令。一旦選擇“useFPU”功能,如果代碼中帶有單精度浮點(diǎn)運(yùn)算的代碼,編譯器

7、就會(huì)使用帶V的FPU單元匯編指令,無(wú)論芯片是否開(kāi)啟了FPU單元功能。如果選擇不使用FPU功能,即使芯片開(kāi)啟了FPU單元,編譯器一樣不會(huì)采用帶V的匯編指令。3.例程分析下面用一個(gè)實(shí)例來(lái)分析開(kāi)啟、關(guān)閉FPU單元的程序處理。先上代碼:001.staticfloatfDat1=0.0;002.staticfloatfDat2=0.01;003./004./fputest.005./006.intmain(void)007.008.inti;009.FPUEnable();010.FPUStackingEnable();011.for(i=0;i100;i+)012.013.fDat1=fDat1+fDat2;014.015.其中0ll.014.行在開(kāi)啟編譯器FPU功能后,編譯出來(lái)的代碼為:MOVSr0,#0 x00VLDRs0,r1,#0 x04VLDRs1,r1,#0 x00ADDSr0,r0,#1CMPr0,#0 x64VADD.F32s1,s1,s0VSTRs1,r1,#0 x00BLF0 x00000316其中紅色標(biāo)注的都是以V-開(kāi)頭的匯編代碼,這些代碼在FPU單元中運(yùn)行。如果關(guān)閉編譯器的FPU功能,編譯出來(lái)的代碼如下:MOVSr4,#0 x00LDRr6,r5,#0 x04LDRr0,r5,#0 x00MOV

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論