找回密码
 立即注册
楼主: 杨为民

华山论剑(2): “零中断延迟”是否可以实现: RTOS的最大中断延迟时间测量

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 2024-6-9 08:27:10 | 显示全部楼层
任务切换本身可以不占用中断实现

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

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

点评

(1)仅使用不占用中断的任务切换的系统是“禅让式的前后台多任务操作系统”,同时使用占用中断的任务切换的系统是“抢占式的实时多任务操作系统”。 (2)稍微复杂的系统如果需要定时操作,都是用硬件定时器来实现  详情 回复 发表于 2024-6-9 16:47
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-6-9 16:47:49 | 显示全部楼层
139182*** 发表于 2024-6-9 08:27
任务切换本身可以不占用中断实现

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

(1)仅使用不占用中断的任务切换的系统是“禅让式的前后台多任务操作系统”,同时使用占用中断的任务切换的系统是“抢占式的实时多任务操作系统”。
(2)稍微复杂的系统如果需要定时操作,都是用硬件定时器来实现的。虽然也可以不用中断,只用纯软件的查询等待的方法来实现定时操作,但是使用定时器中断方法更简单可靠

(3)所有的RTOS都要有一个系统节拍来协调各种任务的运行和提供各种抢占式服务,所以RTOS至少需要一个定时器中断来担任系统节拍中断
(4)STC单片机的定时器0的模式3不可屏蔽中断模式就是专门为RTOS提供的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 2024-6-9 17:35:27 | 显示全部楼层
本帖最后由 13918210822 于 2024-6-9 18:42 编辑
杨*** 发表于 2024-6-9 16:47
(1)仅使用不占用中断的任务切换的系统是“禅让式的前后台多任务操作系统”,同时使用占用中断的任务切 ...

感谢杨教授解惑

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中断发生最小可能时间,就不会阻塞信号中断造成信号丢失

您看呢?


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 2024-7-25 09:12:46 | 显示全部楼层
杨*** 发表于 2024-5-7 10:39
这是我在另一个帖子里的答复

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

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 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拒绝中断态切任务

其他保护手段还在思考。。。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:47 , Processed in 0.137525 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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