uCOS-Ⅱ复习资料

合集下载

ucos-II-任务通信与同步

ucos-II-任务通信与同步

任务的同步与一个通信初解操作系统就像就像一个好的家长,控制着资源的公平分配应用程序中的各个任务,必须通过彼此之间的有效合作,才能完成一项大规模的工作。

因为这些任务在运行时,经常需要相互无冲突地访问一个共享资源,或者需要相互支持和依赖,甚至有时候还需要互相加以必要的制约,才能保证任务的顺利进行。

因此操作系统必须具有对任务运行进行协调的能力,从而使任务之间可以无冲突,流畅的同步运行,而不致导致灾难性的后果。

这与人们依靠通信来相互沟通,从而使人际关系和谐,工作顺利的做法是一样的,计算机系统依靠任务间的良好通信来保证任务与任务的同步。

任何为任务所占用的实体都可以称为资源。

资源可以是输入输出设备,比如打印机,键盘显示器,资源也可以是一个变量,一个结构或者是一个数组。

1任务的同步和事件嵌入式系统中的各个任务是为同一个大的任务服务的子任务,他们不可避免的要共同使用一些资源,并且在处理一些需要多个任务共同协同来完成的工作时,还需要相互的支持和限制。

因此,对一个完善的多任务操作系统来说,系统必须具有完备的同步和通信机制任务的同步:为了实现各个任务之间的合作和无冲突的运行,在各个任务之间必须建立一些制约关系。

其中一种制约关系叫做直接制约关系,另一种制约关系叫做间接制约关系直接制约关系来自任务的合作:例如,有任务A和任务B两个任务,他们需要通过访问同一个数据缓冲区合作完成一项工作,任务A负责向缓冲区写入数据,任务B负责向缓冲区读取该数据。

显然,当任务A还未向缓冲区写入数据时(缓冲区为空时),任务B因不能从缓冲区得到有效地数据而应处于等待状态;只有等任务A向缓冲区写入了数据之后,才应该通知任务B去读取数据。

相反,当缓冲区的数据还未被任务B读取时(缓冲区为满时),任务A就不能向缓冲区写入新的数据而应该处于等待状态;只有当任务B自缓冲区读取数据后,才应该通知任务A写入数据。

显然,如果这两个任务不能如此协调工作,将势必造成严重的后果。

ucOS-II入门教程(任哲) 我见过的讲得最好的RTOS讲解ppt

ucOS-II入门教程(任哲) 我见过的讲得最好的RTOS讲解ppt

应用:通讯录中的一条记录、
操作系统中经常使用 的数据结构(链表)
struct Student{ Student*next int age; char*name; char sex; };
两个元素的链表
next next
使用上的特点: 1。同数据类型数据的集合; 2。不占用连续内存空间。
1。分类存放,但 需要大量的连续存 2。检索速度慢, 定;
处理器中的运行环境和内存中的运行环境任务代码任务堆栈内存处理器pcsp多任务时的问题任务代码任务堆栈内存任务代码任务堆栈当有多个任务时处理器中的运行环境应该怎寄存器组程序运行环境程序虚拟处理器pcsp虚拟处理器pcsp虚拟处理器pcsp虚拟处理器pcsp调度器多任务时任务与处理器之间关系的处理程序处理器pcsp在内存中为每个任务创建一个虚拟的处理器处理器部分的运行环境由操作系统的调度器按某种规则来进行这两个复制工作复制当需要运行某个任务时就把该任务的虚拟处理器复制到实际处理器中复制当需要中止当前任应的虚拟处理器复制到内存复制再把另一个需要运行的任务的虚拟处理器复制到实寄存器组寄存器组也就是说任务的切换是任务虚拟处理器虚拟处理器应该存储的主要信息
1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0
3
4 5 6 7 y
1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0
1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0
应用软件 操 作 系 统
用户可以调用(普 •通过提供函数(应用程序接 通调用或系统调用) 口(API)),从而使应用程 它们来对系统资源 序的设计人员得以在一个友 好的平台上进行应用程序的 进行操作。

第2章 μCOS与μCOS-II的任务part1

第2章 μCOS与μCOS-II的任务part1

