![8051單片機(jī)C語言開發(fā)(五)_第1頁](http://file4.renrendoc.com/view/50f9f9c569ce5349611fcb8c5b9d530e/50f9f9c569ce5349611fcb8c5b9d530e1.gif)
![8051單片機(jī)C語言開發(fā)(五)_第2頁](http://file4.renrendoc.com/view/50f9f9c569ce5349611fcb8c5b9d530e/50f9f9c569ce5349611fcb8c5b9d530e2.gif)
![8051單片機(jī)C語言開發(fā)(五)_第3頁](http://file4.renrendoc.com/view/50f9f9c569ce5349611fcb8c5b9d530e/50f9f9c569ce5349611fcb8c5b9d530e3.gif)
![8051單片機(jī)C語言開發(fā)(五)_第4頁](http://file4.renrendoc.com/view/50f9f9c569ce5349611fcb8c5b9d530e/50f9f9c569ce5349611fcb8c5b9d530e4.gif)
![8051單片機(jī)C語言開發(fā)(五)_第5頁](http://file4.renrendoc.com/view/50f9f9c569ce5349611fcb8c5b9d530e/50f9f9c569ce5349611fcb8c5b9d530e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章函數(shù)程序的一般組成形式#include<xx.h>main(){……..}function_1(數(shù)據(jù)類型形參1,數(shù)據(jù)類型形參2,…….){
執(zhí)行語句;
}function_n(數(shù)據(jù)類型形參1,數(shù)據(jù)類型形參2,…….){
執(zhí)行語句;
}1精選課件ppt一、函數(shù)的分類1、用戶使用角度分:標(biāo)準(zhǔn)庫函數(shù)用戶定義(無參、有參、空函數(shù))
2、函數(shù)使用范圍分:靜態(tài)函數(shù)(內(nèi)部函數(shù)):只能在定義它的文件中被調(diào)用
static類型說明函數(shù)名(形參)外部函數(shù)(默認(rèn)):可以在定義它的文件和其他文件中被調(diào)用
[extern]類型說明函數(shù)名(形參)
2精選課件ppt二、函數(shù)的定義C51對(duì)函數(shù)的功能進(jìn)行了擴(kuò)展,函數(shù)定義的完整形式如下:函數(shù)類型函數(shù)名(形式參數(shù)列表)[small|compact|large][reentrant][interruptn][usingn]說明:1、[small|compact|large]:在用keilC中,當(dāng)project設(shè)置好后,可不必在函數(shù)中說明模式,若想說明,二者必須一致,否則出錯(cuò);2、函數(shù)定義位置主函數(shù)之前定義;(1)主函數(shù)之前原型聲明,主函數(shù)之后定義;(2)聲明格式:類型說明函數(shù)名(形參類型1,形參類型2)或者函數(shù)名(數(shù)據(jù)類型形參1,…….,數(shù)據(jù)類型形參n)(3)形參定義:函數(shù)名(數(shù)據(jù)類型形參1,…….,數(shù)據(jù)類型形參n)。
3精選課件ppt3、[reentrant]可重入函數(shù)
可重入函數(shù)可以在同一個(gè)時(shí)刻由多個(gè)進(jìn)程共享。當(dāng)一個(gè)進(jìn)程正在執(zhí)行一個(gè)可重入函數(shù),另一個(gè)進(jìn)程可以中斷該進(jìn)程,并可以開始執(zhí)行同一個(gè)可重入函數(shù),而不影響函數(shù)的運(yùn)行結(jié)果。例:函數(shù)A正在調(diào)用函數(shù)B,此時(shí)中斷來了,執(zhí)行中斷函數(shù)C,C恰好又要調(diào)用B。
ANSIC語言中,調(diào)用函數(shù)時(shí)會(huì)把函數(shù)的參數(shù)和函數(shù)中使用的局部變量入棧。因?yàn)?051內(nèi)部堆棧空間的限制,為了提高效率,C51沒有提供這種堆棧,而是提供一種壓縮棧。每個(gè)函數(shù)有一個(gè)給定存儲(chǔ)空間,用于存放局部變量。函數(shù)中的每個(gè)變量都存放在這個(gè)空間的固定位置。當(dāng)遞歸調(diào)用該過程時(shí)會(huì)導(dǎo)致變量被覆蓋,所以通常情況下C51中的函數(shù)是不能重入。必須使用reentrant函數(shù)屬性來聲明函數(shù)是可重入的。
C51編譯器為再入函數(shù)生成一個(gè)模擬棧,通過這個(gè)模擬棧來完成參數(shù)傳遞和存放局部變量(每個(gè)變量有其單獨(dú)的空間)。可重入函數(shù)占用內(nèi)存空間較大,運(yùn)行較慢,并且不允許傳遞bit類型的變量,也不能定義局部位變量??芍厝牒瘮?shù)經(jīng)常在實(shí)時(shí)應(yīng)用系統(tǒng)中應(yīng)用,也可在中斷函數(shù)和非中斷函數(shù)同時(shí)調(diào)用同一個(gè)函數(shù)時(shí)使用。4精選課件ppt可使用using函數(shù)說明屬性來規(guī)定函數(shù)所使用的寄存器組。格式如下:usingn
:n為0-3這個(gè)參數(shù)表示使用的寄存器組的編號(hào).using屬性只能在函數(shù)定義中使用,不能在函數(shù)原型聲明中使用。使用using屬性的函數(shù)將自動(dòng)完成以下操作:a、進(jìn)入函數(shù)前,將當(dāng)前使用的寄存器組的標(biāo)號(hào)保存在堆棧中。改PSW的寄存器組選擇位,選擇設(shè)定的寄存器組作為當(dāng)前的寄存器組。b、函數(shù)退出時(shí),將寄存器組恢復(fù)成進(jìn)入函數(shù)前的寄存器組。
intalarm; intalarm_count; externvoidalfunc(intiValue); voidfalarm(void)using3{ alarm_count++;
alfunc(alarm=1);} 5精選課件ppt三、函數(shù)的參數(shù)1、形參與實(shí)參:實(shí)參-〉形參:單向傳遞(值傳遞);實(shí)參、形參類型必須一致;數(shù)組作為參數(shù),是“地址傳遞”。即傳遞的為實(shí)參數(shù)數(shù)組的起始地址,故實(shí)參、形參數(shù)組占用同一段單元,互相影響。2、參數(shù)的傳遞規(guī)則:參數(shù)傳遞的途徑有:寄存器、存儲(chǔ)器、堆棧。返回值均通過寄存器傳遞。利用寄存器傳遞參數(shù)(例)intf(inta,intb,char*c)傳遞參數(shù)char,指針(單字節(jié))int,指針(雙字節(jié))long,float通用指針參數(shù)1R7R6,R7R4-R7R1(L),R2(H)R3:存儲(chǔ)類型參數(shù)2R5R4,R5使用固定地址同上參數(shù)3R3R2,R3使用固定地址同上6精選課件ppt返回參數(shù)傳遞返回類型寄存器描述bit進(jìn)位標(biāo)志(CF)charR7unsignedchar單字節(jié)指針intR6&R7高字節(jié)在R6,低字節(jié)在R7unsignedint雙字節(jié)指針longR4-R7高字節(jié)R4,低字節(jié)在R7unsignedlongfloatR4-R732位IEEE格式通用指針R1-R3存儲(chǔ)器類型在R3,高字節(jié)在R2,低字節(jié)R17精選課件ppt四、函數(shù)的調(diào)用1、函數(shù)指針調(diào)用函數(shù):編譯器為函數(shù)分配一個(gè)入口地址,即指針函數(shù)。指針變量定義
函數(shù)值返回類型
(*指針變量名)(函數(shù)形參表)#include<reg51.h>#include<stdio.h>unsignedlongc;
unsignedlongf(intn)reentrant{unsignedlongresult;if(n==0)result=1;elseresult=n*f(n-1);return(result);}8精選課件pptvoidmain(){intj;longint(*p)(int);#ifndefMONITOR51SCON=0x50;/*SCON:mode1,8-bitUART,enablercvr*/TMOD|=0x20;/*TMOD:timer1,mode2,8-bitreload*/TH1=221;/*TH1:reloadvaluefor1200baud@16MHz*/TR1=1;/*TR1:timer1run*/TI=1;/*TI:setTItosendfirstcharofUART*/#endif
p=f;for(j=0;j<10;j++){c=(*p)(j);printf("%2d!=%lu\n",j,c); if(j==8)P1=0;//調(diào)試用
}}9精選課件ppt2、幾點(diǎn)說明(*p)()定義一個(gè)指向函數(shù)的指針變量,在未賦值前不特定指
向某函數(shù),賦
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育創(chuàng)新與家教的結(jié)合如何引導(dǎo)孩子在逆境中成長
- 科技創(chuàng)新企業(yè)如何構(gòu)建高效的營銷團(tuán)隊(duì)
- 《少年閏土》教學(xué)設(shè)計(jì)與反思
- 2025年租賃合同提前解除市場影響
- 二級(jí)建造師合作合同樣本
- 互助市場拓展合作合同書
- 二手房屋購買合同誠意金約定
- 個(gè)人質(zhì)押與抵押合同
- XX公司員工培訓(xùn)合同協(xié)議
- 產(chǎn)品設(shè)計(jì)與研發(fā)合作合同范例
- 新人教版五年級(jí)上冊數(shù)學(xué)應(yīng)用題大全doc
- 商業(yè)綜合體市場調(diào)研報(bào)告
- GB/T 42096-2022飛機(jī)耐火電纜性能要求
- 2022年版義務(wù)教育勞動(dòng)課程標(biāo)準(zhǔn)學(xué)習(xí)培訓(xùn)解讀課件筆記
- 2022年中國止血材料行業(yè)概覽:發(fā)展現(xiàn)狀對(duì)比分析研究報(bào)告(摘要版) -頭豹
- 一起重新構(gòu)想我們的未來:為教育打造新的社會(huì)契約
- GB/T 4214.2-2020家用和類似用途電器噪聲測試方法真空吸塵器的特殊要求
- GB/T 22482-2008水文情報(bào)預(yù)報(bào)規(guī)范
- 蔬菜采購項(xiàng)目投標(biāo)書
- SAPPM設(shè)備管理解決方案
- 3人-機(jī)-環(huán)-管理本質(zhì)安全化措施課件
評(píng)論
0/150
提交評(píng)論