中断服务子程序与普通子程序有哪些异同之处

中断服务子程序与普通子程序有哪些异同之处,第1张

相同点:都是让CPU从主程序转去执行子程序,执行完毕又返回主程序。

不同点:中断服务程序是随机的,而普通子程序是预先安排好的;中断服务子程序以RETI结束,而一般子程序以RET结束。RETI除将断点d回PC动作外,还要清除对应的中断优先标志位,以便新的中断请求能被响应。

差别:

中断请求信号可以由外部设备发出,是随机的;子程序调用却是由软件编排好的。

中断响应后由固定的矢量地址转入中断服务程序,而子程序地址由软件设定。

中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的。

相同点、均能中断主程序执行本程序,然后返回断点继续执行子程序

不同点

1中断服务程序入口地址是固定的,子程序调用户口地址是用户自己设定的

2中断服务子程序返回指令,除具有子程序返回指令所具有的全部功能之外,还有清除中断相应时被置位的优先级状态,开发较低中断和恢复中断逻辑等功能

3中断服务子程序在满足中断申请的条件下随时发生的,而子程序调用是用户主程序事先安排好的。

在Perl中用户可以定义子程序,并在程呼中调用。通过将特殊功能的代码定义为子程序,可以减少代码重复并且使程序易于维护。在Perl中子程序可以出现在程序的任何地方,其定义方法为:

sub

subname

{

statements;

}

其中,Sub声明为子程序定义,subname是子程序的名称,在“()”中间的是子程序体.对于子程序的调用,可以使用以下几种方法:

(1)可以使用符号“&”加子桂序名称调用,如:

&subname:

(2)如果子程序是先定义而后才‘调用的话,则符号“&”可以省略。

(3)可以使用“do”加子程序名的方式,如:

do

subname

下面,我们给出个简单的子程序名的例子。

$a

=

999

;

$h=

888

;

print

“Before

the

call

of

sub,

a

is

$a,

b

is

$b

\n”;

suh

Sum

{

$SUJn

=

$a

+

$h

retum

($sum)

:

print

"The

firit

call

:

$i

\n

$i

=

sum

(

10

,

20

)

;

print

'7he

sccond

call

:

$11n

"

$i=&sum

(

10

,

20

)

;

print

”the

third

call

:

$i

\n

pnnt”After

the

call

of

sub,a

is

$ab

is$b\n”,

它运行的结束为:

Before

the

call

of

suh,

a

is

999,

b

is

888

The

first

call

7

The

second

call:30

The

third

call

300

Arter

the

call

of

sub,

a

is

999,

biS

88S

这里定义了一个简中的求两个数和的子程序,然后用三种方法传入不同的参数进行调用,可以看出.上面三种调用方法都可以完成相同的结果需要注意的是:(1)在子程序sum中用my定义了局部变量$a和$b,它们用来接收调州参数,但与子程序外面的同名变量$a和$b是没有任何关系的,从程序的运行结果中可以看到这一点:(2)调用参数的传递采用了内部变量“$_”,这里采用的是值传递。

以上就是关于中断服务子程序与普通子程序有哪些异同之处全部的内容,包括:中断服务子程序与普通子程序有哪些异同之处、在单片机中子程序与中断服务程序的异同点。、简述子程序调用和执行中断服务程序的异同等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9529502.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存