学时:9.0学时 教学方法:讲授ppt+上机练 习+点评+案例分析
2
2.1 uC/OS简介
uC/OS是Jean J. Labrosse开发的一个高度可移植的实 时 操作系统。
uC/OS是一种基于优先级的可抢先的硬实时内核。 它是一种专门为嵌入式设备设计的内核。
3
2.1.1 关于RTOS
18
2.2.5 系统任务之统计任务(续)
void main (void) {
OSInit();
… …
// 初始化uC/OS-II
/* 创建用户起始任务(以TaskStart()作为起始任务,也可以创建多个任务)*/ OSStart(); } void TaskStart (void *pdata) { /* 在这里安装并启动uC/OS-II的时钟节拍 */ OSStatInit(); /* 创建用户应用程序任务 */ for (;;) { /* 这里是TaskStart()的代码 */ OSTimeDly(10); } } 19 // 初始化统计任务 // 开始多任务调度
图2-2 UC/OS应用
7
2.1.4 uC/OS提供的系统服务

信号量 带互斥机制的信号量 优化优先级倒置的问题 消息信箱 消息队列 内存管理 时钟管理 任务管理
8
2.1.5 uC/OSII 内核结构
应用程序 (用户代码)
内核部分,包 括了所有内核 代码和系统功 能代码 μC/OS-II (与处理器无关代码)
二、 uC/OS与uC/OSII的任务
1
第二章:uC/OS与uC/OSII的任务
目标: 本章旨在向学员介绍uC/OS-II实时操作系 统及uC/OS-II的任务,通过本章的学习, 学员应该掌握如下知识: uC/OS-II的结构及特点 任务堆栈 任务控制块、就绪表 任务的操作 uC/OS-II初始化后的数据结构

第五篇:uCOS-II

第五篇:uCOS-II

第五篇:uCOS-II 信号量及其操作1.信号量使⽤信号量之前⾸先要对信号量有⼀个本质的认识(1)信号量的含义:信号量是⼀类事件,使⽤信号量的最初⽬的是为了给共享资源设⽴⼀个标志,该标志表⽰共享资源的占⽤情况,这样,当⼀个任务在访问共享资源之前,就可以对这个标志进⾏查询,从⽽在了解资源被占⽤的情况之后,再来决定⾃⼰的⾏为。

(2)UCOS-II的信号量⾥⾯有⼀个OSEventCnt,正确的认识这个,是使⽤信号量的关键。

OSSemCreate(0):这种情况下可以⽤任务的同步。

OSSemCreate(1):这种情况类似于互斥信号量,有⼀个名字就是⼆值信号量,可⽤于⼀个资源的使⽤OSSemCreate(>1):这种情况表⽰有>1个资源可以使⽤。

(3)OSEventCnt的初始数据代表可⽤的资源数,1就是⼀个可⽤资源,n就是n可⽤资源。

(4)OSTimeTick 函数⾥⾯有⼀个需要注意的地⽅。

a如果事件中设置了0SxxxPend的延时的话,会进到下⾯函数的这个地⽅。

b如果设置的是⼀直等到的话,将通过OSXXXPost释放。

在延迟的时间⾥⾯没有就绪的话,任务OSTCBStatPend被设置成超时,并清除相应的标志位。

if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) {ptcb->OSTCBStat &= (INT8U)~(INT8U)OS_STAT_PEND_ANY;ptcb->OSTCBStatPend = OS_STAT_PEND_TO;}在延迟的时间⾥⾯任务收到信息,任务OSTCBStatPend被设置成OKelse{ptcb->OSTCBStatPend = OS_STAT_PEND_OK;}如果任务没有被挂起的话,任务将加⼊到就绪列表。

if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) {OSRdyGrp |= ptcb->OSTCBBitY;OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;}(5)下⾯分两种情况进⾏详细的讨论A. OSSemCreate(0)这种情况下⽤于信号的同步OSSemPen(xx, 0, xx)设置为0的话,任务将被⼀直挂起直到收到OSSemPost信号。

ucOS-II入门经典教程

ucOS-II入门经典教程
OS_EXIT_CRITICAL( ); //开放中断 OSTaskIdle( )的系统任务 }
}
μC/OS-II提供的另一个系统任务是统
计任务OSTaskStat( )。这个统计任务 每秒计算一次CPU在单位时间内被使用 系统提供的另一个任务 的时间,并把计算结果以百分比的形 ——统计任务 式存放在变量OSCPUsage中,以便应用 程序通过访问它来了解CPU的利用率, 所以这个系统任务OSTaskStat( )叫做 统计任务
μC/OS-II中 的任务管理
任务在没有被配备 任务控制块或被剥 夺了任务控制块时 的状态叫做任务的 睡眠状态
正在运行的任务,需要 等待一段时间或需要等 待一个事件发生再运行 时,该任务就会把CPU 的使用权让给别的任务 而使任务进入等待状态
任务的状态及其转换
系统为任务配备 了任务控制块且 在任务就绪表中 进行了就绪登记, 这时任务的状态 叫做就绪状态。 处于就绪状态的 任务如果经调度 器判断获得了 CPU的使用权, 则任务就进入运 行状态
任务堆栈
多任务时的问题
处理器 PC 寄存器组 SP 当有多个任务时,处理 内存 内存 器中的运行环境应该怎 内存 么办? 任务代码 任务代码 任务代码

