UCOS操作系统——任务管理(二)
UCOS操作系统
文章目录
- UCOS操作系统
- 前言
- 一、任务堆栈
- 1.创建任务堆栈
- 二、任务控制块
- 1.创建任务控制块
- 三、UCOSIII系统初始化
- 四、任务调度
- 1.可剥夺型任务调度
- 2.任务调度的上锁与解锁
- 3.时间片轮转调度
- 五、任务切换
前言
UCOSIII中的任务由三部分组成:任务堆栈、任务控制块和任务函数。
一、任务堆栈
任务堆栈是任务的重要部分,堆栈是在RAM中按照“先进先出(FIFO)”的原则组织的一块连续的存储空间。为了满足任务切换和响应中断时保存CPU寄存器中的内容及任务调用其它函数时的需要,每个任务都应该有自己的堆栈。
1.创建任务堆栈
#define START_STK_SIZE 512 //堆栈大小
CPU_STK START_TASK_STK[START_STK_SIZE]; //定义一个数组来作为任务堆栈
CPU_STK为CPU_INT32U类型,也就是unsigned int类型,为4字节的,那么任务堆栈START_TASK_STK的大小就为:512 X 4=2048字节!
二、任务控制块
1.创建任务控制块
任务控制块是用来记录与任务相关的信息的数据结构,每个任务都要有自己的任务控制块。任务控制块由用户自行创建
OS_TCB StartTaskTCB; //创建一个任务控制块
OS_TCB为一个结构体,描述了任务控制块,任务控制块中的成员变量用户不能直接访问,更不可能改变他们。
一个完整的创建 优先级 堆栈大小 任务控制块 任务堆栈 任务函数 和FreeRTOS其实是一样的
同一优先级下如果有多个任务的话最先运行的永远是HeadPtr所指向的任务!
三、UCOSIII系统初始化
第一步便是如何初始化UCOS,函数OSInit()用来完成UCOSIII的初始化,而且OSInit()必须先于其他UCOSIII函数调用,包括OSStart()。
int main(void)
{OS_ERR err;……//其他函数,一般为外设初始化函数……OSInit(&err);……//其他函数,一般为创建任务函数……OSStart(&err);
}
使用函数OSStart()来启动UCOSIII
四、任务调度
1.可剥夺型任务调度
任务调度就是中止当前正在运行的任务转而去执行其他的任务。
UCOSIII是可剥夺型内核,因此当一个高优先级的任务准备就绪,并且此时发生了任务调度,那么这个高优先级的任务就会获得CPU的使用权!
UCOSIII中的任务调度是由任务调度器来完成的,任务调度器有2种:任务级调度器和中断级调度器。
任务级调度器为函数OSSched()。
中断级调度器为函数OSIntExit(),当退出外部中断服务函数的时候使用中断级任务调度。
2.任务调度的上锁与解锁
有时候我们并不希望发生任务调度,因为始终有一些代码的执行过程是不能被打断的。此时我们就可以使用函数OSSchedLock()对调度器加锁,当我们想要恢复任务调度的时候就可以使用函数OSSchedUnlock()给已经上锁的任务调度器解锁
3.时间片轮转调度
UCOSIII允许一个优先级下有多个任务,每个任务可以执行指定的时间(时间片),然后轮到下一个任务,这个过程就是时间片轮转调度,当一个任务不想在运行的时候就可以放弃其时间片。
时间片轮转调度器为:OS_SchedRoundRobin()。
五、任务切换
当UCOSIII需要切换到另外一个任务时,它将保存当前任务的现场到当前任务的堆栈中,主要是CPU寄存器值,然后恢复新的现场并且执行新的任务,这个过程就是任务切换。
任务切换分为两种:任务级切换和中断级切换。
任务级切换函数为:OSCtxSw()。
中断级切换函数为:OSIntCtxSw()。
UCOS操作系统——任务管理(二)相关推荐
- UCOS操作系统——信号量与互斥信号量(九)
UCOS操作系统 文章目录 UCOS操作系统 一.信号量简介 1.二进制信号量 2.计数型信号量 二.使用信号量 1.相关API函数 2.OSSemCreate()创建信号量 3.OSSemPend( ...
- UCOS操作系统——事件标志组(十四)
UCOS操作系统 文章目录 UCOS操作系统 前言 一.事件标志组 二.相关函数 1.创建事件标志组 2. 等待事件标志组 3.向事件标志组发布标志 三.事件标志组实验 前言 前面我们提到过可以使用信 ...
- 基于stm32的BMS电池管理系统源代码-带u基于stm32的BMS电池管理系统源代码-带ucos操作系统
企业级基于stm32的BMS电池管理系统源代码-带u基于stm32的BMS电池管理系统源代码-带ucos操作系统,代码整齐规范,企业级别 YID:129652995742054咸鱼的鱼
- ucos II任务管理之一:挂起任务
Ucos II 任务管理之一 创建好了任务之后,就已经初步跨进了ucos II 的编程了.随着进一步的编程,发现学会创建了任务还是不够的. 在我的项目里,需要实现485通信功能,我创建了任务1用于串口 ...
- ucos II任务管理之三:删除任务
ucos II任务管理之三:删除任务 有了前面的经历之后,mcu21决定全面地学习了任务的管理.这样在项目编程中才能做到"信手拈来". 在ucos II 里,创建一个任务之后,可以 ...
- 操作系统实验二:物理内存管理系统
操作系统实验二:物理内存管理系统 一. 实验目的 二. 实验内容 三. 实验准备 [实验概述] [关键数据结构] [执行流程] 四. 实验步骤 (一) 练习0:填写已有实验 (二) 练习1:实现 fi ...
- 广州大学2020操作系统实验二:银行家算法
相关资料 广州大学2020操作系统实验一:进程管理与进程通信 广州大学2020操作系统实验二:银行家算法 广州大学2020操作系统实验三:内存管理 广州大学2020操作系统实验四:文件系统 广州大学2 ...
- STM32学习之ucos操作系统
ucos操作系统是一种实时的嵌入式操作系统,特点是源码公开,可移植,可固化,可裁剪,多任务,任务栈等等,我们想要使用ucos操作系统需要根据自己的芯片内核还有型号来下载不同版本的操作系统源码,并且移植 ...
- 初识ucos操作系统-----基于freescale K60硬件平台的ucos-ii的移植
先给自己打个广告,本人的微信公众号正式上线了,搜索:张笑生的地盘,主要关注嵌入式软件开发,股票基金定投,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题,二维码如下: 一 ...
- 实时操作系统---任务管理
目录 系列文章目录 前言 一.任务的创建 二.任务的栈空间 三.任务的挂起和恢复 1.挂起任务 2.恢复任务 四.删除任务 系列文章目录 第一章裸机系统与操作系统 第二章操作系统分类 第三章实时操作系 ...
最新文章
- 推荐八款来自极客标签的超棒前端特效[第八期]
- 2017春季华为实习生编程题
- 对待棘手bug,新手与大牛的差距在哪里?
- python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...
- e.target 和 e.srcElement 的使用问题
- docker删除镜像、容器命令
- Java并发编程 ReentrantLock 源码分析
- 白素雅 中国科学院大学 计算机应用技术,张玉清 - 中国科学院大学 - 计算机科学与技术学院...
- java azure blobs sas_仅使用SAS令牌连接到Azure存储帐户?
- 软考中级——数据库系统工程师
- 海思烧录工具Hitool使用方法
- 英伟达显卡最新驱动安装过程
- Css中路径data:image/png;base64的用法详解与操作
- ATmega16 单片机 AVR单片机 自动计价电子秤
- 马太效应 (两极分化现象)
- Java版Spring Cloud B2B2C o2o鸿鹄云商平台--概述
- hadoop完全分布式教程网页
- 有效防御DDOS的八规则
- 就聊聊不少小IT公司的技术总监
- Immanuel Kant and Russell