技術(shù)精英年會c11l11_第1頁
技術(shù)精英年會c11l11_第2頁
技術(shù)精英年會c11l11_第3頁
技術(shù)精英年會c11l11_第4頁
技術(shù)精英年會c11l11_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C11L11 HTC了解使用HI-TECH C® PRO編譯器的增強(qiáng)型中檔PIC® MCU系列© 2010 Microchip Technology Incorporated。所有。C11L11 HTCSlide 1課程安排l 簡介l 編譯器概述l 數(shù)據(jù)類型和器l 列表文件文件ll 中斷l(xiāng) 運(yùn)行碼l C語言和匯編語言接下來. 簡介l 編譯器概述l 數(shù)據(jù)類型和器l 列表文件文件ll 中斷l(xiāng) 運(yùn)行碼l C語言和匯編語言HI-TECH C®PRO模式l PRO(需要l 可全面優(yōu)化l 標(biāo)準(zhǔn)(需要證)證)l 優(yōu)化受限l Lite(軟件)l 基本優(yōu)化,l 評估版包含

2、45天的PRO模式,隨后將恢復(fù)為Lite模式安裝l 安裝時進(jìn)行激活l 通過服務(wù)器連接可能需要離線激活l 可根據(jù)項目選擇模式與MPLAB®IDE集成l HI-TECH通用工具套件l 安裝在編譯器上的插件l 可于編譯器進(jìn)行更新演示增強(qiáng)型PIC®系統(tǒng)MCU的改進(jìn)l 間接l 多個FSRl 通過FSR所有器l 新指令和尋址模式l 用于中斷的寄存器l 新指令l Shifts、carry arithmetic和indexed call等器l接下來 簡介 編譯器概述l 數(shù)據(jù)類型和器l 列表文件文件ll 中斷l(xiāng) 運(yùn)行碼l C語言和匯編語言編譯器應(yīng)用程序編譯順序l 所有C語言代碼都并行編譯l

3、包含庫文件中的模塊l P代碼文件是中間文件編譯器消息傳遞l 通過由驅(qū)動器序報告的系統(tǒng)實現(xiàn)應(yīng)用程l 驅(qū)動器選項可用于:l 調(diào)整格式l 選擇語言l 已的警告ts002.c: 159: (762) constant truncated when assigned to bitfield (warning)編譯器消息傳遞l #pragma警告warning單獨錯誤和disable list消息enable list消息push保存當(dāng)前狀態(tài)pop獲得先前狀態(tài)warning list發(fā)出警告消息error list發(fā)出錯誤消息接下來. 簡介 編譯器概述 數(shù)據(jù)類型和器l 列表文件文件ll 中斷l(xiāng) 運(yùn)行碼l

4、C語言和匯編語言標(biāo)準(zhǔn)數(shù)據(jù)類型l 標(biāo)準(zhǔn)算法類型l char型默認(rèn)為無符號型l double和float型默認(rèn)為24位寬l 用-double=32和-float=32指定32位編譯器指定類型l 24位short long整型l 用作布爾值的bit型l 每字節(jié)打包8位變量l 調(diào)試文件中使用的位地址l 位變量不為autol 采用截尾方式將整型轉(zhuǎn)換為位類型增強(qiáng)型PIC® MCU的優(yōu)勢中檔系列增強(qiáng)型中檔系列;ptr.c: 30: a1 += a2; bsf3,5bsf3,6movf110,wbcf3,5bcf3,6addwf32,fbtfsc3,0incf33,fbsf3,5bsf3,6movf

5、111,wbcf3,5bcf3,6addwf33,f 162:;ptr.c: 31: a1 <<= 2;bcf3,0rlf32,frlf33,fbcf3,0rlf32,frlf33,f;ptr.c: 30: a1 += a2; movlb3movf110,wmovlb0addwf32,fmovlb3movf111,wmovlb0 addwfc 33,f156:;ptr.c: 31: a1 <<= 2;lslf32,frlf33,flslf32,frlf33,f標(biāo)準(zhǔn)限定符l const限定符l 對象為只讀(不能寫入)l 存放于程序空間l 字符串常量("liter

6、al”)具有const char *型標(biāo)準(zhǔn)限定符l volatile限定符l 值可從外部修改l 應(yīng)當(dāng)用于寄存器/變量:l 由硬件修改l 產(chǎn)生電信號l 由中斷程序修改l 編譯器將嘗試原子l 在一條指令中修改值編譯器指定限定符l near限定符l 嘗試到通用器中l(wèi) persistent限定符被運(yùn)行時啟動代碼清零ll 復(fù)位后仍保持值l bank0/1/2/3限定符l 嘗試將對象放入指定區(qū)限定符l 由-ADDRQUAL選項的操作限定符l 要求(Require):必須服從限定符l 請求(Request):如果可以則服從l 忽略(Ignore):必須忽略限定符l 拒絕(Reject):限定符將觸發(fā)錯誤空間