任务堆栈 任务堆栈 任务堆栈 程序运行环境
多任务时任务与处理器 之间关系的处理 在内存中为每个任
处理器 PC 寄存器组 SP 复制 复制
调度器
复制 PC PC PC PC
处理器是个傻瓜,PC让 从此可以知道,哪个程 它干啥,它就干啥。 深刻地理解PC是理解系统 序占有了PC,哪个程序 进行程序切换动作的关键。 就占有了处理器。 PC是个指路器,它指向哪 儿,处理器就去哪儿。
= PC

uCOS-II函数之任务相关函数

uCOS-II函数之任务相关函数

uCOS-II函数之任务相关函数获得更多资料欢迎进⼊或者或者对于有热⼼的⼩伙伴在上私信我,说我的篇幅有些过于长应该分开介绍。

应⼩伙伴的要求,特此将⽂章分开进⾏讲解。

上⽂主要介绍了OSInit()初始化函数,本⽂介绍任务相关的函数:OSTaskCreate()任务创建函数1,OSTaskCreateExt任务创建函数2,OSTaskSuspend()任务挂起,OSTaskResume()唤醒任务OSTaskCreate()任务创建函数1、主要作⽤:建⽴⼀个新任务。

任务的建⽴可以在多任务环境启动之前,也可以在正在运⾏的任务中建⽴。

中断处理程序中不能建⽴任务;注意,ISR中禁⽌建⽴任务,⼀个任务必须为⽆限循环结构。

2、函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK ptos, INT8U prio);3、参数说明:void (task)(void *pd):指向任务代码⾸地址的指针。

void *pdata:指向⼀个数据结构,该结构⽤来在建⽴任务时向任务传递参数。

OS_STK *ptos: 指向堆栈任务栈顶的指针INT8U prio:任务优先级4、返回值介绍:OS_NO_ERR:函数调⽤成功。

OS_PRIO_EXIST:具有该优先级的任务已经存在。

OS_PRIO_INVALID:参数指定的优先级⼤于OS_LOWEST_PRIO。

OS_NO_MORE_TCB:系统中没有OS_TCB可以分配给任务了。

5、函数主体在os_task.c中OSTaskCreateExt任务创建函数21、主要作⽤:建⽴⼀个新任务。

与OSTaskCreate()不同的是,OSTaskCreateExt()允许⽤户设置更多的细节内容。

任务的建⽴可以在多任务环境启动之前,也可以在正在运⾏的任务中建⽴,但中断处理程序中不能建⽴新任务。

,且不2、函数原型:NT8U OSTaskCreateExt (void (*task)(void *pd),void *pdata, OS_STK *ptos,INT8U prio ,INT16U id, OS_STK*pbos,INT32U stk_size,void pext,INT16U opt)3、参数说明:void (task)(void *pd):指向任务代码⾸地址的指针。

操作系统第二版复习资料

操作系统第二版复习资料操作系统第二版复习资料操作系统是计算机科学中非常重要的一个领域,它负责管理计算机的硬件和软件资源,为用户和应用程序提供一个可靠、高效的工作环境。

本文将围绕操作系统的基本概念、功能和设计原则展开讨论,帮助读者复习和加深对操作系统的理解。

一、操作系统的基本概念操作系统是一种软件,它运行在计算机硬件之上,并管理计算机的各种资源,如处理器、内存、存储设备和输入输出设备等。

操作系统的主要任务包括进程管理、内存管理、文件系统管理和设备管理等。

1. 进程管理:操作系统负责创建、调度和终止进程,以及管理进程间的通信和同步。

进程是程序的执行实例,每个进程都有自己的地址空间和执行状态。

操作系统通过进程管理,确保多个进程能够并发执行,并共享计算机的资源。

2. 内存管理:操作系统负责管理计算机的内存资源,包括内存的分配和回收、内存的保护和共享,以及虚拟内存的管理等。

内存管理的目标是提高内存利用率和系统性能,同时保证进程的地址空间不被越界访问。

