mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-05 19:39:42 +08:00
@@ -35,17 +35,17 @@ CosyOS有三种时间片的定义模式,全局时间片、算法时间片、
|
||||
|
||||
* **系统钩子** <br>
|
||||
由CosyOS自主创建并自动调用的函数,并由用户来写代码。<br>
|
||||
**初始化钩子(init_hook)** 在主函数中首先被调用,适用于初始化时钟、GPIO、寄存器等工作。<br>
|
||||
**启动钩子(start_hook)** 在启动任务中被调用,用于启动用户任务。用户可在启动钩子内调用API来启动用户任务。<br>
|
||||
**空闲钩子(idle_hook)** 在系统空闲任务中被调用,用户可添加自己的代码做一些没有实时性要求的工作。<br>
|
||||
**滴答钩子(tick_hook)** 每个系统滴答周期,在系统滴答中断中都会被调用一次,适用于每滴答周期/秒/分/时/...做一次的工作。<br>
|
||||
**挂起服务钩子(pendsv_hook)** 详情见全局变量访问相关介绍及说明。<br>
|
||||
**全局变量钩子(gvar_hook)** 用于更新全局变量的副本。详情见全局变量访问相关介绍及说明。<br>
|
||||
**1、初始化钩子(init_hook)** 在主函数中首先被调用,适用于初始化时钟、GPIO、寄存器等工作。<br>
|
||||
**2、启动钩子(start_hook)** 在启动任务中被调用,用于启动用户任务。用户可在启动钩子内调用API来启动用户任务。<br>
|
||||
**3、空闲钩子(idle_hook)** 在系统空闲任务中被调用,用户可添加自己的代码做一些没有实时性要求的工作。<br>
|
||||
**4、滴答钩子(tick_hook)** 每个系统滴答周期,在系统滴答中断中都会被调用一次,适用于每滴答周期/秒/分/时/...做一次的工作。<br>
|
||||
**5、挂起服务钩子(pendsv_hook)** 详情见全局变量访问相关介绍及说明。<br>
|
||||
**6、全局变量钩子(gvar_hook)** 用于更新全局变量的副本。详情见全局变量访问相关介绍及说明。<br>
|
||||
|
||||
* **定时任务/钩子** <br>
|
||||
包括定时中断任务/钩子和定时查询任务/钩子,其实质都是软件定时器中断。<br>
|
||||
**定时中断任务/钩子** 由用户设定定时时间,当定时器溢出时,系统将自动恢复/调用与其绑定的任务/钩子并自动重复定时(如果您已开启定时器的自动重装载)。<br>
|
||||
**定时查询任务/钩子** 由用户设定定时时间,当定时器溢出后,系统在每个滴答周期都会查询用户定义的事件,若事件为真,系统将自动恢复/调用与其绑定的任务/钩子并自动重复定时(如果您已开启定时器的自动重装载)。系统初始化后,所有定时查询定时器的值均为零,相当于已经溢出,系统已经开始查询用户定义的事件了。<br>
|
||||
**1、定时中断任务/钩子** 由用户设定定时时间,当定时器溢出时,系统将自动恢复/调用与其绑定的任务/钩子并自动重复定时(如果您已开启定时器的自动重装载)。<br>
|
||||
**2、定时查询任务/钩子** 由用户设定定时时间,当定时器溢出后,系统在每个滴答周期都会查询用户定义的事件,若事件为真,系统将自动恢复/调用与其绑定的任务/钩子并自动重复定时(如果您已开启定时器的自动重装载)。系统初始化后,所有定时查询定时器的值均为零,相当于已经溢出,系统已经开始查询用户定义的事件了。<br>
|
||||
**任务与钩子的区别** 由于定时中断钩子、定时查询钩子都是在SysTick_Handler/定时器0中断中被调用,所以只有相对精简的代码才适合创建钩子,耗时长的代码应创建为任务。再有,钩子相当于比任务具有更高的优先级,可更及时的被执行。<br>
|
||||
|
||||
* **一般用户任务** <br>
|
||||
@@ -60,14 +60,14 @@ CosyOS的任务状态较传统RTOS划分更为详细,以便用户在使用任
|
||||
* **就绪状态[RDY]** 任务已经准备就绪,可以参与任务调度并运行了。<br>
|
||||
* **延时阻塞状态[DLY]** 由阻塞延时而导致任务进入阻塞状态,直到延时时间结束转为就绪状态。<br>
|
||||
* **超时阻塞状态** <br>
|
||||
**二值信号量阻塞状态[BIN]** 由二值信号量等待或获取而导致任务进入阻塞状态,直到成功或超时转为就绪状态。<br>
|
||||
**互斥信号量阻塞状态[MUT]** 由互斥信号量获取而导致任务进入阻塞状态,直到成功或超时转为就绪状态。<br>
|
||||
**计数信号量阻塞状态[SEM]** 由计数信号量获取而导致任务进入阻塞状态,直到成功或超时转为就绪状态。<br>
|
||||
**等待标志组阻塞状态[GRP]** 由事件标志组等待而导致任务进入阻塞状态,直到成功或超时转为就绪状态。<br>
|
||||
**接收私信阻塞状态[ TM]** 由接收私信而导致任务进入阻塞状态,直到收到私信或超时转为就绪状态。<br>
|
||||
**接收飞信阻塞状态[FET]** 由接收飞信而导致任务进入阻塞状态,直到收到飞信或超时转为就绪状态。<br>
|
||||
**接收邮件阻塞状态[MAL]** 由接收邮件而导致任务进入阻塞状态,直到收到邮件或超时转为就绪状态。<br>
|
||||
**接收消息阻塞状态[MSG]** 由接收消息而导致任务进入阻塞状态,直到收到消息或超时转为就绪状态。<br>
|
||||
**1、二值信号量阻塞状态[BIN]** 由二值信号量等待或获取而导致任务进入阻塞状态,直到成功或超时转为就绪状态。<br>
|
||||
**2、互斥信号量阻塞状态[MUT]** 由互斥信号量获取而导致任务进入阻塞状态,直到成功或超时转为就绪状态。<br>
|
||||
**3、计数信号量阻塞状态[SEM]** 由计数信号量获取而导致任务进入阻塞状态,直到成功或超时转为就绪状态。<br>
|
||||
**4、等待标志组阻塞状态[GRP]** 由事件标志组等待而导致任务进入阻塞状态,直到成功或超时转为就绪状态。<br>
|
||||
**5、接收私信阻塞状态[ TM]** 由接收私信而导致任务进入阻塞状态,直到收到私信或超时转为就绪状态。<br>
|
||||
**6、接收飞信阻塞状态[FET]** 由接收飞信而导致任务进入阻塞状态,直到收到飞信或超时转为就绪状态。<br>
|
||||
**7、接收邮件阻塞状态[MAL]** 由接收邮件而导致任务进入阻塞状态,直到收到邮件或超时转为就绪状态。<br>
|
||||
**8、接收消息阻塞状态[MSG]** 由接收消息而导致任务进入阻塞状态,直到收到消息或超时转为就绪状态。<br>
|
||||
* **浮动状态[RDY]** <br>
|
||||
浮动状态是临时的就绪状态。<br>
|
||||
超时阻塞的任务,当阻塞条件解除时,会转为浮动状态;<br>
|
||||
@@ -80,8 +80,8 @@ CosyOS的任务状态较传统RTOS划分更为详细,以便用户在使用任
|
||||
运行状态的任务被挂起,恢复后为就绪状态;其它状态的任务被挂起,恢复后为原状态。<br>
|
||||
* **停止状态** <br>
|
||||
任务停止运行,不可恢复。<br>
|
||||
**任务栈溢出停止[!OF]** 由任务栈溢出而导致任务停止运行。<br>
|
||||
**任务栈重分配失败停止[!RF]** 由任务栈重分配失败而导致任务停止运行。<br>
|
||||
**1、任务栈溢出停止[!OF]** 由任务栈溢出而导致任务停止运行。<br>
|
||||
**2、任务栈重分配失败停止[!RF]** 由任务栈重分配失败而导致任务停止运行。<br>
|
||||
* **删除/未启动状态(Deleted)** <br>
|
||||
任务被删除或未启动,若想再次运行该任务,必须重新启动该任务。<br>
|
||||
|
||||
@@ -92,10 +92,10 @@ CosyOS的任务状态较传统RTOS划分更为详细,以便用户在使用任
|
||||
CosyOS全局只有一个任务队列,为双向循环链表,所有已启动且未删除的任务,都会在队列上排队。<br>
|
||||
|
||||
* **排队原则** <br>
|
||||
**1、** 在队列上从头至尾,按任务优先级由大到小排列。<br>
|
||||
**2、** 如果任务优先级相同,则按任务启动顺序排列(先启动的任务排在前面)。<br>
|
||||
**3、** 如果启用了任务管理器,那它一定是任务队列上的第一个任务(头节点)。<br>
|
||||
**4、** 唯一的例外,系统空闲任务是任务队列上的最后一个任务(尾节点),其它所有任务都会排在它的前面。<br>
|
||||
**1、** 在队列上从头至尾,按任务优先级由大到小排列。<br>
|
||||
**2、** 如果任务优先级相同,则按任务启动顺序排列(先启动的任务排在前面)。<br>
|
||||
**3、** 如果启用了任务管理器,那它一定是任务队列上的第一个任务(头节点)。<br>
|
||||
**4、** 唯一的例外,系统空闲任务是任务队列上的最后一个任务(尾节点),其它所有任务都会排在它的前面。<br>
|
||||
|
||||
CosyOS任务管理器真实的反应了整个任务队列的当前形态。<br>
|
||||
其中任务ID(TID)是按任务的启动顺序动态分配的(从1开始++),真实的反应了任务的启动顺序。<br>
|
||||
|
||||
Reference in New Issue
Block a user