版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、整理整理ppt1第第5 5章章 函函 数数程序的一般组成形式程序的一般组成形式#include #include main( )main( ).function_1(function_1(数据类型数据类型 形参形参1 1,数据类型,数据类型 形参形参2 2,.) .) 执行语句;执行语句; function_n(function_n(数据类型数据类型 形参形参1 1,数据类型,数据类型 形参形参2 2,.) .) 执行语句;执行语句; 整理整理ppt2一、函数的分类一、函数的分类1 1、用户使用角度分:、用户使用角度分:l 标准库函数标准库函数l 用户定义(无参、有参、空函数)用户定义(无参、
2、有参、空函数) 2 2、函数使用范围分:、函数使用范围分:l 静态函数(内部函数):只能在定义它的文件中被调用静态函数(内部函数):只能在定义它的文件中被调用 static static 类型说明类型说明 函数名(形参)函数名(形参)l 外部函数(默认):可以在定义它的文件和其他文件中被调用外部函数(默认):可以在定义它的文件和其他文件中被调用 extern extern 类型说明类型说明 函数名(形参)函数名(形参) 整理整理ppt3二二 、函数的定义、函数的定义C51C51对函数的功能进行了扩展,函数对函数的功能进行了扩展,函数定义的完整形式定义的完整形式如下:如下:函数类型函数类型 函数
3、名函数名(形式参数列表形式参数列表) small | compact | large reentrant interrupt n using n说明:说明:1、 small | compact | large :在用:在用keilC中,当中,当project设置好后,可设置好后,可不必在函数中说明模式,若想说明,二不必在函数中说明模式,若想说明,二者必须一致,否则出错;者必须一致,否则出错;2、函数定义位置、函数定义位置主函数之前定义;主函数之前定义;(1)主函数之前原型声明,主函数之后定义;主函数之前原型声明,主函数之后定义;(2)声明格式:声明格式: 类型说明类型说明 函数名(形参类型函数
4、名(形参类型1,形参类型,形参类型2) 或者或者 函数名(数据类型函数名(数据类型 形参形参1 1,.,数据类型,数据类型 形参形参n n)(3)形参定义:形参定义:函数名(数据类型函数名(数据类型 形参形参1,.,数据类型,数据类型 形参形参n)。)。 整理整理ppt43、reentrantreentrant可重入函数可重入函数 可重入函数可重入函数可以在同一个时刻由多个进程共享。当一个进程正在执行可以在同一个时刻由多个进程共享。当一个进程正在执行 一个可重入函数,另一个进程可以中断该进程,并可以开始执行同一个一个可重入函数,另一个进程可以中断该进程,并可以开始执行同一个 可重入函数,而不影
5、响函数的运行结果。可重入函数,而不影响函数的运行结果。例:例:函数函数A正在调用函数正在调用函数B,此时中断来了,执行中断函数,此时中断来了,执行中断函数C,C恰好又要恰好又要 调用调用B。 ANSI C ANSI C 语言中,调用函数时会把函数的语言中,调用函数时会把函数的参数参数和函数中使用的和函数中使用的局部变量局部变量 入栈。入栈。 因为因为8051 8051 内部堆栈空间的限制,为了提高效率,内部堆栈空间的限制,为了提高效率,C51 C51 没有提供这种堆没有提供这种堆栈,而是提供一种压缩栈。栈,而是提供一种压缩栈。每个函数有一个给定存储空间,用于存放局每个函数有一个给定存储空间,用
6、于存放局部变量部变量。函数中的每个变量都存放在这个空间的固定位置。当递归调用。函数中的每个变量都存放在这个空间的固定位置。当递归调用该过程时会导致变量被覆盖,该过程时会导致变量被覆盖,所以通常情况下所以通常情况下C51C51中的函数是中的函数是不能重入。不能重入。必须使用必须使用reentrantreentrant函数属性来声明函数是可重入的。函数属性来声明函数是可重入的。 C51C51编译器为再入函数生成一个编译器为再入函数生成一个模拟栈模拟栈,通过这个模拟栈来完成参数传递,通过这个模拟栈来完成参数传递 和存放局部变量(每个变量有其单独的空间)。和存放局部变量(每个变量有其单独的空间)。可重
7、入函数占用内存空间较大,运行较慢,并且不允许传递可重入函数占用内存空间较大,运行较慢,并且不允许传递bitbit类型的变类型的变 量,也不能定义局部位变量。量,也不能定义局部位变量。可重入函数经常在实时应用系统中应用,也可在中断函数和非中断函数可重入函数经常在实时应用系统中应用,也可在中断函数和非中断函数 同时调用同一个函数时使用。同时调用同一个函数时使用。整理整理ppt5可使用可使用usingusing函数说明属性来规定函数所使用的寄存器组。函数说明属性来规定函数所使用的寄存器组。 格式如下:格式如下:using n using n :n n为为0-3 0-3 这个参数表示使用的寄存器这个参
8、数表示使用的寄存器组的编号组的编号. . using using属性只能在函数定义中使用,不能在函数原型声明中属性只能在函数定义中使用,不能在函数原型声明中使用。使用。 使用使用usingusing属性的函数将属性的函数将自动完成自动完成以下操作:以下操作: a a、进入函数前,将当前使用的寄存器组的标号保存在堆栈、进入函数前,将当前使用的寄存器组的标号保存在堆栈 中。改中。改PSWPSW的寄存器组选择位,选择设定的寄存器组作为的寄存器组选择位,选择设定的寄存器组作为 当前的寄存器组。当前的寄存器组。b b、函数退出时,将寄存器组恢复成进入函数前的寄存器组。、函数退出时,将寄存器组恢复成进入函
9、数前的寄存器组。int alarm;int alarm;int alarm_count;int alarm_count; extern void extern void alfuncalfunc(int iValue);(int iValue);void falarm(void falarm(voidvoid) using 3) using 3 alarm_count+;alarm_count+; alfuncalfunc (alarm = 1); (alarm = 1); 整理整理ppt6三、函数的参数三、函数的参数1 1、形参与实参:、形参与实参: 实参实参- -形参:单向传递(值传递);
10、形参:单向传递(值传递); 实参、形参类型必须一致;实参、形参类型必须一致; 数组作为参数,是数组作为参数,是“地址传递地址传递”。即传递的为实参数数组的起始。即传递的为实参数数组的起始地地 址,故实参、形参数组占用同一段单元,互相影响。址,故实参、形参数组占用同一段单元,互相影响。2 2、参数的传递规则:、参数的传递规则: 参数传递的途径有:寄存器、存储器、堆栈。返回值均通过寄存参数传递的途径有:寄存器、存储器、堆栈。返回值均通过寄存 器传递。器传递。 利用寄存器传递参数利用寄存器传递参数(例)(例)int f(int a,int b,char int f(int a,int b,char
11、* *c)c)传递参数传递参数 charchar,指针,指针(单字节)(单字节)intint,指针,指针(双字节)(双字节)longlong,floatfloat通用指针通用指针参数参数1 1R7R7R6R6,R7R7R4-R7R4-R7R1(L),R2(H)R1(L),R2(H)R3:R3:存储类型存储类型参数参数2 2R5R5R4R4,R5R5使用固定地使用固定地址址同上同上参数参数3 3R3R3R2R2,R3R3使用固定地使用固定地址址同上同上整理整理ppt7 返回参数传递返回参数传递返回类型返回类型寄存器寄存器描述描述bitbit进位标志进位标志(CF)(CF)charcharR7R7
12、unsigned charunsigned char单字节指针单字节指针intintR6&R7R6&R7高字节在高字节在R6R6,低字节在,低字节在R7R7unsigned intunsigned int双字节指针双字节指针longlongR4-R7R4-R7高字节高字节R4,R4,低字节在低字节在R7R7unsigned longunsigned longfloatfloatR4-R7R4-R73232位位IEEEIEEE格式格式通用指针通用指针R1-R3R1-R3存储器类型在存储器类型在R3,R3,高字节在高字节在R2,R2,低字节低字节R1R1整理整理ppt8四、函数的调用四、函数的调用
13、1 1、函数指针调用函数:、函数指针调用函数: 编译器为函数分配一个入口地址,即指针函数。编译器为函数分配一个入口地址,即指针函数。 指针变量定义指针变量定义 函数值返回类型函数值返回类型 (* *指针变量名)(函数形参表)指针变量名)(函数形参表)#include#include#include#includeunsigned long c;unsigned long c; unsigned long f(int n) reentrantunsigned long f(int n) reentrant unsigned long result; unsigned long result; i
14、f(n=0) result=1; else result=n if(n=0) result=1; else result=n* *f(n-1);f(n-1); return(result); return(result); 整理整理ppt9void main()void main() int j; int j;long int(long int(* *p)(int);p)(int); #ifndef MONITOR51 #ifndef MONITOR51 SCON = 0 x50; / SCON = 0 x50; /* * SCON: mode 1, 8-bit UART, enable SC
15、ON: mode 1, 8-bit UART, enable rcvrrcvr* */ / TMOD |= 0 x20; / TMOD |= 0 x20; /* * TMOD: timer 1, mode 2, 8-bit reload TMOD: timer 1, mode 2, 8-bit reload* */ / TH1 = 221; / TH1 = 221; /* * TH1:reload value for 1200 baud TH1:reload value for 1200 baud 16MHz16MHz* */ / TR1 = 1; / TR1 = 1; /* * TR1: t
16、imer 1 run TR1: timer 1 run * */ / TI = 1; / TI = 1; /* * TI:set TI to send first char of TI:set TI to send first char of UARTUART* */ / #endif #endif p=f; p=f; for(j=0;j10;j+) for(j=0;j10;j+) c=( c=(* *p)(j);p)(j); printf(%2d!=%lun,j,c); printf(%2d!=%lun,j,c); if(j=8) P1=0; / if(j=8) P1=0; /调试用调试用 整理整理ppt102 2、几点说明、几点说明 (* *p p)( )( )定义一个指向函数的指针变量,在未赋值前不特定指定义一个指向函数的指针变量,在未赋值前不特定指 向某函数,赋值以后指向特定函数;向某函数,赋值以后指向特定函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025装修门店合同范本
- 2024年度四川省公共营养师之四级营养师过关检测试卷A卷附答案
- 2024年度四川省公共营养师之二级营养师题库综合试卷B卷附答案
- 2025施工合同协议书范文
- 2025教师雇佣的合同范文
- 2025质量检验委托合同
- 建筑海洋工程合同范本
- 文化场馆架电施工协议
- 商业大厦弱电系统施工合同
- 2024年春季幼儿大大班第十二周教学计划
- 工程预结算课件
- 酒店宴会合同范本
- 货款互抵三方协议合同范本
- 七年级道德与法治论文2000字(合集六篇)
- 严重精神障碍患者健康管理服务规范
- 风险预测分析及风险与机遇评估分析表
- 高中日语宣讲 试听课件
- 压力弹簧力度计算器及计算公式
- 新生儿窒息诊断地专家共识
- 2023年重庆市旅游业统计公报要点
- 器械清洗的资料
评论
0/150
提交评论