3. 文件系统管理:操作系统负责管理计算机的存储设备,包括硬盘、光盘和闪存等。

文件系统管理的主要任务是提供对文件的组织、访问和保护。

操作系统通过文件系统管理,实现了文件的逻辑组织和物理存储的映射。

4. 设备管理:操作系统负责管理计算机的输入输出设备,如键盘、鼠标、显示器和打印机等。

设备管理的主要任务是分配和调度设备资源,以及处理设备的中断和错误。

操作系统通过设备管理,实现了用户和应用程序与设备的交互。

二、操作系统的功能操作系统的功能包括进程管理、内存管理、文件系统管理和设备管理等,它们相互协作,共同提供一个高效、可靠的工作环境。

1. 进程管理:操作系统通过进程管理,实现了进程的创建、调度和终止。

它还提供了进程间的通信和同步机制,如信号量、互斥量和管程等。

进程管理的目标是提高系统的并发性和响应性,同时保证进程的正确执行。

2. 内存管理:操作系统通过内存管理,实现了内存的分配和回收。

ucosII详解

第1章范例 - - - - - - - - - - - - - - - - - - - - - - - - - - 11.00 安装µC/OS-II- - - - - - - - - - - - - - - - - - - - - - - - - - -11.01 INCLUDES.H- - - - - - - - - - - - - - - - - - - - - - - - - - - - 21.02 不依赖于编译的数据类型- - - - - - - - - - - - - - - - - - - - - - 21.03 全局变量- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 31.04 OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL()- - - - - - - - - - - - -51.05 基于PC的服务- - - - - - - - - - - - - - - - - - - - - - - - - - -51.05.01 字符显示- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 51.05.02 花费时间的测量- - - - - - - - - - - - - - - - - - - - - - - - - - 61.05.03 其他函数- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 61.06 应用µC/OS-II 的范例- - - - - - - - - - - - - - - - - - - - - - - 71.07 例1- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -81.07.01 main()- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 81.07.02 TaskStart()- - - - - - - - - - - - - - - - - - - - - - - - - - - -111.07.03 TaskN()- - - - - - - - - - - - - - - - - - - - - - - - - - - - -121.08 例2- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 131.08.01 main()- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 141.08.02 TaskStart()- - - - - - - - - - - - - - - - - - - - - - - - - - - - 15 1.08.03 TaskN()- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16 1.09 例3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 191.09.01 main() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 20 1.09.02 任务 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 21 1.09.03 注意 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 24第2章实时系统概念- - - - - - - - - - - - - - - - - - - - - - - - - - 272.0 前后台系统(FOREGROUND/BACKGROUND SYSTEM) - - - - - - - - - - - - 27 2.1 代码的临界段- - - - - - - - - - - - - - - - - - - - - - - - - - - - 28 2.2 资源- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -28 2.3 共享资源- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -28 2.4 多任务- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -28 2.5 任务- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -29 2.6 任务切换(CONTEXT SWITCH OR TASK SWITCH) - - - - - - - - - - - - - - -30 2.7 内核(KERNEL)- - - - - - - - - - - - - - - - - - - - - - - - - - -302.8 调度(SCHEDULER)- - - - - - - - - - - - - - - - - - - - - - - - - 312.9 不可剥夺型内核(NON-PREEMPTIVE KERNEL)- - - - - - - - - - - - - - - 31 2.10 可剥夺型内核- - - - - - - - - - - - - - - - - - - - - - - - - - - - 32 2.11 可重入性(REENTRANCY)- - - - - - - - - - - - - - - - - - - - - - - 33 2.12 时间片轮番调度法- - - - - - - - - - - - - - - - - - - - - - - - - - 35 2.13 任务优先级- - - - - - - - - - - - - - - - - - - - - - - - - - - - -352.14 2.14静态优先级 - - - - - - - - - - - - - - - - - - - - - - - - - - 352.15 动态优先级 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 35 2.16 优先级反转 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 35 2.17 任务优先级分配 - - - - - - - - - - - - - - - - - - - - - - - - - - -37 2.18 互斥条件- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 39 2.18.1 关中断和开中断- - - - - - - - - - - - - - - - - - - - - - - - - - - 39 2.18.2 测试并置位- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 40 2.18.3 禁止,然后允许任务切换- - - - - - - - - - - - - - - - - - - - - - - - 40 2.18.4 信号量(SEMAPHORES) - - - - - - - - - - - - - - - - - - - - - - - - - 41 2.19 死锁(或抱死)(DEADLOCK (OR DEADLY EMBRACE))- - - - - - - - - - - - -46 2.20 同步- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 462.21 事件标志(EVENT FLAGS) - - - - - - - - - - - - - - - - - - - - - - - 482.22 任务间的通讯(INTERTASK COMMUNICATION) - - - - - - - - - - - - - - - - 482.23 消息邮箱(MESSAGE MAIL BOXES) - - - - - - - - - - - - - - - - - - - -492.24 消息队列(Message Queue) - - - - - - - - - - - - - - - - - - - - - - 502.25 中断- - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - 512.26 中断延迟- - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - 512.27 中断响应- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 52 2.28 中断恢复时间(Interrupt Recovery) - - - - - - - - - - - - - - - - - - 522.29 中断延迟、响应和恢复- - - - - - - - - - - - - - - - - - - - - - - - 532.30 中断处理时间- - - - - - - - - - - - - - - - - - - - - - - - - - - - 532.31 非屏蔽中断(NMI) - - - - - - - - - - - - - - - - - - - - - - - - - - 542.32 时钟节拍(Clock Tick) - - - - - - - - - - - - - - - - - - - - - - - - 562.33 对存储器的需求- - - - - - - - - - - - - - - - - - - - - - - - - - - 582.34 使用实时内核的优缺点- - - - - - - - - - - - - - - - - - - - - - - - 592.35 实时系统小结- - - - - - - - - - - - - - - - - - - - - - - - - - - - 60第3章内核结构- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 623.0 临界段(Critical Sections) - - - - - - - - - - - - - - - - - - - - - 623.1 任务- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 623.2 任务状态- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 643.3 任务控制块(Task Control Blocks, OS_TCBs)- - - - - - - - - - - - - - 653.4 就绪表(Ready List)- - - - - - - - - - - - - - - - - - - - - - - - 683.5 任务调度(Task Scheduling)- - - - - - - - - - - - - - - - - - - - - 713.6 给调度器上锁和开锁(Locking and UnLocking the Scheduler) - - - - - - - 723.7 空闲任务(Idle Task) - - - - - - - - - - - - - - - - - - - - - - - - 733.8 统计任务- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 743.9 μC/OS中的中断处理- - - - - - - - - - - - - - - - - - - - - - - - - -783.10 时钟节拍- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 823.11 μC/OS-Ⅱ初始化- - - - - - - - - - - - - - - - - - - - - - - - - - 843.12 μC/OS-Ⅱ的启动- - - - - - - - - - - - - - - - - - - - - - - - - - 853.13 获取当前μC/OS-Ⅱ的版本号- - - - - - - - - - - - - - - - - - - - - - 883.14 OSEvent???()函数- - - - - - - - - - - - - - - - - - - - - - - - - - 89第4章任务管理4.0 建立任务,OSTaskCreate() - - - - - - - - - - - - - - - - - - - - - 914.1 建立任务,OSTASKCREATEEXT() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 924.2 任务堆栈 94.3 堆栈检验,OSTASKSTKCHK() 114.4 删除任务,OSTASKDEL() 144.5 请求删除任务,OSTASKDELREQ() 174.6 改变任务的优先级,OSTASKCHANGEPRIO() 204.7 挂起任务,OSTASKSUSPEND() 234.8 恢复任务,OSTASKRESUME() 254.9 获得有关任务的信息,OSTASKQUERY() 26第5章时间管理5.0 任务延时函数,OSTIMEDLY() 15.1 按时分秒延时函数 OSTIMEDLYHMSM() 35.2 让处在延时期的任务结束延时,OSTIMEDLYRESUME() 45.3 系统时间,OSTIMEGET()和OSTIMESET() 6第6章任务之间的通讯与同步6.0 事件控制块ECB 26.1 初始化一个ECB块,OSEVENTWAITLISTINIT() 66.2 使一个任务进入就绪状态,OSEVENTTASKRDY() 76.3 使一个任务进入等待状态, OSEVENTTASKWAIT() 96.4 由于等待超时将一个任务置为就绪状态, OSEVENTTO() 96.5 信号量106.5.1 建立一个信号量, OSSemCreate() 116.5.2 等待一个信号量, OSSemPend() 126.5.3 发送一个信号量, OSSemPost() 146.5.4 无等待地请求一个信号量, OSSemAccept() 166.5.5 查询一个信号量的当前状态, OSSemQuery() 176.6 邮箱186.6.1 建立一个邮箱,OSMboxCreate() 196.6.2 等待一个邮箱中的消息,OSMboxPend() 206.6.3 发送一个消息到邮箱中,OSMboxPost() 226.6.4 无等待地从邮箱中得到一个消息, OSMboxAccept() 246.6.5 查询一个邮箱的状态, OSMboxQuery() 256.6.6 使用邮箱作为二值信号量266.6.7 使用邮箱实现延时,而不使用OSTimeDly() 276.7 消息队列286.7.1 建立一个消息队列,OSQCreate() 316.7.2 等待一个消息队列中的消息,OSQPend() 336.7.3 向消息队列发送一个消息(FIFO),OSQPost() 356.7.4 向消息队列发送一个消息(LIFO),OSQPostFront() 376.7.5 无等待地从一个消息队列中取得消息, OSQAccept() 396.7.6 清空一个消息队列, OSQFlush() 406.7.7 查询一个消息队列的状态,OSQQuery() 416.7.8 使用消息队列读取模拟量的值426.7.9 使用一个消息队列作为计数信号量43第7章内存管理7.0 内存控制块 17.1 建立一个内存分区,OSMEMCREATE() 37.2 分配一个内存块,OSMEMGET() 67.3 释放一个内存块,OSMEMPUT() 77.4 查询一个内存分区的状态,OSMEMQUERY() 87.5 USING MEMORY PARTITIONS 97.6 等待一个内存块 11第8章移植µC/OS-Ⅱ8.00 开发工具8.01 目录和文件8.02 INCLUDES.H8.03 OS_CPU.H8.03.01 与编译器相关的数据类型8.03.02 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()8.03.03 OS_STK_GROWTH8.03.04 OS_TASK_SW()8.04 OS_CPU_A.ASM8.04.01 OSStartHighRdy()8.04.02 OSCtxSw()8.04.03 OSIntCtxSw()8.04.04 OSTickISR()8.05 OS_CPU_C.C8.05.01 OSTaskStkInt()8.05.02 OSTaskCreateHook()8.05.03 OSTaskDelHook()8.05.04 OSTaskSwHook()8.05.05 OSTaskStatHook()8.05.06 OSTimeTickHook()第9章µC/OS-II在Intel 80x86上的移植9.00 开发工具9.01 目录和文件9.02 INCLUDES.H文件9.03 OS_CPU.H文件9.03.01 数据类型9.0302 代码临界区第一章:范例在这一章里将提供三个范例来说明如何使用µC/OS-II。

ucos复习提纲

ucos复习提纲第一章:概念时间限制:两种 1.周期性 2.时限实时操作系统是事件驱动的;实时性要求:时间上同时发生和过程上同时响应实时系统的特点:事件驱动,强调的是实时性、可靠性和灵活性实时系统分类:按外部过程的要求划分:软实时系统和硬实时系统按系统响应时间划分:强实时系统一般实时系统弱实时系统按软件结果划分:轮循系统时间驱动系统堆栈:主要用于程序模块的嵌套运行调度:任务的分配,两种调度方式:1.不可抢占调度方式(非占先式,不可剥夺型):一个进程若被选中就一直运行下去,直到它被阻塞或者主动交出CPU2.可抢占调度方式(占先式,可剥夺型):当一个进程在运行时,调度程序可以打断它。

如就绪队列中有新进程的优先级高于当前正在运行的进程,也可以立即进行调度。

中断:是一种硬件机制,通知CPU有个异步事件发生了时钟节拍:是特定的周期性中断,是实时内核的心脏多任务:在内存中为每个任务创建一个虚拟的处理器(IP和SP) 也就是说任务的切换是运行环境的切换任务三要素:程序代码、私有堆栈、任务控制块任务切换的关键:把程序的私有堆栈指针赋予处理器的堆栈指针SP第二章:任务ucos:基于优先级的可抢先的硬实时内核任务分为用户任务和系统任务任务调度的思想:总是让优先级最高的就绪任务处于运行状态;任务调度:1.在就绪表中查找具有最高优先级的就绪任务;(任务控制块切换)2.实现任务切换(任务堆栈切换)被中止运行任务的任务堆栈指针要保存到该任务的任务控制块中任务堆栈、任务控制块及其链表、任务就绪表和任务调度、任务的创建、任务的挂起和恢复、删除、ucos初始化和任务的启动。

