硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1698|回复: 3
收起左侧

[μCOS-III] 关于调用OSIntEnter关中断的问题

[复制链接]

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2021-10-30 11:43:28 | 显示全部楼层 |阅读模式
刚留意到V3.08.00版本里面cpu_c.c文件里的函数CPU_IntSrcPrioSet注释里面对中断的描述跟以前稍有区别。
以前用3.04版本里面仅提到OSIntEnter和OSIntExit要成对使用,但V3.08版本里面给的调用模板中,在函数OSIntEnter前后均加了CPU_CRITICAL_ENTER和CPU_CRITICAL_EXIT。
这个好理解,是为了保护全局变量OSIntNestingCtr。
仔细研究2个版本的系统中断处理函数发现,3.04版本OS_CPU_SysTickHandler里面直接使用CPU_CRITICAL_ENTER();OSIntNestingCtr++;  CPU_CRITICAL_EXIT();
而3.08里面是CPU_CRITICAL_ENTER();OSIntEnter();CPU_CRITICAL_EXIT();两者实现的目的一样,就是对OSIntNestingCtr进行了保护。
那么问题来了,以前用户中断里一直是仅调用了OSIntEnter和OSIntExit,在调用OSIntEnter前后并没有关、开中断,
请教硬汉哥,这么做是不是会存在安全隐患(比如2个中断同时对OSIntNestingCtr进行了写操作)?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2021-10-30 13:43:43 | 显示全部楼层
单纯的来说,这个是有个问题的,因为这个不是原子操作。

从应用场景来看,主要就是中断嵌套是否会发生问题,中断嵌套的程序里面会执行完整的++,--操作,所以实际上也没有什么影响。
你看看是不是还有什么场景没有想到。


回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2021-10-30 15:05:42 | 显示全部楼层
eric2013 发表于 2021-10-30 13:43
单纯的来说,这个是有个问题的,因为这个不是原子操作。

从应用场景来看,主要就是中断嵌套是否会发生问 ...

我们实际应用程序中断很多,有些频次还比较高,所以难免会发生中断嵌套。
以前踩过类似的坑,中断和任务都对一个全局变量进行修改操作时没有关中断,偶尔会造成这个全局变量的值发生异常。
所以我觉得只要发生中断嵌套,就有可能会造成OSIntNestingCtr的数值异常。
为了稳妥起见,我把程序多加上关中断了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2021-10-30 15:12:38 | 显示全部楼层
云琴箫龙 发表于 2021-10-30 15:05
我们实际应用程序中断很多,有些频次还比较高,所以难免会发生中断嵌套。
以前踩过类似的坑,中断和任务 ...

当前这个场景下的OSIntNestingCtr是不会有问题的。

其它情况要具体场景分析。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 00:59 , Processed in 0.199208 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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