OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6257|回复: 12

OSIntEnter()和OSIntExit()的调用问题

[复制链接]

36

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
943
金钱
943
注册时间
2015-11-24
在线时间
162 小时
发表于 2019-2-19 15:02:52 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 gangzilife 于 2019-2-19 16:55 编辑

请教大神们一个小问题:

ucos-iii中中断里调用OSIntEnter() and OSIntExit()

1、能不能不调用二者?不调用退出时不会尝试切换任务,从哪里进来就从哪里出去

2、如果中断中不调用二者,然后该中断又被systick抢占,systick结束时尝试任务切换,但pendsv的优先级最低,貌似还是会回到之前的中断,中断结束后才执行pendsv中断切换任务,这样虽然实时性低了一点,但好像还是没有问题

3、M3/M4的内核用pendsv切换任务,而不是systick直接切换,是不是这个中断嵌套OSIntNestingCtr对于M3/M4压根就没用,只是为了兼容其他的CPU(因为pendsv的优先级问题,及时被嵌套,也不会执行)

以上几个问题,希望对这块了解的大神给予帮助,谢谢

最佳答案

查看完整内容[请看2#楼]

不行。。。必须调用。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-2-19 15:02:53 | 显示全部楼层
不行。。。必须调用。
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2019-2-19 16:39:55 | 显示全部楼层
帮顶帮顶帮顶帮顶帮顶帮顶帮顶
回复

使用道具 举报

36

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
943
金钱
943
注册时间
2015-11-24
在线时间
162 小时
 楼主| 发表于 2019-2-20 09:03:29 | 显示全部楼层
本帖最后由 gangzilife 于 2019-2-20 09:07 编辑
正点原子 发表于 2019-2-20 01:39
不行。。。必须调用。

分析了源码,实在没看到为什么必须调用,除了实时性差一点之外,好像没啥,能告知下为什么必须调用吗?
附:* If your ISR handler does not need to be kernel aware then you do not need to use OSIntEnter()/OSIntExit().*
在别的论坛看的:
中断退出进行任务调度正是抢占式RTOS的精华所在,如果只在Systick里面进行任务调度那不就成了时间片OS?实时性没有了。
回复

使用道具 举报

36

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
943
金钱
943
注册时间
2015-11-24
在线时间
162 小时
 楼主| 发表于 2019-2-20 10:59:26 | 显示全部楼层
正点原子 发表于 2019-2-20 01:39
不行。。。必须调用。

找到了官方说明:
Kernel Aware can be described as an ISR that makes use/calls to OS kernel services, such as semaphores,mutexes, flags, etc. The proper Handler implementation when using uCOS-III is shown in Listing 1.

void KA_ISR_Handler (void)
{
CPU_SR_ALLOC();
CPU_CRITICAL_ENTER();
OSIntEnter(); /* Tell OS that we are starting an ISR */
CPU_CRITICAL_EXIT();
/* HANDLE YOUR ISR HERE */
/* HANDLE YOUR ISR HERE */
OSIntExit(); /* Tell OS that we are leaving the ISR */
}

Non-Kernel Aware can be described as Fast ISRs, which do not require any kind of OS kernel service calls.
The proper handler implementation when using uCOS-III is shown below
void NKA_ISR_Handler (void)
{
/* HANDLE YOUR ISR HERE */
/* HANDLE YOUR ISR HERE */
}
回复

使用道具 举报

36

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
943
金钱
943
注册时间
2015-11-24
在线时间
162 小时
 楼主| 发表于 2019-2-20 12:02:08 | 显示全部楼层
gangzilife 发表于 2019-2-20 10:59
找到了官方说明:
Kernel Aware can be described as an ISR that makes use/calls to OS kernel servic ...

结了结了,不纠结了,最好还是带上吧!

我看的是3.07.03的ucos-iii内核源码,里面有个宏CPU_CFG_KA_IPL_BOUNDARY,把中断分两类

Since the port is using BASEPRI to separate kernel vs non-kernel aware ISR, please
make sure your external interrupt priorities are set accordingly. For example, if
CPU_CFG_KA_IPL_BOUNDARY is set to 4 then external interrupt priorities 4-15 will be kernel aware while priorities 0-3 will be use as non-kernel aware.
回复

使用道具 举报

0

主题

28

帖子

0

精华

高级会员

Rank: 4

积分
762
金钱
762
注册时间
2018-7-25
在线时间
276 小时
发表于 2019-4-2 17:37:00 | 显示全部楼层
gangzilife 发表于 2019-2-20 10:59
找到了官方说明:
Kernel Aware can be described as an ISR that makes use/calls to OS kernel servic ...

这部分是在哪个文档中呢,我没找到
回复

使用道具 举报

36

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
943
金钱
943
注册时间
2015-11-24
在线时间
162 小时
 楼主| 发表于 2019-4-3 10:49:04 | 显示全部楼层
本帖最后由 gangzilife 于 2019-4-3 10:50 编辑
路上捡到一只猫 发表于 2019-4-2 17:37
这部分是在哪个文档中呢,我没找到

这个文档中有说明,注意ucos的版本,3.07以上的版本和3.07以下的还是有很大区别的

AN-uCOS-III-V3.07.00-Migrate-to-new-ARMv7-M-Port.pdf

813.42 KB, 下载次数: 18

回复

使用道具 举报

头像被屏蔽

28

主题

48

帖子

0

精华

禁止访问

积分
335
金钱
335
注册时间
2019-4-2
在线时间
19 小时
发表于 2019-4-3 11:17:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

0

主题

28

帖子

0

精华

高级会员

Rank: 4

积分
762
金钱
762
注册时间
2018-7-25
在线时间
276 小时
发表于 2019-4-4 11:10:55 | 显示全部楼层
gangzilife 发表于 2019-4-3 10:49
这个文档中有说明,注意ucos的版本,3.07以上的版本和3.07以下的还是有很大区别的

谢谢哈,3.07改动好像蛮大的
回复

使用道具 举报

38

主题

196

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1177
金钱
1177
注册时间
2015-11-9
在线时间
249 小时
发表于 2020-5-15 10:04:01 | 显示全部楼层
gangzilife 发表于 2019-2-20 12:02
结了结了,不纠结了,最好还是带上吧!

我看的是3.07.03的ucos-iii内核源码,里面有个宏CPU_CFG_KA_IP ...

这是新的更新,以前版本都是直接关全局中断,现在用BASEPRI来区分,也就是这里说的kernel aware和non-kernel。所以需要用户自己进行区分,在中断优先级小于BASEPRI的中断中无需在调用OSIntEnter,高于BASEPRI设置的需要调用。
回复

使用道具 举报

36

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
943
金钱
943
注册时间
2015-11-24
在线时间
162 小时
 楼主| 发表于 2020-7-28 15:53:19 | 显示全部楼层
shibinjie 发表于 2020-5-15 10:04
这是新的更新,以前版本都是直接关全局中断,现在用BASEPRI来区分,也就是这里说的kernel aware和non-ker ...

理解反了吧,老哥
回复

使用道具 举报

38

主题

196

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1177
金钱
1177
注册时间
2015-11-9
在线时间
249 小时
发表于 2020-7-29 09:04:14 | 显示全部楼层
gangzilife 发表于 2020-7-28 15:53
理解反了吧,老哥

没有吧
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 09:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表