8755|11

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问如何在中断中实现退出子程序的功能? [复制链接]

比如我在端口中断中需要中止当前子程序,应该如何实现呢?

最新回复

那个子程序如果完整的运行下来差不多要2分钟左右 使用标志检测是肯定可以的,但是如果能直接在中断中对堆栈中关于调用子程序的PC指针进行修改那么效率要高,不知道斑竹有实现的好办法么?  详情 回复 发表于 2005-11-23 13:59
 
点赞 关注

回复
举报

54

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
占座
同问
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
首先应考虑有没有这种应用的必要,
如果非要这样做,那就只有无条件条转了,
不过这样做将严重破坏程序结构,特别是堆栈指针,状态寄存器
跳转前应处理好。汇编语言更容易控制。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
有这中必要阿
比如说我的主程序中调用了一个很消耗时间的子程序,当该子程序运行时,我想取消该子程序的运行,就通过按键,在程序中可以进入端口中断,但是中断响应完毕又会立刻退到那个很耗时间的子程序,那我现在想让他在中断里实现不退回子程序,而是回到主程序,就是说该子程序剩下的都不执行了,应该怎么办
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

5
 

说的用无条件挑砖的方法我也测试过,不过有个问题就是我用的是C,不是汇编,在C中的goto不能实现跨子程序的挑砖阿,我现在需要的是退出子程序,回到主程序
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
1. 设置执行该子程序的标志,使中断程序能够识别确实是在这段子程序;
2. 修改调用该子程序压入堆栈中的PC指针,使其指向该子程序的最后部分(可以用标号识别),如清除执行此程序的标志,RET.
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

7
 
建议:
1、为了不破坏程序结构,你可以在键盘中断中设置一个标志(全局变量),一旦响应了对应的按键,就将其置位,并在主程序的调用你哪个耗时的子程序前将其复位。
2、在耗时的子程序中查询该标志位,若成立则无条件提前退出子程序运行。
这样就可以在运行子程序期间,发生键盘中断后立即返回主程序的调用该子程序的地方了。不知这样是否满足你的需求。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
有个问题

在C中如何实现斑竹所说的第二步的那个功能?如果有可能,是否可以给出一个c和汇编的例子
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

9
 

所说的方法也就是我现在所使用的方法,这个已经在我们的产品中使用,确实能实现这杨的功能,不过我觉得很不爽,因为这中方法需要随时都判断那个全局标志的状态,而那个耗时子程序里面有很多延时阿什么的,拿就必须在延时子程序阿什么的里面随时判断那个标志,这杨很讨厌,而且我觉得程序结构也很不好
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 
直接在中断中对堆栈中关于调用子程序的PC指针进行修改是很难准确操作的,尤其是在C环境下。
你哪个所谓耗时的子程序,应该是在一个循环处理某事件时发生的,你完全可以在适当的地方放置对键盘中断标志的查询,然后直接跳出循环到子程序出口,从而实现正常返回调用。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用:


所说的方法也就是我现在所使用的方法,这个已经在我们的产品中使用,确实能实现这杨的功能,不过我觉得很不爽,因为这中方法需要随时都判断那个全局标志的状态,而那个耗时子程序里面有很多延时阿什么的,拿就必须在延时子程序阿什么的里面随时判断那个标志,这杨很讨厌,而且我觉得程序结构也很不好
如果是这样,是否有可能把子程序的结构调整一下,使其满足要求?比如进一步化小子功能块。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
那个子程序如果完整的运行下来差不多要2分钟左右

使用标志检测是肯定可以的,但是如果能直接在中断中对堆栈中关于调用子程序的PC指针进行修改那么效率要高,不知道斑竹有实现的好办法么?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表