关于µC/OS-III 多任务的基本理解

本文详细介绍了µC/OS-III中的多任务系统、任务状态转换、优先级设定、抢占式和时间片调度,以及任务操作函数如任务堆栈管理和创建、删除、挂起与恢复。

关于µC/OS-III 多任务的基本理解

任务和任务管理是 RTOS 的核心,且大多数项目使用 RTOS 的目的就是为了使用 RTOS 的多任务管理能力。 µC/OS-III作为经典的RTOS,了解并学习其任务管理机制,是非常有必要的。



一、单任务系统和多任务系统

1.单任务系统

单任务系统就是在裸机上编程,一般都是在 main()函数初始化完成后使用一个while大循环,在循环中顺序地调用相应地函数以处理相应的事务,在while(1)循环中插入各种中断服务函数,整个逻辑顺序依次而行,所以我们也一般称为“流水账”编程方式。如下图所示:
在这里插入图片描述

可以看出,整个代码在while大循环中依次执行,其中部分地方插入点中断,这种框架的优势就是代码较易读,基本上函数调用的顺序就是整个软件各个模块的执行顺序;但是这种框架短板也非常明显,那就是对整个软件各个模块时效控制是很低的,没有轻重缓急之分,比如函数1是控制灯闪烁的函数,需要循环一圈才会调用一次,而且因为不知道函数2和函数2以及中断的执行时间,所以你也没法确定你的闪烁周期,如果删除或增加一个函数模块,你这个周期还会变。

2.多任务系统

多任务系统在处理事务的实时性上比单任务系统要好得多,从宏观上来看,多任务系统的多个任务是可以“并行”的,紧急的事务就可以提高优先级被CPU 优先处理。要注意的是,µC/OS-III 作为单核CPU上的操作系统,其实同一时刻CPU只能处理一个任务,所说的多任务并行其实是通过高效的任务调度算法合理分配各个任务占用CPU的时间,使得各个任务都会根据配置高效运行,所以看起来各个任务像是“并行”一样。如下图所示:
在这里插入图片描述
从上图可以看出,相较于单任务系统而言,多任务系统的任务是具有优先级的,高优先级的任务可以像中断的抢占机制一样,抢占低优先级任务的运行,从而获得 CPU 的使用权;各个任务时效也是可以根据配置参数进行配置的,整个系统的实时性和可控性大大提高。

二、 µC/OS-III 的任务状态

µC/OS-III 中任务存在五种状态,分别为休眠态、就绪态、运行态、挂起态和中断态,某一时刻一个任务一定是处于这五种状态中的一种, 整个µC/OS-III 中的五种任务状态之间的转换图如:
在这里插入图片描述
这是经典的µC/OS-III任务状态转换图,标准了五种不同任务状态的转化方式
■. 休眠态:通过函数 OSTaskDel()删除的任务就会回到休眠态,这里所说的删除,并非将任务从代码空间中删除,而仅仅是将任务切换到休眠态,让 µC/OS-III 内核不再管理这个任务,需要通过调用函数 OSTaskCreate()对一个处于休眠态的任务进行重新创建。
■. 就绪态:准备好运行但还未运行时的任务就处于就绪态。此时任务处于µC/OS-III 就绪列表OSRdylist[X] ,X表示任务优先级数值0-31(32位变量,由高位到低位依次排列)。
■. 运行态:对于单核 CPU 的 MCU 而言,就是是当前正在运行的且唯一的任务所处状态,称为运行态。
■. 挂起态:运行态任务因延时或等

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值