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

[复制链接]
 楼主| dong130300 发表于 2013-5-30 11:26 | 显示全部楼层 |阅读模式
在ucos的中断函数中是每次写中断函数都需要OSIntEnter(); 和OSIntExit(); 用来判断中断嵌套层数和进行任务调度吗,我看多数情况是这样的,但是有的书上的程序中有RTC中断服务函数,但是并没有调用操作系统的进入中断服务函数OSIntEnter()和退出中断服务函数OSIntExit(),他的解释是因为在RTC中断服务函数中没有调用任何操作系统的服务函数(如发送信号量之类的函数),故不需要操作系统干预,这是为什么那,这样的话中断之后不就不进行任务调度了吗

 楼主| dong130300 发表于 2013-5-31 12:08 | 显示全部楼层
各位大神 帮帮忙吧
i55 发表于 2013-5-31 15:03 | 显示全部楼层
OSIntExit()会引发一次任务调度,但是中断里面如果没有PostEvent函数,也就是说中断退出不需要进行任务调度,可以省略掉这个操作。
 楼主| dong130300 发表于 2013-5-31 15:22 | 显示全部楼层
i55 发表于 2013-5-31 15:03
OSIntExit()会引发一次任务调度,但是中断里面如果没有PostEvent函数,也就是说中断退出不需要进行任务调度 ...

你的意思是说只有在中断中有可以触发任务调度的函数的时候才需要用OSIntExit()
i55 发表于 2013-5-31 15:53 | 显示全部楼层
dong130300 发表于 2013-5-31 15:22
你的意思是说只有在中断中有可以触发任务调度的函数的时候才需要用OSIntExit() ...

举例来说吧,有一个task里面有pendevent函数,如pendsem,中断postsem,这时候osintexit进行任务调度,中断退出后这个task会立刻执行。但是你的中断没有任何postevent,搞osintexit任务调度是毫无意义的。
 楼主| dong130300 发表于 2013-5-31 17:34 | 显示全部楼层
i55 发表于 2013-5-31 15:53
举例来说吧,有一个task里面有pendevent函数,如pendsem,中断postsem,这时候osintexit进行任务调度,中 ...

明白了 也就是在中断之后OSIntExit就是为了让等待信号量的任务立刻执行,所以才进行的任务调度,如果没有什么等待任务,也就没有调度的必要了
hkcj 发表于 2013-5-31 21:08 | 显示全部楼层
操作系统这一块   没有怎么接触过   楼主  帮你顶一个    看看别人的意见   
hkcj 发表于 2013-5-31 21:17 | 显示全部楼层
问题解决了就好   多逛21ic的好处   是不是啊   没有解决不了的问题
李富贵 发表于 2013-6-3 15:13 | 显示全部楼层
中断退出进行任务调度正是抢占式RTOS的精华所在,如果只在Systick里面进行任务调度那不就成了时间片OS?实时性没有了。
ysmz4 发表于 2014-11-11 10:39 | 显示全部楼层
感谢!!
Larm1 发表于 2016-3-15 17:36 | 显示全部楼层
学习了...
戴风海 发表于 2016-3-28 20:48 | 显示全部楼层
刚学到
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

35

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部