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

Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
This commit is contained in:
零中断延迟的RTOS
2024-01-03 15:03:48 +00:00
committed by Gitee
parent cb206efd1f
commit 7f1f4da97e

View File

@@ -28,25 +28,25 @@ CosyOS有三种时间片的定义模式全局时间片、算法时间片、
* **系统任务** <br>
由CosyOS自主创建并自动启动的任务。<br>
**1. 任务管理器Taskmgr** 优先级固定为最高优先级。<br>
**2. 调试任务Debugger** 优先级固定为最高优先级,用做命令行和任务管理器的串口接收解析。<br>
**3. 启动任务Starter** 优先级固定为比最高优先级低一级,通过调用启动钩子来启动用户任务,而后删除自身。<br>
**4. 系统空闲任务Sysidle** 优先级固定为最低优先级0级是系统级的空闲任务。<br>
**1. 任务管理器Taskmgr** 优先级固定为最高优先级。<br>
**2. 调试任务Debugger** 优先级固定为最高优先级,用做命令行和任务管理器的串口接收解析。<br>
**3. 启动任务Starter** 优先级固定为比最高优先级低一级,通过调用启动钩子来启动用户任务,而后删除自身。<br>
**4. 系统空闲任务Sysidle** 优先级固定为最低优先级0级是系统级的空闲任务。<br>
* **系统钩子** <br>
由CosyOS自主创建并自动调用的函数并由用户来写代码。<br>
**1. 初始化钩子init_hook** 在主函数中首先被调用适用于初始化时钟、GPIO、寄存器等工作。<br>
**2. 启动钩子start_hook** 在启动任务中被调用用于启动用户任务。用户可在启动钩子内调用API来启动用户任务。<br>
**3. 滴答钩子(tick_hook** 每个系统滴答周期在SysTick_Handler/定时器0中断中都会被调用一次适用于每滴答周期/秒/分/时/...做一次的工作。<br>
**4. 空闲钩子(idle_hook** 在系统空闲任务中被调用,用户可添加自己的代码做一些没有实时性要求的工作。<br>
**5. 挂起服务钩子pendsv_hook** 详情见全局变量访问相关介绍及说明。<br>
**6. 全局变量钩子gvar_hook** 用于更新全局变量的副本。详情见全局变量访问相关介绍及说明。<br>
**1. 初始化钩子init_hook** 在主函数中首先被调用适用于初始化时钟、GPIO、寄存器等工作。<br>
**2. 启动钩子start_hook** 在启动任务中被调用用于启动用户任务。用户可在启动钩子内调用API来启动用户任务。<br>
**3. 空闲钩子(idle_hook** 在系统空闲任务中被调用,用户可添加自己的代码做一些没有实时性要求的工作。<br>
**4. 滴答钩子(tick_hook** 每个系统滴答周期在SysTick_Handler/定时器0中断中都会被调用一次适用于每滴答周期/秒/分/时/...做一次的工作。<br>
**5. 挂起服务钩子pendsv_hook** 详情见全局变量访问相关介绍及说明。<br>
**6. 全局变量钩子gvar_hook** 用于更新全局变量的副本。详情见全局变量访问相关介绍及说明。<br>
* **定时任务/钩子** <br>
包括定时中断任务/钩子和定时查询任务/钩子,其实质都是软件定时器中断。<br>
**1. 定时中断任务/钩子** 由用户设定定时时间,当定时器溢出时,系统将自动恢复/调用与其绑定的任务/钩子并自动重复定时(如果您已开启定时器的自动重装载)。<br>
**2. 定时查询任务/钩子** 由用户设定定时时间,当定时器溢出后,系统在每个滴答周期都会查询用户定义的事件,若事件为真,系统将自动恢复/调用与其绑定的任务/钩子并自动重复定时(如果您已开启定时器的自动重装载)。系统初始化后,所有定时查询定时器的值均为零,相当于已经溢出,系统已经开始查询用户定义的事件了。<br>
**3. 任务与钩子的区别** 由于定时中断钩子、定时查询钩子都是在SysTick_Handler/定时器0中断中被调用所以只有相对精简的代码才适合创建钩子耗时长的代码应创建为任务。再有钩子相当于比任务具有更高的优先级可更及时的被执行。<br>
**任务与钩子的区别** 由于定时中断钩子、定时查询钩子都是在SysTick_Handler/定时器0中断中被调用所以只有相对精简的代码才适合创建钩子耗时长的代码应创建为任务。再有钩子相当于比任务具有更高的优先级可更及时的被执行。<br>
* **一般用户任务** <br>
对于一般用户任务只要优先级为0级就是空闲任务。用户空闲任务内都要有阻塞事件以保证所有空闲任务都有机会被运行。<br>