打印
[STM32F3]

关于ucos的中断服务函数中调用OSIntEnter(); 和OSIntExit(); 问题

[复制链接]
1802|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zjlsmhfd|  楼主 | 2014-9-5 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是看了这个帖子

https://bbs.21ic.com/forum.php?mod=viewthread&tid=558744

后还有一些疑问,特来请教各位高人,

我的问题是,如果进中断不加OSIntEnter(); 和OSIntExit();的话,当前程序在中断中运行时,如果systick 的中断进来了,把当前的中断剥夺了,而在systick中是要进行任务调度的,调度后不是回不到当前的中断了么?

所以我觉得只要进中断就需要加上OSIntEnter(); 和OSIntExit();  让操作系统知道当前正在中断里运行,这样在systick里就不会进行任务调度,从而能回到当前的中断继续运行。

不知道我的这个想法对不对,请高人们指点一下,万分感谢!
沙发
aozima| | 2014-9-5 23:42 | 只看该作者
所有中断退出后才“真正”进行线程切换,ISR的切换一般仅是做下标记。

使用特权

评论回复
板凳
李富贵| | 2014-9-5 23:42 | 只看该作者
如果你说的是ucosii在stm32(以及其他cortex-m内核)上面的port的话,systick的优先级是最低的,不可能在任何中断处理程序里面触发systick。

使用特权

评论回复
地板
电子老鹰| | 2014-10-27 14:42 | 只看该作者
李富贵 发表于 2014-9-5 23:42
如果你说的是ucosii在stm32(以及其他cortex-m内核)上面的port的话,systick的优先级是最低的,不可能在任 ...

可能你记错了    应该是PendSV中断的优先级最低    systick优先级可不低  否则时间片就不太准了   也就是说其它中断可以被systick中断  并且systick可以“准备”切换任务   这个“准备”就是仅仅触发PendSV中断  真正的切换是在PendSV里   但由于PendSV优先级最低   因此  若systick是嵌套到别的中断里  则PendSV无法马上执行   只能回到原来的中断继续做事  然后退出中断   此时  只剩下PendSV这个最低级的中断了   才真正开始了切换    2楼的意思也是这样

回到楼主的问题   答案就是虽然systick会切断原来的中断   但systick执行完毕依旧会回到原来的中断  而不会马上切换到别的任务   否则的话在任何中断里有可能切换任务   中断居然被悬起了没执行完  那还了得!?    实际流程是退出所有中断  然后切换执行别的任务   之后再执行当初被中断的任务

顺便说一句 虽然可以让某个中断脱离UCOS管理   也就是不执行OSIntEnter(); 和OSIntExit()    但是我感觉既然是用UCOS管理CPU了   最好一切都交给它控制   否则是否会有什么隐患 我也没试过

使用特权

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

本版积分规则

1

主题

24

帖子

1

粉丝