您的位置 首页 硬件

C51单片机中止函数的界说及使用

C51单片机中断函数的定义及应用-为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。

/* define not used interrupt, so generate “IRET” in their entrance */

void extern0_ISR() interrupt 0{}/* not used */

void timer0_ISR () interrupt 1{}/* not used */

void extern1_ISR() interrupt 2{}/* not used */

void timer1_ISR () interrupt 3{}/* not used */

void serial_ISR () interrupt 4{}/* not used */

C51函数声明对ANSI C作了扩展,详细包含:

1.中止函数声明:

中止声明办法如下:

void serial_ISR () interrupt 4 [using 1]

{

/* ISR */

}

为进步代码的容错才能,在没用到的中止入口处生成iret句子,界说没用到的中止。

/* define not used interrupt, so generate “IRET” in their entrance */

void extern0_ISR() interrupt 0{}/* not used */

void TImer0_ISR () interrupt 1{}/* not used */

void extern1_ISR() interrupt 2{}/* not used */

void TImer1_ISR () interrupt 3{}/* not used */

void serial_ISR () interrupt 4{}/* not used */

2.通用存储作业区3.选通用存储作业区由using x声明,见上例。4.指定存储形式

由small compact 及large阐明,例如:

void fun1(void) small {}

提示:small阐明的函数内部变量悉数运用内部RAM。要害的经常性的耗时的当地能够这样声明,以进步运转速度。

5.#pragma disable

在函数前声明,只对一个函数有用。该函数调用过程中将不可被中止。

6.递归或可重入函数指定

在主程序和中止中都可调用的函数,简单发生问题。因为51和PC不同,PC运用仓库传递参数,且静态变量以外的内部变量都在仓库中;而51一般运用寄存器传递参数,内部变量一般在RAM中,函数重入时会损坏前次调用的数据。能够用以下两种办法处理函数重入:

a、在相应的函数前运用前述“#pragma disable”声明,即只允许主程序或中止之一调用该函数;

b、将该函数阐明为可重入的。如下:

void func(param.。。) reentrant;

KeilC51编译后将生成一个可重入变量仓库,然后就能够模仿经过仓库传递变量的办法。

因为一般可重入函数由主程序和中止调用,所以一般中止运用与主程序不同的R寄存器组。

别的,对可重入函数,在相应的函数前面加上开关“#pragma noaregs”,以制止编译器运用肯定寄存器寻址,可生成不依赖于寄存器组的代码。

7.指定PL/M-51函数

由alien指定。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/346172.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部