清风徐来 发表于 2020-7-21 11:12:04

RTX 零中断延迟 疑问?

RTX 零中断延迟是如何实现的?教程讲到没有使用到关闭中断。之前学习UCOS2,的确内核大量使用到 CPU_CRITICAL_ENTER()与CPU_CRITICAL_EXIT()来操作CPSR 开关中断。以达到处理 临界区的问题。
RTX难道内核没有使用到全局变量?没有临界区的问题?

eric2013 发表于 2020-7-21 11:55:37

RTX的零中断延迟有两个关键点。

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

清风徐来 发表于 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,
    //函数返回
        BX      LR

eric2013 发表于 2020-7-22 10:37:54

清风徐来 发表于 2020-7-22 10:18
不是很明白,比如UCOS2中任务级API函数 ,我们调用 不是 跟RTX4一样吗?   UCOS2也用了 SVC 与 pendsv中断 ...

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

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

清风徐来 发表于 2020-7-22 10:44:33

好的,有点明白了

myxiaonia 发表于 2020-7-22 15:50:25

本帖最后由 myxiaonia 于 2020-7-22 15:56 编辑

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

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

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

myxiaonia 发表于 2020-7-22 16:15:03

rtx这种做法,事实上表明在调用系统api上,中断优先级实际上是无效的,而这也是符合rtos的意愿的,它最终会保证应该执行的那个任务会被执行

wkler 发表于 2020-8-24 17:52:51

myxiaonia 发表于 2020-7-22 16:15
rtx这种做法,事实上表明在调用系统api上,中断优先级实际上是无效的,而这也是符合rtos的意愿的,它最终会 ...

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

eric2013 发表于 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统一处理,就是这么个东西。

myxiaonia 发表于 2020-8-25 14:29:48

wkler 发表于 2020-8-24 17:52
请教下,rtx这种做法,会导致svc中断时间区间内的中断优先级无效,那么这时候其他中断来了也不是一样要等 ...

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

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

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

qq1646544 发表于 2023-10-31 11:46:14

这个ISR FIFO有点像ucos iii的中断延迟发布的感觉
页: [1]
查看完整版本: RTX 零中断延迟 疑问?