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

[复制链接]
 楼主| golden_finger 发表于 2009-11-30 11:11 | 显示全部楼层 |阅读模式
请教一下各位前辈,我用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 | 显示全部楼层
别只是谢谢啊 赶紧给分 呵呵~ 见者有份啊
auzxj 发表于 2009-11-30 12:01 | 显示全部楼层
:lol分
xlsbz 发表于 2009-11-30 12:02 | 显示全部楼层
avr 听说可以重入 真的么?
原野之狼 发表于 2009-11-30 12:05 | 显示全部楼层
avr 听说可以重入 真的么?
xlsbz 发表于 2009-11-30 12:02


重入不重入跟用的是51还是AVR没有关系 那是软件上的概念
xlsbz 发表于 2009-11-30 12:11 | 显示全部楼层
本帖最后由 xlsbz 于 2009-11-30 12:20 编辑
重入不重入跟用的是51还是AVR没有关系 那是软件上的概念
原野之狼 发表于 2009-11-30 12:05



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

软件是与硬件匹配的!
123987 发表于 2009-12-1 09:34 | 显示全部楼层
我反对你的看法!:dizzy:
我觉得这和芯片肯定是有关系了!

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


我反对你的反对。函数是否重入确实是个软件的概念。至少和软件的相关度要远远高于和硬件的。硬件不行可以软件补嘛。先天缺陷可以化妆的嘛,实在不行就动动刀子——整整容。
HWM 发表于 2009-12-1 09:40 | 显示全部楼层
函数的重入确实是由软件“规定”(或具体说来是编译规定的)的,但确实受着硬件的制约。函数的重入可能需要花费相当多的内存资源,因此在内存资源非常苛刻的场合下不宜使用函数的重入。
desert_hawk 发表于 2009-12-1 09:49 | 显示全部楼层
确实,能否重入是与硬件有一定关系的,不完全是内存资源的问题,看看keil c51的可重入函数的反汇编,看看编译器是怎么用“模拟栈”分配局部变量和传递参数的就明白了,代码量会增加,代码效率会降低。
new1988 发表于 2009-12-1 15:17 | 显示全部楼层
中断函数不能被调用,那中断函数能不能调用其他的函数呢?
123987 发表于 2009-12-1 15:31 | 显示全部楼层
12# new1988
当然能了。
new1988 发表于 2009-12-1 17:29 | 显示全部楼层
那为什么我用keil c51的时候在中断里面调用函数就会出现警告呢?
new1988 发表于 2009-12-1 17:33 | 显示全部楼层
本帖最后由 new1988 于 2009-12-1 17:36 编辑


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

本帖子中包含更多资源

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

×
desert_hawk 发表于 2009-12-1 18:04 | 显示全部楼层
函数重入了,如果中断调用的这个函数不是可重入的,就有可能出问题。
因特网用户 发表于 2009-12-1 18:14 | 显示全部楼层
中断和普通函数都调用某个函数A,会导致上面的问题,最好再添加一个函数B,功能和函数A一模一样,修改一下中断函数,中断调用B函数
NE5532 发表于 2009-12-1 20:54 | 显示全部楼层
重入不重入,看咋写了,偶写汇编,想重入就重入,想不重入就不重入,瓦咔咔
desert_hawk 发表于 2009-12-1 21:20 | 显示全部楼层
本帖最后由 desert_hawk 于 2009-12-1 21:22 编辑

在keil下用C编写的代码,一样可以控制是否可重入,而且比汇编控制可重入要简单,编译器做了大部分工作。
chengfei21 发表于 2009-12-1 21:44 | 显示全部楼层
楼主提的问题可以用如下方法解决:
定义一个全局变量,这个全局变量可以在中断函数内使用,也可以在主函数内使用
这样也相当于是参数的传递了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

28

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部