从零开始一起学stm32(十三) |
您所在的位置:网站首页 › stm32实时操作系统rtx5官方例程 › 从零开始一起学stm32(十三) |
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.流水灯 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |