硬汉嵌入式论坛

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

[RL-RTX] RTX 零中断延迟 疑问?

[复制链接]

34

主题

111

回帖

213

积分

高级会员

程序小白

积分
213
QQ
发表于 2020-7-21 11:12:04 | 显示全部楼层 |阅读模式
RTX 零中断延迟是如何实现的?教程讲到没有使用到关闭中断。之前学习UCOS2,的确内核大量使用到 CPU_CRITICAL_ENTER()与CPU_CRITICAL_EXIT()来操作CPSR 开关中断。以达到处理 临界区的问题。  
RTX难道内核没有使用到全局变量?没有临界区的问题?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2020-7-21 11:55:37 | 显示全部楼层
RTX的零中断延迟有两个关键点。

一个是任务级API函数通过SVC软中断调用,这样就无需做开关中断操作了,还有一个是需要互斥的地方使用CM内核指令 LDREX 和 STREX
回复

使用道具 举报

34

主题

111

回帖

213

积分

高级会员

程序小白

积分
213
QQ
 楼主| 发表于 2020-7-22 10:18:51 | 显示全部楼层
不是很明白,比如UCOS2中任务级API函数 ,我们调用 不是 跟RTX4一样吗?   UCOS2也用了 SVC 与 pendsv中断。
比如 OSCtxSw
        //触发PendSV
    LDR     R0, =NVIC_INT_CTRL                                 
    LDR     R1, =NVIC_PENDSVSET
    STR     R1, [R0]
    //函数返回
        BX      LR
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2020-7-22 10:37:54 | 显示全部楼层
清风徐来 发表于 2020-7-22 10:18
不是很明白,比如UCOS2中任务级API函数 ,我们调用 不是 跟RTX4一样吗?   UCOS2也用了 SVC 与 pendsv中断 ...

不一样,uCOS没有用到SVC软中断,像FreeRTOS用过也是仅仅任务启动的时候调用一下。

RTX与他们不同,RTX的API是直接触发SVC中断,在中断里面调用的,有效的隔离了内核和应用代码。
回复

使用道具 举报

34

主题

111

回帖

213

积分

高级会员

程序小白

积分
213
QQ
 楼主| 发表于 2020-7-22 10:44:33 | 显示全部楼层
好的,有点明白了
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2020-7-22 15:50:25 | 显示全部楼层
本帖最后由 myxiaonia 于 2020-7-22 15:56 编辑

我再补充一点,rtx对于中断内执行的api函数,使用一种类似邮箱的做法,将调用暂存,启用pendsv,之后立刻退出当前中断。所有中断调用都会攒到pendsv里统一执行,用这种办法保证用户中断只会最低限度阻塞

这种做法充分利用了cortexm在多个中断之间切换可以减少一些自动出入栈

当然arm9的rtx就不是这种做法了,在那里更像普通rtos的做法,主要是arm9的中断机制看上去比较弱,不过依然有他自己的特色,有一部分api同样用到了swi软中断

回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2020-7-22 16:15:03 | 显示全部楼层
rtx这种做法,事实上表明在调用系统api上,中断优先级实际上是无效的,而这也是符合rtos的意愿的,它最终会保证应该执行的那个任务会被执行
回复

使用道具 举报

5

主题

28

回帖

43

积分

新手上路

积分
43
发表于 2020-8-24 17:52:51 | 显示全部楼层
myxiaonia 发表于 2020-7-22 16:15
rtx这种做法,事实上表明在调用系统api上,中断优先级实际上是无效的,而这也是符合rtos的意愿的,它最终会 ...

请教下,rtx这种做法,会导致svc中断时间区间内的中断优先级无效,那么这时候其他中断来了也不是一样要等待?那岂不是没有消除中断延迟??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2020-8-25 09:51:14 | 显示全部楼层
wkler 发表于 2020-8-24 17:52
请教下,rtx这种做法,会导致svc中断时间区间内的中断优先级无效,那么这时候其他中断来了也不是一样要等 ...

首先SVC,Systick,PendSV的中断优先级默认都是最低的两个,其它中断优先级都可以抢占。对中断延迟无影响。

然后这个涉及到RTX的ISR FIFO机制。

你中断里面没有调用到RTX API的无影响,如果调用到RTX API的,各个中断的消息都会整到ISR FIFO统一处理,就是这么个东西。
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2020-8-25 14:29:48 | 显示全部楼层
wkler 发表于 2020-8-24 17:52
请教下,rtx这种做法,会导致svc中断时间区间内的中断优先级无效,那么这时候其他中断来了也不是一样要等 ...

不是svc中断,是isr开头的系统调用,本质上是没有中断优先级的,而且这也是符合rtos实际的

你想,rtos本身相当于一种用户级别的中断机制,只需要中断用户级别的代码,自己的调用还能打断自己这还不乱套了

rtx的0中断延迟,主要是指中断里发生的事情保证在中断里完成并且不关中断,但是调用isr代表的真正系统调用顺序可能与实际中断嵌套过程不一致,但这个和rtos提供的功能并不冲突
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-10-31 11:46:14 | 显示全部楼层
这个ISR FIFO有点像ucos iii的中断延迟发布的感觉
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 21:19 , Processed in 0.235931 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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