ucosIII学习笔记

ucosIII学习笔记

任务的概念:在UCOSIII中任务就是程序实体,UCOSIII能够管理和调度这些小任务(程序)。
ucosIII中的任务一共有三个要素:a.任务堆栈b.任务控制块;c.任务函数所以在编写任务的时候,
上述三个要素缺一不可。
首先需要定义任务堆栈,
然后顶一个任务控制块的变量,
其次定义任务函数名称。

任务堆栈:在上下文或者任务切换的过程中,用来保存任务的工作环境,就是STM32内部寄存器值。

任务控制块:任务控制块用来记录任务的各个属性。

任务函数:由用户编写的任务处理代码,为实实在在干活的一般任务函数的写法如下:
void XXX_task(void *p_arg)
{
while(1)
{
。。。。。//任务处理过程
}
}

任务的参数是一个void类型的,这么做的目的是可以可以传递不同类型的数据甚至是函数在使用UCOIII的情况下这个函数不能有用户自行调用,任务函数何时执行执行,何时停止完全有操作系统来控制。

UCOSIII中默认的5个任务:
1、空闲任务:UCOSIII创建的第一个任务,UCOSIII必须创建的任务,此任务有UCOSIII自动创建,不需要用户手动创建。
2、时钟节拍任务:此任务也是必须创建的任务。
3、统计任务:可选任务,用来统计CPU使用率和各个任务的堆栈使用量。此任务是可选任务,由宏OS_CFG_STAT_TASK_EN控制是否使用此任务。
4、定时任务:用来向用户提供定时服务,也是可选任务,由宏OS_CFG_TMR_EN控制是否使用此任务。
5、中断服务管理任务:可选任务,由宏OS_CFG_ISR_POST_DEFERRED_EN控制是否使用此任务。

任务在UCOSIII中一共有五种状态:
1.休眠状态–表示该任务仅是以任务函数的方式存在,仅仅为存储在存储中的一段代码,没有通过OSTaskCreate()函数创建这个任务,并没有收到UCOSIII的管理,也就是代码已经写好了,但是UCOS没有控制
2.就绪状态–表示此任务已经OSTaskCreate()函数创建这个任务,等待获取CPU使用权。系统为任务分配了任务控制块,并且任务已经在就绪表中登记,这时这个任务就具有了运行的条件,此时任务的状态就是就绪态。
3.运行状态–正在运行的任务函数,已经取得CPU使用权
4.等待状态–正在运行的任务需要等待一个事件,比如:信号量,消息,事件标志组等,然后正在运行的状态放弃CPU使用权,从而进入就绪状态
5.中断状态–一个正在执行的任务被中断打断,CPU转而执行中断服务程序,这个任务被挂起,进入中断状态

5种状态之间的转换任务控制块的概念:
每个任务都有一个单独的任务控制块,用来保存当前任务的所有信息,任务控制块是一个结构体,内部包含了此任务的所有信息

任务堆栈的概念:任务堆栈是任务的重要部分,堆栈是在RAM中按照“先进先出(FIFO)”的原则组织的一块连续的存储空间。
为了满足任务切换和响应中断时保存CPU寄存器中的内容及任务调用其它函数时的需要,每个任务都应该有自己的堆栈。
任务如何切换至上一次任务并且接着从上次任务的被中断的地方执行呢?恢复现场即可,现场即CPU内部各个寄存器的值。所以在创建任务的时候必须定义一个任务堆栈。把系统启动这个任务时所需的CPU各个寄存器初始值事先存放在任务堆栈中。这样当任务获得CPU使用权时,就把任务堆栈的内容复制到CPU的各个寄存器,从而可以任务顺利地启动并运行。

任务堆栈初始化:把任务初始数据存放到任务堆栈的工作就叫做任务堆栈的初始化,UCOSIII提供了完成堆栈初始化的函数:OSTaskStkInit()。用户不需要进行堆栈函数的初始化,此部分在我们调用任务创建函数任务OSTaskCreate()中已经进行的堆栈的初始化(备注:不同的CPU堆栈初始化的方式不一致,一般在移植的过程中需要根据CPU的类型编写任务堆栈初始化)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值