第三章:中断和时钟中断向量:中断服务子程序的入口地址临界段中断级任务切换函数时钟中断安装和服务程序(重点)任务的延时取消延时获取和设置系统时间第四章:事件管理任务间的同步:任务之间的这种制约性的合作运行机制叫做任务间的同步直接制约关系:源于任务之间的合作(先后次序)间接制约关系:源于对资源的共享(互斥关系)事件:(任务间的同步依赖于任务间的通信)实现任务间的通信:信号量、消息邮箱、互斥信号量,消息队列事件控制块:用于通信的数据结构事件等待表信号量:多个任务使用共享资源时,避免发生冲突。

6、uCOS-II-内存管理

2020/8/23
page 11
OSMemFreeList
OSMemAddr OSMemFreeList OSMemBlkSize OSMemNBlks OSMemNFree
OSMemAddr OSMemFreeList OSMemBlkSize OSMemNBlks OSMemNFree
OS_MAX_MEM_PART
&message_n
message
M1_Data M2_data
Mn_Data
2020/8/23
page 6
目录
1、 内存控制块 2、 动态内存的管理
2020/8/23
page 7
1 内存控制块
uC/OS-II中将连续的大块内存按分区来管理,称之为 “内存分区”。
分区由若干个体积相等、类型一致的 “内存块” 组 成。
Partition
Block
2020/8/23
memory partition
Multiple memory partitions
fixed-sized memory blocks from a partition
page 10
/* MEMORY CONTROL BLOCK
*/
typedef struct {
/* Total number of blocks in this partition*/ INT32U OSMemNBlks;
/* Number of memory blocks remaining in this partition*/
INT32U OSMemNFree; } OS_MEM;
Memory control block data structure
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、µC概论
µC /OS-II 是以任务为最小程序单元的,它在内核环境下被分割为独立的且可并行执行的基本逻辑单位的程序(这是其最大的特点),任何任务不用关心资源的具体管理方法,而是交给操作系统,有操作系统来决定,这使得代码的层次很清晰,可以提高程序的执行效率。

