update 说明文档/CosyOS原理与应用.md.

Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
This commit is contained in:
零中断延迟的RTOS
2024-01-03 06:45:37 +00:00
committed by Gitee
parent 8ae5ea21a4
commit 4250d2a892

View File

@@ -119,20 +119,25 @@ CosyOS的任务调度时机分为 **定时调度** 与 **临时调度** 。<br>
CosyOS的任务调度策略可最大程度的实现尽可能实时高效的任务切换使CosyOS的实时性更为优异。<br>
### 八、任务栈
* **任务栈模式** <br>
CosyOS把任务栈的处理方式称之为任务栈模式共包括三种类型MSP模式、PSP模式、MSP+PSP模式。<br>
**MSP模式** 任务切换时,先拷贝主栈内容至当前任务栈(保存现场);再拷贝新任务栈内容至主栈(恢复现场)。<br>
**PSP模式** 每个任务的任务栈都是主栈,哪个任务运行时,哪个任务的任务栈(当前任务栈)就是当前主栈。<br>
**MSP+PSP模式** 中断时为Handler模式入栈入的是主栈任务时为Thread模式入栈入的是当前任务栈。<br>
1、对于51来说CosyOS采用了搬栈这一传统方案也就是MSP模式。<br>
2、对于Arm来说CosyOS所采用的方法当然是主流的双栈指针了也就是MSP+PSP模式。<br>
3、对于251来说CosyOS支持MSP模式、PSP模式这两种栈模式供用户选择。<br>
**PSP模式与MSP+PSP模式的异同** PSP模式中断入栈也入任务栈相比MSP+PSP模式需要更大的任务栈也就是需要更大的edata内存。<br>
**1.MSP模式** 任务切换时,先拷贝主栈内容至当前任务栈(保存现场);再拷贝新任务栈内容至主栈(恢复现场)。<br>
**2.PSP模式** 每个任务的任务栈都是主栈,哪个任务运行时,哪个任务的任务栈(当前任务栈)就是当前主栈。<br>
**3.MSP+PSP模式** 中断时为Handler模式入栈入的是主栈任务时为Thread模式入栈入的是当前任务栈。<br>
对于51来说CosyOS采用了搬栈这一传统方案也就是MSP模式。<br>
对于Arm来说CosyOS所采用的方法当然是主流的双栈指针了也就是MSP+PSP模式。<br>
对于251来说CosyOS支持MSP模式、PSP模式这两种栈模式供用户选择。<br>
* **PSP模式与MSP+PSP模式的异同** <br>
PSP模式中断入栈也入任务栈相比MSP+PSP模式需要更大的任务栈也就是需要更大的edata内存。<br>
* **MSP模式的优势** <br>
凡事都是辩证的,有一利必有一弊。<br>
MSP模式虽然在任务切换时会保存并恢复现场导致效率较低但只要主栈和内存池足够大就可确保所有任务栈永不溢出。<br>
当然前提是任务栈得是动态的CosyOS将自动启用任务栈重分配机制以抵御任务栈溢出的风险。<br>
这一点是PSP模式、MSP+PSP模式所不具备的。PSP模式、MSP+PSP模式一旦任务栈溢出既成事实数据覆盖可能已经发生无法挽回。<br>
* **任务栈重分配机制** <br>
任务栈重分配机制,在正式的产品中可有效抵御任务栈溢出的风险。<br>
在概率上,也许测试一年也不会碰到一次任务栈溢出,但大批量产品投入使用后不一定哪天就会碰到。<br>
@@ -145,10 +150,10 @@ MSP模式虽然在任务切换时会保存并恢复现场导致效率较低
任务栈重分配机制的启用条件:<br>
1、对于8051当任务创建模式非静态创建时CosyOS将自动启用任务栈重分配机制。<br>
2、对于80251当任务栈模式为MSP模式、任务创建模式非静态创建时CosyOS将自动启用任务栈重分配机制。<br>
* **任务栈之初始定义**
1、对于51及251的MSP模式当任务创建模式非静态创建时任务栈初始定义可以小(因为有重分配机制),而后根据监控及报警情况再调整(增大)。
2、对于251的PSP模式及Arm的MSP+PSP模式任务栈的初始定义一定要够大否则可能会运行不起来或死机,而后根据测试情况重新调整任务栈。
3、对于251的PSP模式由于中断入栈也入任务栈所以需要用户自己根据中断的使用情况来计算一个中断嵌套入栈的最大size不必包括最低优先级的中断入栈累加到“前面的字节数”中看是否会大于 “后面的字节数”,再行调整。
* **任务栈初始定义** <br>
1、对于51及251的MSP模式,当任务创建模式非静态创建时,任务栈的初始定义可以小(因为有重分配机制),而后根据监控及报警情况再增大。<br>
2、对于251的PSP模式及Arm的MSP+PSP模式任务栈的初始定义一定要够大否则可能会运行不起来或死机而后再根据测试情况重新调整任务栈。<br>
### 九、任务管理器