打印

请教一个中断函数返回的问题

[复制链接]
4920|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
请教一下各位前辈,我用AVR系列的单片机,MEGA128开发一个程序,
其中用到中断函数,那么中断函数能不能和普通函数一样返回一个值,
比如,在中断函数中这样

ISR()
{

retuen (变量值)
}


main()

{

变量值=ISR()
}

另外,看ISR()的参数是中断号,
那么就是主程序不能给中断函数传值,
中断函数要用主程序中的变量是不是只能通过全局变量的 ?

相关帖子

沙发
desert_hawk| | 2009-11-30 11:32 | 只看该作者
中断函数是不能被用户程序调用的,所以既不能传参数也不能有返回值。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
golden_finger + 1 我很赞同
板凳
golden_finger|  楼主 | 2009-11-30 11:40 | 只看该作者
谢谢的

使用特权

评论回复
地板
原野之狼| | 2009-11-30 11:43 | 只看该作者
别只是谢谢啊 赶紧给分 呵呵~ 见者有份啊

使用特权

评论回复
5
auzxj| | 2009-11-30 12:01 | 只看该作者
:lol分

使用特权

评论回复
6
xlsbz| | 2009-11-30 12:02 | 只看该作者
avr 听说可以重入 真的么?

使用特权

评论回复
7
原野之狼| | 2009-11-30 12:05 | 只看该作者
avr 听说可以重入 真的么?
xlsbz 发表于 2009-11-30 12:02


重入不重入跟用的是51还是AVR没有关系 那是软件上的概念

使用特权

评论回复
8
xlsbz| | 2009-11-30 12:11 | 只看该作者
本帖最后由 xlsbz 于 2009-11-30 12:20 编辑
重入不重入跟用的是51还是AVR没有关系 那是软件上的概念
原野之狼 发表于 2009-11-30 12:05



我反对你的看法!:dizzy:
我觉得这和芯片肯定是有关系了!

软件是与硬件匹配的!

使用特权

评论回复
9
123987| | 2009-12-1 09:34 | 只看该作者
我反对你的看法!:dizzy:
我觉得这和芯片肯定是有关系了!

软件是与硬件匹配的!
xlsbz 发表于 2009-11-30 12:11


我反对你的反对。函数是否重入确实是个软件的概念。至少和软件的相关度要远远高于和硬件的。硬件不行可以软件补嘛。先天缺陷可以化妆的嘛,实在不行就动动刀子——整整容。

使用特权

评论回复
10
HWM| | 2009-12-1 09:40 | 只看该作者
函数的重入确实是由软件“规定”(或具体说来是编译规定的)的,但确实受着硬件的制约。函数的重入可能需要花费相当多的内存资源,因此在内存资源非常苛刻的场合下不宜使用函数的重入。

使用特权

评论回复
11
desert_hawk| | 2009-12-1 09:49 | 只看该作者
确实,能否重入是与硬件有一定关系的,不完全是内存资源的问题,看看keil c51的可重入函数的反汇编,看看编译器是怎么用“模拟栈”分配局部变量和传递参数的就明白了,代码量会增加,代码效率会降低。

使用特权

评论回复
12
new1988| | 2009-12-1 15:17 | 只看该作者
中断函数不能被调用,那中断函数能不能调用其他的函数呢?

使用特权

评论回复
13
123987| | 2009-12-1 15:31 | 只看该作者
12# new1988
当然能了。

使用特权

评论回复
14
new1988| | 2009-12-1 17:29 | 只看该作者
那为什么我用keil c51的时候在中断里面调用函数就会出现警告呢?

使用特权

评论回复
15
new1988| | 2009-12-1 17:33 | 只看该作者
本帖最后由 new1988 于 2009-12-1 17:36 编辑


出现这样的警告是什么意思 啊?
难道一个函数在其他函数里面调用了的函数就不能在中断里面调用了吗?

使用特权

评论回复
16
desert_hawk| | 2009-12-1 18:04 | 只看该作者
函数重入了,如果中断调用的这个函数不是可重入的,就有可能出问题。

使用特权

评论回复
17
因特网用户| | 2009-12-1 18:14 | 只看该作者
中断和普通函数都调用某个函数A,会导致上面的问题,最好再添加一个函数B,功能和函数A一模一样,修改一下中断函数,中断调用B函数

使用特权

评论回复
18
NE5532| | 2009-12-1 20:54 | 只看该作者
重入不重入,看咋写了,偶写汇编,想重入就重入,想不重入就不重入,瓦咔咔

使用特权

评论回复
19
desert_hawk| | 2009-12-1 21:20 | 只看该作者
本帖最后由 desert_hawk 于 2009-12-1 21:22 编辑

在keil下用C编写的代码,一样可以控制是否可重入,而且比汇编控制可重入要简单,编译器做了大部分工作。

使用特权

评论回复
20
chengfei21| | 2009-12-1 21:44 | 只看该作者
楼主提的问题可以用如下方法解决:
定义一个全局变量,这个全局变量可以在中断函数内使用,也可以在主函数内使用
这样也相当于是参数的传递了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

28

帖子

1

粉丝