7、分配調(diào)用圖生成編譯后的堆棧生成絕對變量SFR變量,例如l 主要用于l 在用于GP變量時要l 頭文件包含所有SFR的定義:#include <htc.h>volatile near unsigned char PIR1 0x0C;指針l 完全支持?jǐn)?shù)據(jù)和函數(shù)指針l 定義通用格式及示例:對象類型和限定符*指針限定符指針名稱及初始化char*cp ;const char*cp ;char*constcp = address;const char*constcp = address;指針指針大小和范圍由使用情況決定ll 每個目標(biāo)的空間/區(qū)l 目標(biāo)的大?。ㄓ绕涫菙?shù)組)l 特殊的限定符不再需要或

8、考慮l 標(biāo)準(zhǔn)限定符維持原有意義指針示例指針示例指針示例增強(qiáng)型PIC® MCU的優(yōu)勢中檔系列增強(qiáng)型中檔系列;ptr.c: 30: if(*cp = 'x') movf125,wbcfpclath,3bcfpclath,4callstringdirbcfpclath,3bcfpclath,4xorlw120btfss3,2gotol2 151;ptr.c: 31: *lp = 0x1234; movf114,wmovwf4movlw52movwfindfincf4,fmovlw18movwfindf stringdir:movwfbtempmovlwhigh string

9、dir movwf10movfbtemp,waddwf2,f;ptr.c: 30: if(*cp = 'x') movf125,wmovlphigh stringtab callwpagesel $ xorlw120btfss3,2bral255 155;ptr.c: 31: *lp = 0x1234; movf114,wmovwf4clrf5movlw52movwifsr0+movlw18movwfindf函數(shù)調(diào)用l 所有器件使用堆棧,然后恢復(fù)為查找表l 堆棧意味著調(diào)用指令l 查找表速度較慢,但是用深度的調(diào)l 可定義絕對函數(shù)void special(int a) 0x100.

10、行內(nèi)延遲l 特殊行內(nèi)延遲“函數(shù)” _delayl 已提供的宏也使用_delay和l;wait.c: 10: _delay(10);movlw3movwf?_main u857:decfsz ?_main,f gotou857;wait.c: 12: _delay(2000);movlw3movwf?_main+1 movlw151movwf?_main u877:decfsz ?_main,f gotou877 decfsz ?_main+1,f gotou877nop2接下來. 簡介 編譯器概述 數(shù)據(jù)類型和 列表文件器文件ll 中斷l(xiāng) 運(yùn)行碼l C語言和匯編語言匯編列表文件l 匯編器列表文件

11、顯示:l C語言或匯編語言源代碼l 輸出匯編代碼和偽指令l C語言程序的:l 函數(shù)信息l 符號表l 程序調(diào)用圖l 指針圖演示符號全局l 在匯編符號前使用下劃線l 應(yīng)用到函數(shù)和變量l 采用偏移量來指定附加的字節(jié)符號局部l 采用編譯器生成的名稱(基于定義符號的函數(shù))amevarName接下來. 簡介 編譯器概述 數(shù)據(jù)類型和器 列表文件文件l 中斷l(xiāng) 運(yùn)行碼l C語言和匯編語言文件文件由以下各項組成:器使用的選項lll 每個模塊定義的Psectl 按類列出的Psect匯總l 未使用的l 程序符號表單元演示接下來. 簡介 編譯器概述 數(shù)據(jù)類型和器 列表文件文件 中斷l(xiāng) 運(yùn)行碼l C語言和匯編語言中斷l(xiāng)

12、 一個中斷向量(地址4)l 中斷服務(wù)程序(ISR)l 許多中斷源到此處l 中斷標(biāo)志位決定中斷源軟件中碼l ISR可全部用C語言編寫l 由限定符interrupt識別l 不能包含參數(shù)并且必須是void返回類型l 不能由main程序代碼調(diào)用l 將與中斷向量l 將通過retfie指令返回中斷示例l ISR可使用任何有效的C標(biāo)識符l 總是要檢查中斷源l 檢查中斷標(biāo)志位和中斷使能位void interrupt isr(void)if(RCIF && RCIE)byte = RCREG;現(xiàn)場切換中檔增強(qiáng)型GIE硬件保存PCPC, PCLATH, WREG, STATUS, FSRs, BS

