标题: 关于单片机外部中断返回问题 [打印本页]

作者: 无限飞翔    时间: 2020-8-9 18:19
标题: 关于单片机外部中断返回问题
void ext0() interrupt 0
{

keyscan;();//键盘里改变 F 的数字

}
void main()
{
                        while(1)
                                {
                                        switch(F)
                                                {
                                                        case 1:
                                                                 pattern1();//里面很多语句
                                                        break;
                                                        case 2:
                                                                 pattern2();//里面很多语句
                                                        break;
                                                        case 3:
                                                                 pattern3();//里面很多语句
                                                        break;
                                                                                                
                                                }

}
按下外部中断键 进入中断,中断里就是键 盘扫描,改变F的数值 ,但是中断结束返回后,不会立即执行F数值 所指定的语句,而是返回中断点执行完原来的,才会重新判断F的数值 ,执行相应的语句,我想这个应该 怎么写才能F数值 发生改变后  立即执行,大师门给个思路。

作者: 1692483014    时间: 2020-8-9 23:56
你的意思是不是在执行pattern2();的过程中,突然来了中断,中断按键扫描的结果是F=1;但是中断退出后你想直接执行pattern1();但是程序还是会把pattern2();执行完才会执行pattern1();导致1的任务被立即执行,产生了问题,是这样吧!

如果是这样,你需要将pattern1();直接放到中断中去执行,但是要确保它不会占用太长时间,尤其是delay肯定是不能有的。其实我们把这种任务叫做“刹车”任务,有危险就要刹车,车就要立即停止,所有其它任务都要靠边儿站,这样才不会发生交通事故。

你还可以通过引入OS来尽可能保证单核MCU的资源尽可能不被delay这种耗时间的任务占用不必要的时间,
同时,也可以通过给任务排版优先级来解决任务排序问题,但是以你目前的能力,不建议立即引入,再多写写代码,多看看代码吧。
另外,如果你是多核的mcu,可以让不同内核做不同的事情,也能解决你的问题,这个不太符合你的情况。
作者: 无限飞翔    时间: 2020-8-10 08:05
谢谢回答!
刚才开始弄,水平有限,把pattern1()放到中断里执行,那执行完不还是要返回原来的断点吗?
我的意思是 只要F是什么值就循环执行相应的程序。

作者: xstong    时间: 2020-8-10 09:46
简化任务,优化设计,使程序尽可能多的时间处于休眠状态,而非高速循环运行!中断发生时,程序尽可能是从一个固定的休眠位置唤醒!
作者: 1692483014    时间: 2020-8-11 19:25
无限飞翔 发表于 2020-8-10 08:05
谢谢回答!
刚才开始弄,水平有限,把pattern1()放到中断里执行,那执行完不还是要返回原来的断点吗?
...

退出中断就是要返回原来中断的地方继续执行啊!芯片就是这样设计的,这个改变不了。
作者: 无限飞翔    时间: 2020-8-14 08:56
1692483014 发表于 2020-8-11 19:25
退出中断就是要返回原来中断的地方继续执行啊!芯片就是这样设计的,这个改变不了。

之前的思想不对,重新安排了下,基本解决。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1