打印

能否实现中断暂缓执行?

[复制链接]
1370|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
EAMCU|  楼主 | 2012-7-25 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有个操作,由几个语句组成,在主循环里执行,执行时间总长几微秒
但是偶尔也会被外部中断打断,打断后执行的效果就变了
我想在执行这几句操作时,暂缓响应中断,执行完后恢复响应中断
同时又希望期间发生的中断请求都保留,不丢失。这几句操作执行完后,按顺序和优先级响应期间发生的中断请求。请问,有办法实现么?
沙发
suse-lj| | 2012-7-25 12:41 | 只看该作者
程序里很少有用到中断的 飘过。  基本都用查询方式

使用特权

评论回复
板凳
lai832| | 2012-7-25 13:07 | 只看该作者
麻烦,很少用中断,就算不得不用,也只是在中断里响应尽可能少的语句,
如楼上,都是查询,虽长期要点用查询时间,但是不会因为中断是影响关键程序段.
------其实是本人对中断的使用不熟.

可以试下,其它中断如下操作:(如主要中断为A,次要中断为B)
A中断执行时,中断A标志(如:char A_INT_Flag)  A_INT_Flag = 1;
当A中断结束时:A_INT_Flag = 0;
以标志A中断程序是否在执行中;
B有效时:中断B状态(如:char B_STAT_Flag)
#Pro...........  B--------这段我还不会弄,就是中断发生是,执行这部分内容(下同)
void B_init (void)
{
B_STAT_Flag = 0;
//B 中断程序
} else
{
B_STAT_Flag = 1;
}
#Pro........... A
void A_Init(vod)
{
A_INIT_Flag = 1;
//中断A程序开始
......
//中断A程序后段
A_INIT_Flag = 0;
if (B_STAT_Flag == 1)
B_init();
}

注:中是一个思路,如何处理中断执行时,如何避免中断冲突等问题不在上面考虑范围内

使用特权

评论回复
地板
21ID| | 2012-7-25 13:11 | 只看该作者
你可以在执行这些语句的时候把总中断关闭,但是中断使能位开起来。当执行完这些语句的时候再查询中断标志位。

使用特权

评论回复
5
qiujiahongde| | 2012-7-26 08:31 | 只看该作者
解决方案:
1、调用该语句时关闭中断,执行完毕打开中断,优点:保证该语句不受打搅;缺点:如果执行该语句的时候中断来了则丢失;使用条件:中断不频繁;
2、减少中断允许时间,在中断函数里面只置标志,中断里面也别去使用库函数,减少压栈出栈次数;有点:中断不受干扰;缺点,中断的时候该语句执行可能错误(如果你要求有这么高的话)

使用特权

评论回复
6
EAMCU|  楼主 | 2012-8-14 17:15 | 只看该作者
由于中断太重要,不能丢弃。
所以最后我的解决方案是:一点点调试,找到中断打断后出错的地方,经分析是某个库函数被中断后会出现问题,所以自己重写了该库函数,使得其即使被打断也不会影响数据的正确性。经实验验证,解决了问题。

使用特权

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

本版积分规则

38

主题

396

帖子

2

粉丝