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.任务的组成
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.任务的组成
- 任务控制块、任务程序代码、任务堆栈
任务控制块:是一个结构体,用来记录任务的堆栈指针、任务的当前状态、任务优先级等属性;
任务的堆栈:保存任务的工作环境;
任务程序代码:任务的执行部分---功能函数;
总结:任务控制块可以用来管理每个任务的代码,系统就可以通过任务控制块了解任务的代码信息!
2.任务的状态
1.睡眠态:任务以代码形式存放在程序空间,没有让操作系统管理
2.就绪态:任务处于等待状态,等待运行的任务释放CPU
3.运行态:处于就绪状态的任务通过任务调度获得CPU的使用权,任务就进入运行状态--CPU正在执行的任务
4.等待态:正在运行的任务,需要一段时间再运行,CPU就会把任务使用权给别的任务,此时这个任务进入等待状态---任务由于等待被挂起
5.中断服务状态:运行的任务响应了中断,而去执行中断服务程序的状态;
- 创建一个任务---任务处于就绪态,删除任务,处于睡眠态
- 任务调度是始终执行就绪态中优先级最高的任务,使之成为运行态
- 任务在下一次运行前处于等待态,挂起时间到之后成为就绪态,也要经过任务调度决定是否执行
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.创建方法:
- 可在任务调度之前创建,也可以在任务运行中创建;
- 规定:启动任务函数前要创建一个起始任务---在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.流水灯