From 8db8b9f0bfe4ac154fcbf55bd7622842a9dfda90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B6=E4=B8=AD=E6=96=AD=E5=BB=B6=E8=BF=9F=E7=9A=84RTOS?= Date: Wed, 3 Jan 2024 16:18:19 +0000 Subject: [PATCH] =?UTF-8?q?update=20=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3/C?= =?UTF-8?q?osyOS=E5=8E=9F=E7=90=86=E4=B8=8E=E5=BA=94=E7=94=A8.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 零中断延迟的RTOS --- 说明文档/CosyOS原理与应用.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/说明文档/CosyOS原理与应用.md b/说明文档/CosyOS原理与应用.md index 257b6c4..1b6d601 100644 --- a/说明文档/CosyOS原理与应用.md +++ b/说明文档/CosyOS原理与应用.md @@ -118,17 +118,18 @@ CosyOS的任务调度时机分为 **定时调度** 与 **临时调度**。
**4、** 设置阻塞时间为零或清除阻塞时,该任务会转为就绪状态,如果它的优先级高于当前任务的优先级,会立即触发任务调度。
**5、** 归还互斥信号量完成时,如果发生过优先级继承(该任务的优先级被提升),会恢复该任务的原优先级,并立即触发任务调度。
**6、** 用户通过调用服务,直接触发的任务调度,包括任务级任务调度和中断级任务调度。
+ CosyOS的任务调度策略可最大程度的实现尽可能实时高效的任务切换,使CosyOS的实时性更为优异。
### 任务栈模式 -CosyOS把任务栈的处理方式称之为任务栈模式,共包括三种类型,MSP模式、PSP模式、MSP+PSP模式。
+CosyOS把任务栈的处理方式称之为任务栈模式,共包括三种类型,**MSP模式**、**PSP模式**、**MSP+PSP模式**。
* **MSP模式** 任务切换时,先拷贝主栈内容至当前任务栈(保存现场);再拷贝新任务栈内容至主栈(恢复现场)。
* **PSP模式** 每个任务的任务栈都是主栈,哪个任务运行时,哪个任务的任务栈(当前任务栈)就是当前主栈。
* **MSP+PSP模式** 中断时为Handler模式,入栈入的是主栈;任务时为Thread模式,入栈入的是当前任务栈。
-对于51来说,CosyOS采用了搬栈这一传统方案,也就是MSP模式。
-对于Arm来说,CosyOS所采用的方法当然是主流的双栈指针了,也就是MSP+PSP模式。
+对于51来说,CosyOS采用了搬栈这一传统方案,也就是MSP模式;
+对于Arm来说,CosyOS所采用的方法当然是主流的双栈指针了,也就是MSP+PSP模式;
对于251来说,CosyOS支持MSP模式、PSP模式,这两种栈模式供用户选择。
* **PSP模式与MSP+PSP模式的异同**
@@ -137,14 +138,14 @@ PSP模式,中断入栈也入任务栈,相比MSP+PSP模式,需要更大的 * **MSP模式的优势**
凡事都是辩证的,有一利必有一弊。
MSP模式虽然在任务切换时会保存并恢复现场,导致效率较低,但只要主栈和内存池足够大,就可确保所有任务栈永不溢出。
-当然,前提是任务栈得是动态的,CosyOS将自动启用任务栈重分配机制,以抵御任务栈溢出的风险。
+当然,前提是任务栈得是动态的,CosyOS将自动启用任务栈重分配机制,可有效抵御任务栈溢出的风险。
这一点是PSP模式、MSP+PSP模式所不具备的。PSP模式、MSP+PSP模式,一旦任务栈溢出,既成事实,数据覆盖可能已经发生,无法挽回。
* **任务栈重分配机制**
-任务栈重分配机制,在正式的产品中可有效抵御任务栈溢出的风险。
-在概率上,也许测试一年也不会碰到一次任务栈溢出,但大批量产品投入使用后不一定哪天就会碰到。
+任务栈重分配机制,被设计用来在正式的产品中抵御任务栈溢出的风险。
+在概率上,也许测试一年也不会碰到一次任务栈溢出,但大批量产品投入使用后不一定哪天就会溢出。
如果内存足够大,问题也好解决,但51/251的内存有限,既要节约着用还不要栈溢出就得用点策略了。
-任务栈重分配机制的意义就在于此。
+任务栈重分配机制的意义正在于此。
重点是,任务栈重分配机制是做为一种补救手段,不建议用户过分依赖。
开发调试时,还是要配置够用的任务栈,保证测试阶段不会溢出(不会发生重分配)。
任务栈重分配次数多了会导致内存碎片,如果过分依赖的话,反而会导致内存更加不够用。