在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 1495|回复: 0

[资料] 嵌入式程序设计中的函数

[复制链接]
发表于 2016-2-26 16:33:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

函数是C语言程序设计的核心。一个较大的C语言程序一般由一个主函数和若干个子函数组成,每个函数实现一个特定的功能。主函数可调用其他函数,其它函数之间也可相互调用。函数库为了减轻编程工作量,将一些常用功能的函数放在函数库中供公共使用。好的程序尽量使用函数和函数库。函数和函数库是基于C语言编程的基本单元。

函数的格式

下面给出了函数的定义性说明个原型说明。

1)
定义性说明格式

[存储类说明符]     类型说明符    [修饰符] 标识符 (参数表){函数体}

其中:

存储类说明符有staticextern2种。

类型说明符有charunsignedcharintunsigned longfloatdoublelong doublestructunionvoid等几种。

标识符有函数名、.函数名、(.函数名)、..函数名)等几种。

修饰符有Interruptnearfarhuge等几种。

2)原型说明格式

Extern     类型说明符[修饰符]     标识符(参数表){函数体}

其中:

类型说明符、标识符、参数表、函数体这几项是函数定义性说明中必不可少的部分。可在程序源文件的任意处进行函数的定义说明,并被分配内存。

类型说明符部分泳衣说明函数返回值的类型。有简单类型,符合类型。为说明函数返回的是指针,在函数名前加“*”。

标识符部分用以说明函数名。但函数名前加分割符“.”时,说明返回值是指针。被圆括号起如(*函数名),则标识符是函数指针。如果括号外再加分割符“.”,如“..函数名)”,则标识符是函数指针,且函数的返回指针类型。

参数表是传入函数的形式参数表。形式参数表格式为:

(类型说明符
变量名 [,类型说明符 变量名]…)或(void)或()

其中(void)说明无参数传入。允许用空格代替void作为参数表,即()。

函数体部分由符合语句构成。

存储类说明符部分。

extern——C语言的函数否是全程需存在的,在不加任何存储类说明的情况下,都是全程序可见的。但是,如果程序为多源文件时,非定义函数的文件要调用该函数时,须加原型说明。另外,即使在定义函数的源文件中,如果在函数定义之前超前调用,也需要加原型说明,而且原型说明中必须加存储类说明符extern

static——为了提高函数的安全性,在进行函数的定义性说明时,加上static存储类说明符,表示在本文件定义前和非函数定义文件中,该函数将不能被调用。它可定义需要具有内部链接的全局变量或者函数,即它们应在一个单一的编译单元里是可见的,但在外部则不可见。使用static关键词限制变量的范围。

修饰符对函数起修饰作用。

interrupt——为最重要的修饰符。它将函数修饰为中断函数。中断函数的最大特点是返回类型和参数均必须为void。函数经过interrupt修饰后,程序员只编写中断服务程序的主题部分,中断服务程序中的保护现场前缀段和恢复现场的后缀段,均由编译程序完成。另外,编译程序还将ret指令改为reti指令。

nearfarhuge——规定函数的地址类型。它将覆盖存储模式规定的函数缺省地址类型。它指明函数和被调用函数之间的距离的远近。near为近调用(16位段内地址);far为原调用(32位段间地址);huge为规范化远调用(32为段间地址规范地址)。

示例
本函数为LED灯亮、灭显示的控制程序段,是带参数的函数。

void Led_Display(int LedStatus)                 /.函数定义,参数为int LedStatus,用于表示LED状态,根据参数点亮熄灭LED1LED2./

(

led_state=LedStatus;                           /.将传递来的参数值赋给LED状态全局变量./

if((LedStatus&0x01==0x01

rPDATB=rPDATB&0x5FF;                 /.LED1./

else

rPDATB=rPDATB|0x200;                    /.LED1./

if((LedStatus&0x01==0x02

rPDATB=rPDATB&0x3FF;                 /.LED2./

else

rPDATB=rPDATB|0x400;                    /.LED2./

}

示例
本函数为键盘初始化程序,该函数不需要参数。

void        KeyboardInt(void)

{

       Intvalue;

       rI_ISPC=BIT_EINT1           //清除中断挂起位

       rEXTINTPND=0xF;                    //设置EXTINTPND寄存器


       value=key_read();

       if(value>-1)

              Digit_Led_Symbol(value);


       rI_ISPC=BIT_EINT1;                 //清除中断挂起位

       rINTCON=0x1

}

.代表星号

凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-10 16:37 , Processed in 0.053840 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表