从零开始一起学stm32(十三)---UCOS-II实时操作系统

1.UCOS-II的概述

2.UCOS-II的移植

3.ucos-ii任务管理

4.ucos-ii中断和时间管理

5.任务之间的通信与同步

 

1.操作系统:

1.计算机操作系统

1.什么是裸机,什么是计算机系统,操作系统的功能和作用?

1.嵌入式系统

什么是嵌入式系统,嵌入式系统的特点

2.嵌入式操作系统

什么是嵌入式操作系统,特点

3.实时操作系统

什么是实时操作系统,特点

 

2.UCOS-II简介

3.UCOS-II移植

4.UCOS中的任务

1.任务的组成

扫描二维码关注公众号,回复: 11347213 查看本文章

2.任务的状态

3.任务的分类

4.任务的代码结构

5.任务的优先级

6.任务的堆栈

5.任务的创建

1.任务创建函数

2.任务创建方法

6.任务的挂起和恢复

7.任务的初始化和启动

 

UCOS-II的简介:

 1.ucos-ii是一个嵌入式多任务实时操作系统;

 2.特点:

  1.公开源代码

  2.可移植性好

    1.绝大部分ucos-ii的源码是用 C语言编写的

    2.与底层微处理器(CPU)硬件相关的代码,用汇编编写。

  3.可裁剪

    可以根据系统程序的功能来进行裁剪ucos(不用的功能可以直接删掉)

  4.占先式(抢占式)--可剥夺型

    不是每个任务都是平均分配CPU时间,而是那个任务优先级高,就执行那个任务

  5.支持多任务

ucos-ii可以管理64个任务

  6.任务栈

    每个任务都拥有自己单独的栈,在任务调度时,把任务的信息入栈

 

任务的管理:

1.任务的组成

  1. 任务控制块、任务程序代码、任务堆栈

任务控制块:是一个结构体,用来记录任务的堆栈指针、任务的当前状态、任务优先级等属性;

任务的堆栈:保存任务的工作环境;

任务程序代码:任务的执行部分---功能函数;

 

总结:任务控制块可以用来管理每个任务的代码,系统就可以通过任务控制块了解任务的代码信息! 

2.任务的状态

1.睡眠态:任务以代码形式存放在程序空间,没有让操作系统管理

2.就绪态:任务处于等待状态,等待运行的任务释放CPU

3.运行态:处于就绪状态的任务通过任务调度获得CPU的使用权,任务就进入运行状态--CPU正在执行的任务

4.等待态:正在运行的任务,需要一段时间再运行,CPU就会把任务使用权给别的任务,此时这个任务进入等待状态---任务由于等待被挂起

5.中断服务状态:运行的任务响应了中断,而去执行中断服务程序的状态;

  1. 创建一个任务---任务处于就绪态,删除任务,处于睡眠态
  2. 任务调度是始终执行就绪态中优先级最高的任务,使之成为运行态
  3. 任务在下一次运行前处于等待态,挂起时间到之后成为就绪态,也要经过任务调度决定是否执行

 

3.任务的分类

系统任务和用户任务

用户任务代码结构:

1.用户执行代码是一个while循环结构,在循环中可以响应中断;

2.任务就是一个C语言编写的函数,是由操作系统进行调度执行的;

3.main函数:程序运行的入口,负责创建任务,去让系统进行调度;

4.任务的优先级

按照优先级的抢占式规则:优先级高的任务先运行,低的任务后运行;

UCOS-II特性:实时操作系统,永远先执行就绪态里面优先级最高的任务!

每个任务都有一个唯一的优先级编号---类比中断号;

最多只能创建64个任务--64个优先级:0~63

系统保留了几个优先级:0、1、2、3 、OS_LOWEST_PRIO - 3、OS_LOWEST_PRIO - 2、OS_LOWEST_PRIO - 1 、OS_LOWEST_PRIO

5.任务的堆栈

栈是一种只能在一端进行操作的结构,能操作那一端为栈顶

数据存储:先进后出,连续存储

当调用OSTaskCreate()创建一个任务时,把数组的指针传递给函数中的堆栈栈顶参数ptos,就可以把数组与任务关联起来而称为该任务的堆栈了。

6.任务就绪表

每个任务的就绪态标志放入就绪表中,就绪表中有两个变量OSRdyGrp和OSRdyTbl[]

在OSRdyGrp中,任务按优先级分组,8个任务为一组,OSRdyGrp中的每一位表示8组任务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪表OSRdyTbl[]中的相应元素的相应位也置位。

系统对于就绪表主要有三个操作:登记、注销和从就绪表的就绪任务中得知具有最高优先级任务的标识(优先级prio)

 

7.任务管理的系统服务函数

1.任务的创建

1.调用函数:OSTaskCreate();

创建一个任务控制块把任务代码和任务堆栈形成一个完整的任务,让刚创建的任务进入就绪态,从而引发一次任务调度;

OSTaskSktInit()---初始化任务堆栈

OSTCBInit()---初始化任务控制块

2.创建方法:

  1. 可在任务调度之前创建,也可以在任务运行中创建;
  2. 规定:启动任务函数前要创建一个起始任务---在main函数里,当运行这个任务时再创建其他任务

 

2.任务挂起和恢复

1.任务的挂起:停止这个任务运行;

调用函数:OSTaskSuspend()

挂起自身任务或者其他任务

2.任务的恢复:任务从挂起状态恢复为就绪状态

调用函数:OSTaskResume()

挂起的任务在其他任务里,通过函数OSTaskResume()使其恢复为就绪状态

3.UCOS-II的初始化

调用系统服务函数之前,必须调用UCOS-II的初始化函数OSInit()对UCOS-II运行环境初始化

作用:对UCOS-II的所有全局变量和数据结构进行初始化,同时创建空闲任务

4.UCOS-II的启动

任务的管理和调度是通过调用启动函数OSStart()函数开始;调用了启动函数,系统就进入多任务管理阶段

 

总结:
   1.系统的任务管理====初始化系统+起始任务(至少是)+系统的启动

   2.创建任务:2种方式

   3.创建任务步骤:

  1.明确任务的作用---编写任务操作函数

  2.开辟任务堆栈大小---  一般是定义数组

  3.确定任务的优先级

 

 

作业:

创建一个多任务操作

1.流水灯

猜你喜欢

转载自blog.csdn.net/qq_38639426/article/details/88633458