13918210822 发表于 2024-6-9 08:27:10

任务切换本身可以不占用中断实现

是否有什么是必须占用中断才能实现的RTOS服务?

这个理解得不太清楚,杨教授有空请解惑一二, 谢谢!

杨为民 发表于 2024-6-9 16:47:49

13918210822 发表于 2024-6-9 08:27
任务切换本身可以不占用中断实现

是否有什么是必须占用中断才能实现的RTOS服务?


(1)仅使用不占用中断的任务切换的系统是“禅让式的前后台多任务操作系统”,同时使用占用中断的任务切换的系统是“抢占式的实时多任务操作系统”。
(2)稍微复杂的系统如果需要定时操作,都是用硬件定时器来实现的。虽然也可以不用中断,只用纯软件的查询等待的方法来实现定时操作,但是使用定时器中断方法更简单可靠。
(3)所有的RTOS都要有一个系统节拍来协调各种任务的运行和提供各种抢占式服务,所以RTOS至少需要一个定时器中断来担任系统节拍中断。
(4)STC单片机的定时器0的模式3不可屏蔽中断模式就是专门为RTOS提供的。

13918210822 发表于 2024-6-9 17:35:27

本帖最后由 13918210822 于 2024-6-9 18:42 编辑

杨为民 发表于 2024-6-9 16:47
(1)仅使用不占用中断的任务切换的系统是“禅让式的前后台多任务操作系统”,同时使用占用中断的任务切 ...
感谢杨教授解惑{:4_250:}

Timer0 Mode3 (NMI)

Keil 的 RTX 也占用了 Timer0, 和 寄存器组1

看来, 这是一个很合理的选择

可能有一个方式:
NMI配置为最高优先级, 在NMI ISR中设置标志和RETI栈返回地址到系统任务(系统任务用自己独立的寄存器组(比如组1)、栈 、CmdQ)
从而让系统调度IST(IST 0)有新的一次执行的机会

至于关不关中断,本质上是让调度的关键过程不会被打断而造成可能的混乱。NMI如果最高优先级,ISR部分可以不被打断,和EA=0这方面是一致
但是,EA不关,中断标志位仍然会由数字逻辑硬件各自设置。NMI返回后,执行一条指令后,如果有中断标志位的中断仍然会触发ISR

所以,由任务调度/其他RTOS服务引入的额外中断等待时间就由 NMI ISR最大时间决定,
只要 NMI ISR + ISR_a < 2次 a中断发生最小可能时间,就不会阻塞信号中断造成信号丢失

您看呢?


13918210822 发表于 2024-7-25 09:12:46

杨为民 发表于 2024-5-7 10:39
这是我在另一个帖子里的答复

(1)“前提条件是,不能是最低优先级中断”。具体问题必须具体分析,对于ST ...

ARM PendSV是CPU状态,低于其他中断

51要不阻拦中断,只有把任务切换处于任务态时进行,比如在内核守护任务中进行

13918210822 发表于 2024-7-25 09:21:24

本帖最后由 13918210822 于 2024-7-25 09:26 编辑

杨为民 发表于 2024-6-9 16:47
(1)仅使用不占用中断的任务切换的系统是“禅让式的前后台多任务操作系统”,同时使用占用中断的任务切 ...
经过一些时日的尝试,最早隐隐约约的感觉(51任务态切换任务),可能已有解决方案了

无论是抢占还是主动任务切换,都有方法不在中断内进行

毕竟51是可以动态切PC的, 首先在合时时机POP xPCH xPCL(任务控制区内各自独立的断点缓存)
PUSH xPCL      ;压PC低8位
PUSH xPCH   ;压PC高8位
RET               ;动态切换到指定位置 16B PC ( xPCH:xPCL )

当然在中断内,RET换成RETI则可切换


我想不用任务主要是考虑临界区保护切换的事务完整性

只要中断内不干预或者切任务API拒绝中断态切任务

其他保护手段还在思考。。。
页: 1 [2]
查看完整版本: 华山论剑(2): “零中断延迟”是否可以实现: RTOS的最大中断延迟时间测量