其特点分别为以下十一点:
1、公开源代码
2、可移植性(Portable):绝大部分μ C/OS-II的源码是用移植性很强的ANSI C写的。

和微处理器硬件相关的那部分是用汇编语言写的。

汇编语言写的部分已经压到最低限度,使得μC/OS-II便于移植到其他微处理器上。

μ C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器(DSP)上运行。

3、可固化(ROMable):μ C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(C编译、连接、下载和固化),μC/OS-II可以嵌入到读者的产品中成为产品的一部分。

4、可裁剪(Scalable):可以只使用μ C/OS-II中应用程序需要的那些系统服务。

也就是说某产品可以只使用很少几个μ C/OS-II调用,而另一个产品则使用了几乎所有μ C/OS-II的功能,这样可以减少产品中的μC/OS-II所需的存储器空间(RAM和ROM)。

这种可剪裁性是靠条件编译实现的。

5、占先式(Preemptive)
6、多任务:μC/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。

应用程序最多可以有56个任务
7、可确定性:全部μ C/OS-II的函数调用与服务的执行时间具有可确定性。

8、任务栈:每个任务有自己单独的栈,μ C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。

9、系统服务:μC/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。

10、中断管理:中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。

11、稳定性与可靠性
2、µC中断
中断定义为CPU对系统内外发生的异步事件的响应。

异步事件是指没有一定时序关系的、随机发生的事件。

当中断产生时,由硬件向CPU 发送一个异步事件请求,CPU接收到请求后,中止当前工作,保存当前运行环境,转去处理相应的异步事件任务,这个过程称为中断。

事件处理完毕后,在前后台系统中,程序回到后台程序;在不可剥夺型内核中,程序回到被中断了的任务;在可剥夺型内核中,让进入就绪态的优先级最高的任务开始运行,若没有高优先级任务准备就绪,则回到被中断了的任务。

使用中断机制的优点在于:CPU无需连续不断地查询是否有新的事件发生,只需在有事件发生时作出响应。

CPU可以通过两条特殊指令关中断(Disable Interrupt)和开中断(Enable Interrupt)来响应和不响应中断。

关中断会影响中断延迟时间,时间太长可能会引起中断丢失。

所以在实时环境中,关中断的时间应尽量短。

在中断服务期间,CPU一般允许中断嵌套允许新的中断打入,识别中断优先级别更高的事件。

μC/OS-II系统响应中断的过程为:系统接收到中断请求后,这时如果CPU处于中断允许状态(即中断是开放的),系统就会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统将会根据情况返回到被中止的任务继续运行或者转向运行另一个具有更高优先级别的就绪任务。

