第一章:UCOSIII的特点、任务管理、5个任务状态

一、 UCOSIII  特点
      UCOSIII 是一个可裁剪、可固化、可剥夺的多任务系统,没有任务数目的限制,是 UCOS的第三代内核,UCOSIII 有以下几个重要的特性:

  1. 可剥夺多任务管理:UCOSIII 和 UCOSII 一样都属于可剥夺的多任务内核,总是执行当前就绪的最高优先级任务。
  2. 同优先级任务的时间片轮转调度:这个是 UCOSIII 和 UCOSII 一个比较大的区别,UCOSIII允许一个任务优先级被多个任务使用,当这个优先级处于最高就绪态的时候,UCOSIII 就会轮流调度处于这个优先级的所有任务,让每个任务运行一段由用户指定的时间长度,叫做时间片。
  3. 极短的关中断时间: UCOSIII 可以采用锁定内核调度的方式而不是关中断的方式来保护临界段代码,这样就可以将关中断的时间降到最低,使得 UCOSIII 能够非常快速的响应中断请求。
  4. 任务数目不受限制:UCOSIII 本身是没有任务数目限制的,但是从实际应用角度考虑,任务数目会受到 CPU 所使用的存储空间的限制,包括代码空间和数据空间。
  5. 优先级数量不受限制:UCOSIII 支持无限多的任务优先级。
  6. 内核对象数目不受限制:UCOSIII 允许定义任意数目的内核对象。内核对象指任务、信号量、互斥信号量、事件标志组、消息队列、定时器和存储块等。
  7. 软件定时器:用户可以任意定义“单次”和“周期”型定时器,定时器是一个递减计数器,递减到零就会执行预先定义好的操作。每个定时器都可以指定所需操作,周期型定时器在递减到零时会执行指定操作,并自动重置计数器值。
  8. 同时等待多个内核对象:UCOSIII 允许一个任务同时等待多个事件。也就是说,一个任务能够挂起在多个信号量或消息队列上,当其中任何一个等待的事件发生时,等待任务就会被唤醒。
  9. 直接向任务发送信号:UCOSIII 允许中断或任务直接给另一个任务发送信号,避免创建和使用诸如信号量或事件标志等内核对象作为向其他任务发送信号的中介,该特性有效地提高了系统性能。
  10. 直接向任务发送消息:UCOSIII 允许中断或任务直接给另一个任务发送消息,避免创建和使用消息队列作为中介。
  11. 任务寄存器:每个任务都可以设定若干个“任务寄存器”,任务寄存器和 CPU 硬件寄存器是不同的,主要用来保存各个任务的错误信息,ID 识别信息,中断关闭时间的测量结果等。
  12. 任务级时钟节拍处理:UCOSIII 的时钟节拍是通过一个专门任务完成的,定时中断仅触发该任务。将延迟处理和超时判断放在任务级代码完成,能极大地减少中断延迟时间。
  13. 防止死锁:所有 UCOSIII 的“等待”功能都提供了超时检测机制,有效地避免了死锁。
  14. 时间戳:UCOSIII 需要一个 16 位或 32 位的自由运行计数器(时基计数器)来实现时间测量,在系统运行时,可以通过读取该计数器来测量某一个事件的时间信息。例如,当 ISR 给任务发送消息时,会自动读取该计数器的数值并将其附加在消息中。当任务读取消息时,可得到该消息携带的时标,这样,再通过读取当前的时标,并计算两个时标的差值,就可以确定传递这条消息所花费的确切时间。

二、任务管理

1、 UCOSIII  启动和初始化
在使用 UCOSIII 的时候我们要按照一定的顺序初始化并打开 UCOSIII,我们可以按照下面的顺序:

  • 先调用 OSInit(&err); 函数初始化 UCOSIII。(必须在调用其他UCOSIII的API函数之前调用)       

 2、创建任务,一般我们在 main()函数中只创建一个 start_task 任务,其他任务都在 start_task任务中创建,在调用OSTaskCreate()函数创建任务的时候一定要调用 OS_CRITICAL_ENTER()函数进入临界区,任务创建完以后调用 OS_CRITICAL_EXIT()函数退出临界区。

3、最后调用 OSStart(&err)函数开启 UCOSIII。

注意:我们在调用 OSStart()开启 UCOSIII 之前一定要至少创建一个任务,其实我们在调用OSInit()函数初始化 UCOSIII 的时候已经创建了一个空闲任务。

三、任务状态

UCOSIII 支持的是单核 CPU,不支持多核 CPU,这样在某一时刻只有一个任务会获得 CPU 使用权进入运行态,其他的任务就会进入其他状态,UCOSIII 中的任务有多个状态,如下表 所示。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值