13、R軟件保存PCLATH, WREG, STATUS, FSR用戶ISR軟件恢復(fù)PCLATH, WREG, STATUS, FSR硬件恢復(fù)PCPC, PCLATH, WREG, STATUS, FSRs, BSR返回retfieretfieGIE使能中斷警告l 僅保存ISR調(diào)用圖所使用的寄存器l 不掃描行內(nèi)匯編l 在ISR內(nèi)的任何位置不要重新使能GIE位重入問題l 所有函數(shù)均不能重入l 當(dāng)前正在調(diào)用時重入將破壞局部變量void main(void) while( ! ready) wait();/ .void interrupt isr(void) while( ! ready) wait();

14、/ .函數(shù)l 以重入方式調(diào)用的函數(shù)會被標(biāo)識符使用前綴i1ll 可以使用pragma來,假如:l 函數(shù)確定以重入方式調(diào)用;或者l 函數(shù)不包含參數(shù)、自動或臨時變量。#pragma interrupt_level 1 void wait(void) .函數(shù)原子級操作l 中斷是一種匯編功能l 一條C語言可能產(chǎn)生許多匯編指令l 可能會在表達(dá)式中間中斷l(xiāng) 對于多字節(jié)對象很重要l Volatile并不能保證原子級操作接下來. 指令 編譯器概述 數(shù)據(jù)類型和器 列表文件文件 中斷 運(yùn)行碼l C語言和匯編語言庫代碼l 驅(qū)動器選擇相關(guān)的庫文件l 只包含使用的函數(shù)l 先掃描定義的源代碼l 請參見列表文件以確認(rèn)l 每次

15、編譯時定制需要的程序:l 運(yùn)行時啟動代碼(匯編語言)l Printf函數(shù)(C語言代碼)運(yùn)行時啟動代碼Powerup程序l 如果存在,則在復(fù)位后運(yùn)行Powerup 程序l 提供自動使用:l 代碼在powerup psect內(nèi)l 完成時跳至startPowerup示例#include "aspic.h” GLOBAL powerup,start PSECT poweruppowerup:;Insert powerup code here clrfSTATUSmovlwstart>>8movwfPCLATHgotostart & 0x7FFPrintf函數(shù)l 采用額外步

16、驟檢測printf的使用l 說明了占位參數(shù)l 定制的printf會被編譯出l 必須在putch中定義stdoutvoid putch(char data) while( ! TXIF)continue; TXREG = data;接下來. 簡介 編譯器概述 數(shù)據(jù)類型和器 列表文件文件 中斷 運(yùn)行碼 C語言和匯編語言匯編語言代碼的匯編語言模塊ll法用C代碼嵌入行內(nèi)匯借助以下任編:l 放置一條指令的asm(“ ”);語句;或者 #endasm指令塊l #asml 從句法上來講不是C語言代碼的一部分l 不要用在循環(huán)中l(wèi) 行內(nèi)匯編代碼可能會被匯編器優(yōu)化改匯編語言與C語言的交互以下項進(jìn)行掃描:ll 只用

17、在匯編中的C符號l C符號為volatilel 匯編中的器要求器由CGEN保留l匯編語言與C語言的交互總結(jié)l 今天我們討論了:l 編譯器的組成器配ll 列表文件和l 如何處理中斷文件中的有用信息l 運(yùn)行碼的產(chǎn)生l 哪些領(lǐng)域可采用增強(qiáng)型中檔系列器件進(jìn)行代碼優(yōu)化其他l “Embedded C Programming”l Chuck Hellebuyckl 第二版現(xiàn)已上市l(wèi) 定時器、中斷、通信和顯示等l 網(wǎng)上研討會l http:/webinars商標(biāo)Microchip的名稱和徽標(biāo)組合、Microchip徽標(biāo)、dsPIC、KeeLoq、KeeLoq徽標(biāo)、MPLAB、PIC、PICmicro、PICST

18、ART、PIC32徽標(biāo)、rfPIC和UNI/O均為MicrochipTechnology Incorporated在美國和其他或地區(qū)的商標(biāo)。FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MXDEV、MXLAB、SEEVAL和The Embedded Control Solutions Company均為MicrochipTechnology Incorporated在美國的商標(biāo)。Analog-for-the-Digital Age、Application Maestro、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPLAB Certified徽標(biāo)、MPLIB、MPLINK、mTouch、Omniscient Co

溫馨提示

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

評論

0/150

提交評論