UCOSIII任务管理

本文详细介绍了UCOSIII操作系统启动和初始化的过程,包括调用CPU_Init()、创建任务及使用OS_CRITICAL_ENTER()和OS_CRITICAL_EXIT()保护临界区。在开始UCOSIII前,至少需要创建一个任务,如start_task。任务切换由OS_TASK_SW()宏实现,该宏在os_cpu.h中定义,并在os_cpu_a.asm中以汇编代码形式完成,负责保存和恢复任务的CPU寄存器状态。
摘要由CSDN通过智能技术生成
多任务操作系统最主要的就是对任务的管理,包括任务的创建、挂起、删除和调度等。UCOSIII任务管理主要包括下面几个部分:
1.UCOSIII启动和初始化
2.任务状态
3.任务控制块
4.任务堆栈
5.任务就绪表
6.任务调度和切换

UCOSIII启动和初始化
在使用UCOSIII的时候要按照一定的顺序初始化并打开UCOSIII:
·调用CPU_Init()初始化UCOSIII
·创建任务,一般我们在main()函数中只创建一个start_task任务,其他任务都在start_task创建,在调用OSTaskCreate()函数创建任务的时候一定要调用OS_CRITICAL_ENTER()函数进入临界区,任务创建完成后调用OS_CRITICAL_EXIT()函数退出临界区。
·最后调用OSStart()函数开启UCOSIII
注意:我们在调用OSStart()开启UCOSIII之前一定要至少创建一个任务,其实我们在调用OSInit()函数初始化UCOSIII的时候已经创建了一个空闲任务。

UCOSIII的任务状态
UCOSIII支持的是单核CPU,不支持多核CPU,这样在某一时刻只有一个任务会获得CPU使用权进入运行态,其他的任务就会进去其他状态,UCOSIII中的任务有多个状态。在UCOSIII中任务可以再这个5个状态中转换。
休眠态:休眠态就是任务以任务函数的方式存在,只是储存区的一段代码,并未用OSTaskCreate()函数创建这个任务,不受UCOSIII管理的。
就绪态:任务在就绪表中已经登记,等待获取CPU使用权。
运行态:正在运行的任务就处于运行态。
等待态:正在运行的任务需要等待某一个事件,比如信号量、消息、事件标志组等,就会暂时让出CPU使用权进入等待时间状态。
中断服务态:一个正在执行的任务被中断打断,CPU转而执行中断服务程序,这是这个任务就会被挂起,进入中断服务态。
![UCOSIII任务状态转换图](https://img-blog.csdn.net/20160802133509511)

UCOSIII任务控制模块
我们使用OSTaskCreate()函数来创建任务的时候就会给任务分配一个任务控制块。任务控制块是一个结构体,这个结构体如下:
void  OSTaskCreate (OS_TCB        *p_tcb,
                CPU_CHAR      *p_name,
                OS_TASK_PTR    p_task,
                void          *p_arg,
                OS_PRIO        prio,
                CPU_STK       *p_stk_base,
                CPU_STK_SIZE   stk_limit,
                CPU_STK_SIZE   stk_size,
                OS_MSG_QTY     q_size,
                OS_TICK        time_q
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值