导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→哦 错了 是在中断函数中能调用其他函数吗?[maj]

 *第18467篇: 哦 错了 是在中断函数中能调用其他函数吗?

  
楼 主:maj 2004年1月5日15:36
 哦 错了 是在中断函数中能调用其他函数吗?
  
2楼:WuMing 2004年1月5日17:26
 不能
  
3楼:kuolongfei 2004年2月23日13:14
 绝对不能!至少C语言里是这样!
  
4楼:guest 2004年2月23日17:16
 当然能的啦。。。。。。。。
当然能的啦。。。。。。。。
  
5楼:youyou 2004年2月23日17:32
 可以的。
不过如果是软件定时中断要保证

可以的。
不过如果是软件定时中断要保证你调用的其他函数的执行时间小于软件定时中断的间隔。否则跳不出中断循环。
  
6楼:kuolongfei 2004年2月24日08:32
 再说一次,(C语言编程)绝对不可以!
不知道楼上的两位兄弟是什么语言编程,这个问题我没有用汇编调试过,但在以前用C编程的时候出现过问题,后来查明,是因为中断里调用其他程序所导致的,以前我曾发表过类似的问题:

请你们看看。有问题我们可以一起探讨!谢谢!
  
7楼:sailer 2004年2月24日15:42
 我觉得可以调用
函数的作用是处理重复性的工作,子函数可以相互调用,中断函数也是函数,为什么不能调用别的函数?我看到你以前的帖子了,我觉得可能是你当初调用别的函数时间太长,导致其它中断工作状态混乱(比如你在用的双串口,其中一个串口占用时间太长,导致另一个串口数据丢失)。中断程序应当尽可能少占时间,但不等于不能调用别的函数。举个最简单的例子,你的中断函数只调用另外一个很简单的函数,你看看能不能用?
  
8楼:kuolongfei 2004年2月24日16:02
 探讨!
我用的是串口中断,虽然是两个串口,但他们没有同时工作,当接收并处理完其中的一个数据以后才可能在另一个串口产生中断,也就是用其中一个串口的时候,另一个串口上没有数据流动。所以应该不存在中断时间太长的问题。当时我只是在串行中断里调用了一个很短的程序,出现问题。后来用标志位来判断,在主程序里是否执行该子程序,问题就解决了。我一会再编一个小的调试程序来验证一下!你也可以试试!
  
9楼:sailer 2004年2月25日16:07
 呵呵 我现在也遇到这个问题了
我是在int0遇到的,跟你说的情况一样,在里面不行,置标志位到主程序查询就可以。但我目前还是觉得应该不是调用的问题吧,至少也得给我一个可以信服的理由啊!晕晕~~~~~ 
  
10楼:kuolongfei 2004年2月26日09:46
 直接调用不行,改为标志为就可以了,那问题不很明显吗?
  
11楼:liberty 2004年2月25日18:03
 毫无疑问可以在中断中调用函数
在Keil C中,如果要在中断中调用其他函数,如果此函数在中断外没有其他程序调用,自然是没有关系,否则需要将被调用的函数设置为可重入,在这种情况下,函数的出入口地址和参数都保存在堆栈中。
  
12楼:lenglx 2004年3月1日19:02
 老兄哪里人啊。
能交友否? 
lx.

老兄哪里人啊。
能交友否? 
lx.leng@tom.com
  
13楼:lenglx 2004年3月1日18:42
 同意
不好意思,我刚才没注意看liberty的帖。
有抄袭的嫌疑。
我说的和他的同一个意思。
  
14楼:lenglx 2004年3月1日17:25
 全部错了
1、中断里可以调用子函数。
2、普通情况下,要保证这个子函数(以及这个子函数调用过的函数)不被其他的函数调用。
3、如果这个子函数确实需要被其他的函数调用,要将这个子函数做成再入函数。
*所有中断中调用子函数的问题,都是由于函数的再入问题引起的。
  
15楼:guest 2004年6月30日13:59
 15楼的朋友说的对,这里只是涉及到一个“
15楼的朋友说的对,这里只是涉及到一个“函数可重入”问题,如果不可重入的函数,
主程序和中断中都用,那就非常危险了,建议改改程序,做一个可重入的。

>>>>>>对该主题发表你的看法

本主题贴数15,分页: [第1页]


[上一篇主题]:谁来回答我菜菜问题

[下一篇主题]:哪位大虾用过语音压缩/解压的芯片