(P123)
3、任务调度
多任务操作系统的核心工作就是任务调度。

所谓调度,就是通过一个算法在多个任务中确定该运行的任务,做这项工作的函数就叫做调度器。

μC/OS_II进行任务调度的思想是“近似地每时每刻总是让优先级最高的就绪任务处于运行状态”。

为了保证这一点,它在系统或用户任务调用系统函数及执行中断服务程序结束时总是调用调度器,来确定应该运行的任务并运行它。

为了能够使系统清楚地知道,系统中哪些任务已经就绪,哪些还没有就绪,μC/OS_II在RAM中设立了一个记录表,系统中的每个任务都在这个表中占据一个位置,并用这个位置的状态(1或者0)来表示任务是否处于就绪状态,这个表就叫做任务就绪状态表,简称叫任务就绪表。

μC/OS_II进行任务调度的依据就是任务就绪表
4、时间管理函数
μC/OS-Ⅱ有五个与时钟节拍有关的系统服务,它们分别如下:
(1) OSTimeDly():任务延时函数。

(2) OSTimeDlyHMSM():按时分秒毫秒延时函数。

(3) OSTimeDlyResume():让处在延时期的任务结束延时。

(4) OSTimeGet():获得系统时间。

(5) OSTimeSet():设置系统时间。

这些函数属于OS_TIME.C文件。

要调用这些函数,必须首先在OS_CFG.H文件中设置配置常量
OS_CFG.H中与时间管理相关的配置常量一览表
5、µC移植
这里所谓的移植,就是使一个实时内核能运行在另一种微处理器或者微控制器上。

为了方便移植,μC/OS-Ⅱ在设计时就充分考虑了可移植性,大部分代码都是用ANSI C语言编写的,考虑到绝大多数微处理器在读/写寄存器时只能用汇编语言来实现,所以仍然需要用汇编语言来编写一些与处理器相关的代码。

1. 移植对微处理器的要求
要使µC/OS-Ⅱ能够正常运行,处理器和编译器必须满足以下五项要求:
(1) 处理器的C编译器能产生可重入代码;
(2) 用C语言就可以实现开关中断;
(3) 处理器至少能支持定时中断,中断频率一般在10~100 Hz之间;
(4) 处理器能够支持硬件堆栈,容量可达几KB;
(5) 处理器有堆栈指针和读/写CPU其它寄存器、堆栈内容或内存的指令。

2. 对移植开发工具的要求
移植µC/OS-Ⅱ,需要一个针对用户用的CPU的C编译器,它必须满足如下要求:
(1) C编译器必须支持汇编语言程序。

(2) C编译器必须能支持可重入代码,因为µC/OS-Ⅱ是一个可剥夺型内核。

(3) C编译器必须包括汇编器、连接器和定位器。

连接器用来将经编译和汇编后产生的不同的模块连接成目标文件。

定位器用于将代码和数据放置在目标处理器的指定内存映射空间中。

(4) C编译器必须支持从C中打开和关闭中断。

(5) C编译器最好支持用户在C语言程序中嵌入汇编语言,这有利于用汇编语言来直接开关中断。

3. 移植的主要工作
µC/OS-Ⅱ的移植非常简单,但前提是:必须理解处理器和C编译器的技术细节,拥有和掌握必要的工具,处理器和编译器满足µC/OS-Ⅱ的上述五项原则。

根据如图1.1所示的µC/OS-Ⅱ软硬件体系结构,移植工作主要是改写与处理器有关的内核代码以及与编译器数据类型有关的文件,
移植所要进行的工作可以简单地归纳为如下几条:
(1) 声明11个数据类型(OS_CPU.H);
(2) 用#define声明4个宏(OS_CPU.H);
(3) 用C语言编写10个简单的函数(OS_CPU_C.C);
(4) 编写4个汇编语言函数(OS_CPU_A.ASM)。

根据处理器的不同,一个移植实例可能需要编写或改写50~300行的代码,需要的时间从几个小时到一星期不等。

移植完毕后还要进行测试。

4. INCLUDES.H文件说明
INCLUDES.H是一个主头文件,它包括了所有的头文件,这样做的好处是使得在应用中无需考虑每个 .C文件到底需要哪些头文件,还可大大地提高代码的可移植性。

唯一的缺点是它可能会包含一些不相关的头文件,因此可能增加每个文件的编译时间。

一般地,该文件应该包含在所有 .C文件的第一行,即# include “includes.h”。

相关文档
最新文档