当前位置:文档之家› uCOS-II任务讲解

uCOS-II任务讲解

uCOS-II任务讲解
uCOS-II任务讲解

1.uCos-II操作系统内核的主要工作就是对任务进行管理和调度. 在应用程序设计的角度来看,uCos-II的任务就是一个线程.

2.从任务的存储结构来看,uCOS-II的任务由三个部分组成: 1-任务程序代码(任务的执行部分). 2-任务堆栈(用于保存任务工作环境) 3-任务控制块(用于保存任务属性)

3.uCOS-II的任务有两种,用户任务和系统任务. 由应用程序设计者编写的任务叫做用户任务. 由系统提供的任务叫做系统任务. 用户任务是为解决应用问题而编写的,系统任务是为应用程序来提供某种服务的.

4,任务的5种状态

5.从等待状态不能直接进入运行状态.

6.从程序设计的角度来看,一个uCOS-II任务的代码就是一个C语的函数.为了可以传递各种不同类型的数据甚至是函数,任务的参数是一个void类型的指针.可以说uCOS-II任务是一个代码结构是带有临界段的无限循环.

7.用户任务他不是被主函数或其他函数调用的, 主函数main()只负责创建和启动它们,而操作系统负责来调度运行.

8.OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL用来做临界保护的.

9.OSTaskCreate()为操作系统uCOS-II提供的用来创建任务的函数.

10.OSStart()为操作系统提供启动各任务的函数.启动任务以后,任务就应由操作系统来管理和调度了.

11.uCOS-II预定义了两个为应用程序服务的系统任务:空闲任务和统计任务.其中空闲任务是每个应用程序必须使用的,而统计任务则是应用程序可以根据实际需要来选择使用的.

12.空闲任务:让CPU在没有用户任务可执行时有事可做.

OSTaskIdle():

void OSTaskIdle(void *pdata)

{

#if OS_CRITICAL_METHOD == 3

OS_CPU_SR cpu_sr;

#endif

pdata = pdata; //定义了型参没有用,编译器会报警告或者错误

for(;;)

{

OS_ENTER_CRITICAL();

OSdleCtr++;

OS_EXIT_CRITICAL();

}

}

uCOS-II规定,一个用户应用程序必须使用这个空闲任务,而且这个任务是不能用软件来删除的.

13.统计任务(OSTaskStat())每秒计算一次CPU在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量OSCPUUsage中. 如果用户应用程序要使用统计任务,则必须把定义在系统头文件OS_CFG.H中的系统配置常数OS_TASK_STAT_EN设置为1,并且必须在创建统计任务之前调用函数OSStatInit()对统计任务进行初始化.

14.通常一个应用程序的任务数小于64,数字0表示任务的优先级别最高;在文件OS_CFG.H中通过给表示最低优先级别的常数OS_LOWEST_PRIO赋值的方法,来说明应用程序中任务优级别的数目.

15.堆栈就是在存储器中按数据"后进先出"的原则组织的连续存储空间.

16.任务堆栈区的创建,在文件OS_CPU.H中专门定义了一个数据类型OS_STK. typedef unsigned int OS_STK.在应用程序中定义任务堆栈的栈区即定义一个OS_STK类型的一个数组即可.

17.因为不同的处理器的堆栈的成长方式可能不一样,我们可以使用OS_CFG.H中的常数OS_STK_GROWTH做为开关,以适应不同的堆栈增长方式的需求.

18.任务堆栈的初始化工作是在创建任务函数OSTaskCreate()通过调用任务堆栈初始化函数OSTaskStkInit()来完成.这个函应该是在用户移植是自己编写.

19.COS-II用两条链表来管理任务控制块. 一条是空任务块链表(其中所有任务控制块还没有分配给任务) 二条是任务块链表(其中所有任务控制块已经分配给任务)

20.uCOS-II允许用函数OSTaskDel()删除一个任务.删除一个任务,实质上就是把该任务从任务控制块链表中删掉,并把它归还给空任务控制块链表.

21.任务的任务控制块就如同人的身份证一样重要.

22.给用户任务分配任务控制块及对其进行初始化也是操作系统的职责.当应用程序调用函数OSTaskCreate创建一个任务时,这个函数会调用系统函数OSTCBInit()来为任务控制块进行初始化.这个函数首先被创建任务从空任务控制块链表获取珍上任务控制块,然后,用作任务的属性对任务控制块各个成员进行赋值;最后再把这个任务控制块链入到任务控制块链表的头部.

23.uCOS-II进行任务调度的思想是,每时每刻让优先级最高的就绪任务处于运行状态.

24.uCOS-II进行任务调度的依据就是任务就绪表.系统总是从处于就绪状态的任务中来选择一个任务运行.

25.想手动的将任务设计为就绪状态,修改就绪表就可以了.

26.任务调度器的主要工作有两项:一是在任务就绪表中查找具有最高优先级别的就绪任务,二是实现任务的切换.

27.uCOS-II有两种调度器:一种是任务级的调度器,另一种是中断级的调度器.任务级的调度器是由函数OSSched()实现,而中断级的调度器由函数OSIntExt()来实现.

28.uCOS-II允许应用程序通过调用函数OSScheLock()和OSSchedUnlock()给调度器上锁和解锁.定义一个变量OSLockNesting来记录调度器被锁和解锁情况.

29.任务切换就是中止正在运行的任务,转而去运行另外一个任务的操作.这个任务应该是就绪任务中优先级别最高的那个任务. 任务的切换就是断点数据的切换,断点数据的切换就是CPU堆栈指针切换,被中止运行任务的任务堆栈指针要保存到该任务的任务控制块中,待运行任务的任务堆栈指针要该任务控制块转存到CPU的SP中.

30.创建任务的工作实质上是创建一个任务控制块,并通过任务控制块把任务代码和任务堆栈关联起来形成一个完整的任务.

31.uCOS-II有两个用来创建任务的函数,OSTaskCreate(),OSTaskCreateExt(),其中函数OSTaskCreateExt()是OSTaskCreate()的扩展,并提供了一些附加功能.

32.uCOS-II有规定,在调用启动任务函数OSStart()之前,必须已经创建了至少一个任务.

33.所谓挂起一个任务就是停止这个任务的运行,用户任务可以调用OSTaskSuspend()来挂起自身或空闲任务之外的其他任务.

34.在使用uCOS-II所有的服务之前,必段调用初始化函数OSInit();对自身的运行环境进行初始化.

35.小结: 任务由任务控制块,任务堆栈和任务代码三部组成.系统通过任务控制块来感知和控制任务.任务堆栈主要用来保护断点和恢复断点,任务代码是一个超的循环结构,它描述了任务的执行过程.在创建一个任务时,函数负责给任务分配任务控制块和任务堆栈.并对它们进行初始化.然后把任务控制块,任务堆栈,任务代码三者关联起来形成一个完整的任务. 系统是按任务就绪表和任务的优先级别来调度任务的.执行任务工作的是调度器,它负责查找具有最高优先级别的就绪任务并运行它.同时把这个任务TCB的指针存放在OSTABCur中,通常,系统在调用API函数和运行中断服务程序之后都要调用函数OSSched()来进行一次任务调度. 任务切换的核心工作是任务堆栈指针的切换. 任务的优先级别也是任务的标识. 应用程序首先应该调用函数OSInit()对全局变量和数据结构进行初始化,以建立uCOS-II的运行环境. 应用程序是通过函数OSSstart开始进入多任务管理的.但在调用函数OSStart之前,必须至少创建一个任务.(扣扣1138474382)

实时操作系统UCOS-II,学会RTOS给你的身价增值

实时操作系统UCOS-II,学会RTOS给你的身价增值 如果,你最近关注一些嵌入式招聘职位描述,你可能会经常看到看到使用过uCOS、Vxworks、QNX等RTOS者优先。 随便打开一个20K的嵌入式开发工作职责: 你会发现熟悉RTOS的开发、移植、剪裁真的很吃香! 今天,我们就来介绍一下实时操作系统UCOS-II。 一、嵌入式操作系统概览 嵌入式操作系统的主要好处就是屏蔽了底层硬件的差别,给上层应用提供统一的接口,并管理进程调度和资源(如CPU时间、内存)分配等。并且可以充分利用硬件资源,如在单任务时(大循环结构,如大部分51程序)遇到delay函数时,CPU在空转。而在多任务系统,遇到delay或需等待资源时系统会自动运行下一个任务,等条件满足再回来运行先前的任务,这样就充分利用了CPU,提高了效率。 uC/OS操作系统与裸机程序的最大不同点就在于uC/OS有任务调度,可以根据任务的重要程度(优先级)优先执行重要的任务,从而确保能及时处理最重要的数据。(所以对于一个系统有必要使用OS的判断是能否划分一个个的任务,并且各任务间的耦合很小)可以思考下裸机程序中断的时候发生的过程。利用堆栈可以很自由的在A、B中切换,如果切换足够快,A、B看以来好像同时在执行,这就是并行,A、B就是任务。如果这个切换操作放到定时器函数中来做,就可以严格按照时间来切换。另外,各个任务之间有存在一定的关系,有逻辑上的先后等,必须引进全局的结构体、变量来标记一些信息,全局的这些数据是不会被释放的,所以所有的任务可以去通过读、写这些数据来实现各个程序块交流信息,实现所谓的同步、互斥。这就是操作系统的原理,而这些不同的通信方式按功能细分就成事件管理、内存管理等。

ucos-ii操作系统复习大纲

ucos-ii操作系统复习大纲 一.填空题 1.uC/OS-II是一个简洁、易用的基于优先级的嵌入式【抢占式】多任务实时内核。 2.任务是一个无返回的无穷循环。uc/os-ii总是运行进入就绪状态的【最高优先级】的任务。 3.因为uc/os-ii总是运行进入就绪状态的最高优先级的任务。所以,确定哪 个任务优先级最高,下面该哪个任务运行,这个工作就是由【调度器(scheduler)】来完成的。 4.【任务级】的调度是由函数OSSched()完成的,而【中断级】的调度 是由函数OSIntExt() 完成。对于OSSched(),它内部调用的是【OS_TASK_SW()】完成实际的调度;OSIntExt()内部调用的是【 OSCtxSw() 】实现调度。 5.任务切换其实很简单,由如下2步完成: (1)将被挂起任务的处理器寄存器推入自己的【任务堆栈】。 (2)然后将进入就绪状态的最高优先级的任务的寄存器值从堆栈中恢复到【寄存器】中。 6.任务的5种状态。 【睡眠态(task dormat) 】:任务驻留于程序空间(rom或ram)中,暂时没交给ucos-ii处理。 【就绪态(task ready)】:任务一旦建立,这个任务就进入了就绪态。 【运行态(task running)】:调用OSStart()可以启动多任务。OSStart()函数只能调用一次,一旦调用,系统将运行进入就绪态并且优先级最高的任务。 【等待状态(task waiting)】:正在运行的任务,通过延迟函数或pend(挂起)相关函数后,将进入等待状态。

【中断状态(ISR running)】:正在运行的任务是可以被中断的,除非该任务将中断关闭或者ucos-ii将中断关闭。 7.【不可剥夺型】内核要求每个任务自我放弃CPU的所有权。不可剥夺型调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。 8.当系统响应时间很重要时,要使用【可剥夺型】内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。 9.使用可剥夺型内核时,应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥条件,这一点可以用【互斥型信号量】来实现。 10.【可重入型】函数可以被一个以上的任务调用,而不必担心数据的破坏。 11.可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用【局部变量】,即变量保存在CPU寄存器中或堆栈中。如果使用全局变量,则要对全局变量予以【保护】。 12.每个任务都有其优先级。任务越重要,赋予的优先级应【越高】。 13.μC/OS-Ⅱ初始化是通过调用系统函数【OSIint()】实现的,完成μC/OS-Ⅱ所有的变量和数据结构的初始化。 14.多任务的启动是用户通过调用【OSStart()】实现的。然而,启动μC/OS-Ⅱ之前,用户至少要建立一个应用【任务】。 15. μC/OS-Ⅱ的参数配置文件名为【】。 16.删除任务,是说任务将返回并处于【休眠状态】,并不是说任务的代码被删除了,只是任务的代码不再被μC/OS-Ⅱ调用。 17.μC/OS-Ⅱ要求用户提供【定时中断】来实现延时与超时控制等功能。 18.定时中断也叫做【时钟节拍】,它应该每秒发生10至100次。 19. 时钟节拍的实际频率是由用户的应用程序决定的。时钟节拍的频率越高,系统的负荷就【越重】。 20.μC/OS-II中的信号量由两部分组成:一个是信号量的【计数值】,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的【等待任务表】。用户要在中将OS_SEM_EN开关量常数置成【1 】,这样μC/OS-II 才能支持信号量。 21. μC/OS-II中表示当前已经创建的任务数全局变量名为:【 OSTaskCtr 】。

嵌入式实时操作系统UCOS 2优劣势分析

嵌入式实时操作系统ucos ii的优劣势分析 引言 早在20世纪60年代,就已经有人开始研究和开发嵌入式操作系统。但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所曰益显现的重要性吸引了人们越来越多的注意力。但是,人们所谈论的往往是一些著名的商业内核,诸如VxWorks、PSOS等。这些商业内核性能优越,但价格昂贵,主要用于16位和32位处理器中,针对国内大部分用户使用的51系列8位单片机,可以选择免费的ucos ii。 ucos ii的特点 1.ucos ii是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开。这一点对于用户来说可谓利弊各半,好处在于,一方面它是免费的,另一方面用户可以根据自己的需要对它进行修改。缺点在于它缺乏必要的支持,没有功能强大的软件包,用户通常需要自己编写驱动程序,特别是如果用户使用的是不太常用的单片机,还必须自己编写移植程序。 2.ucos ii是一个占先式的内核,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。这个特点使得它的实时性比非占先式的内核要好。通常我们都是在中断服务程序中使高优先级任务进入就绪态(例如发信号),这样退出中断服务程序后,将进行任务切换,高优先级任务将被执行。拿51单片机为例,比较一下就可以发现这样做的好处。假如需要用中断方式采集一批数据并进行处理,在传统的编程方法中不能在中断服务程序中进行复杂的数据处理,因为这会使得关中断时间过长。所以经常采用的方法是置一标志位,然后退出中断。由于主程序是循环执行的,所以它总有机会检测到这一标志并转到数据处理程序中去。但是因为无法确定发生中断时程序到底执行到了什么地方,也就无法判断要经过多长时间数据处理程序才会执行,中断响应时间无法确定,系统的实时性不强。如果使用μC/OS-II的话,只要把数据处理程序的优先级设定得高一些,并在中断服务程序中使它进入就绪态,中断结束后数据处理程序就会被立即执行。这样可以把中断响应时间限制在一定的范围内。对于一些对中断响应时间有严格要求的系统,这是必不可少的。但应该指出的是如果数据处理程序简单,这样做就未必合适。因为ucos ii要求在中断服务程序末尾使用OSINTEXIT函数以判断是否进行任务切换,这需要花费一定的时间。 3.ucos ii和大家所熟知的Linux等分时操作系统不同,它不支持时间片轮转法。ucos ii是一个基于优先级的实时操作系统,每个任务的优先级必须不同,分析它的源码会发现,ucos ii把任务的优先级当做任务的标识来使用,如果优先级相同,任务将无法区分。进入就绪态的优先级最高的任务首先得到CPU的使用权,只有等它交出CPU的使用权后,其他任务才可以被执行。所以它只能说是多任务,不能说是多进程,至少不是我们所熟悉的那种多进程。显而易见,如果只考虑实时性,它当然比分时系统好,它可以保证重要任务总是优先占有CPU。但是在系统中,重要任务毕竟是有限的,这就使得划分其他任务的优先权变成了一个让人费神的问题。另外,有些任务交替执行反而对用户更有利。例如,用单

嵌入式实时操作系统ucos期末考试题

一、名词解释: 1、OS:操作系统 2、MCU:微控制器 3、ISR:中断服务子程序 4、FIFO:先进先出 5、TCB:Task Control Block,任务控制块 6、API:应用程序接口 7、RTOS:实时操作系统 8、UART:通用异步收发传输器 9、MMU:内存管理单元 10、JTAG:边界调试接口 二、填空题 1、( 优先级抢占和时间片轮转 )是一种运行时间一到就剥夺进程处理器使用权的剥夺式调度。 2、实时系统的两个基本要求:( 逻辑或功能正确 )、时间正确。所谓时间正确是指 (实时系统的计算必须在预定的时间内完成)。 3、临界区是指( 处理时不可分割的代码、每个进程中访问临界资源的那段程序 ) 4、UCOS调用系统延时最小时间单位( 毫秒 ) 5、UCOS配置文件中OS_TICKS_PER_SEC的数值定义为32,含义是(时钟频率为32 hz) 6如果某一个任务不是必须的监控任务,我们一般采用( 动态内存管理 )的机制来创建该任务所需要的变量内存空间,要想能使用这种机制,必须首先将内存交给(操作系统)来统一管理 7、如果系统中某一个资源属于独占资源,n个任务都需要使用,标准的做法是使用(互斥信号量)来解决 8、在UCOS中,优先级用一个数字表示,数字越大表示任务的优先级别越(低) 9、优先级调度的( 任务就绪表 )标志进程抢占处理器的权利大小。 10、(任务控制块)主要用来记录任务的堆栈指针,任务的当前状态,任务的优先级别等一些与任务管理有关的属性的表。 11、临界区是指( 保证共享资源的完整性和可靠性的代码段 )。 12、可重入指的是(是一段代码(如一个函数)可以被多个任务同时调用,而不必担心会破坏数据)。 13、某事件周期不确定,持续时间较短,处理容忍度较长,通常我们采取在(任务就绪表)中发现该事件,在(任务调度)中处理该事件。 14、如果系统中有2个资源,n个任务都需要使用,标准的做法是使用(互斥信号量)来解决。 15、在UCOS中,最低优先级自动赋给( 空闲任务 )这个系统任务。 16、对CPU资源进行分配的两种操作系统常见调度算法为__(任务级调度_)和(中断级调度)。 17、uC/OS中,主要依靠_(任务堆栈_)来保存任务工作环境。

ucOSII实时操作系统共41页

面向二十一世纪的嵌入式系统设计技术 第五讲: ucOS/II 实时操作系统 RTOS(一):ucOS/II 2002 年 1 月任课教员:徐欣 主讲教员:习勇 国防科大电子科学与工程学院 嵌入式系统开放研究小组 博士 博士 1

What is uC/OS? u: Micro C:control uC/OS : 适合于小的、控制器的操作系统 小巧 公开源代码,详细的注解可剥夺实时内核 可移植性强多任务确定性 2002/112

美国人 The S t ory of uC/OS Jean Labrosse 1992 年编写的 商业软件的昂贵 应用面覆盖了诸多领域,如照相机、医疗器 械、音响设备、发动机控制、高速公路电话 系统、自动提款机等 1998 年uC/OS-II ,目前 的版本 uCOS-II 2002/11 uC/OS-II V2.51 3

嵌入式操作系统—uC/OS 概要 内核结构 - 任务以及调度机制 任务间通信 uC/OS 的移植 在PC 机上运行 uC/OS 2002/114

—uC/OS 任务task 嵌入式操作系统 典型的一个无限循环。 void mytask(void *pdata) for (;;) { do something; waiting; do something; 支持64 个任务,每个任务一个特定的优先级。优先级 越高,数字越小 系统占用了两个任务,空闲任务和统计任务。 2002/11 5

嵌入式操作系统—uC/OS 任务的数据结构—任务控制块 任务控制块 OS_tcb ,包括 任务堆栈指针,状 态,优先级,任务 表 位置,任务链表指针 等。 所有的任务控制块分为两条链表,空闲 链表和使用链表。 新任务TCB (1) TCB0 TCB1 next pre ( 2 ) ( 3 ) OSTCBFr eeList 图 4 .3 TCB的 双向 链表 结构 TCBn 空 2002/116

嵌入式实时操作系统ucos期末考试题复习过程

) 一、名词解释: 1、OS:操作系统 2、MCU:微控制器 3、ISR:中断服务子程序 4、FIFO:先进先出 5、TCB:Task Control Block,任务控制块 6、API:应用程序接口 7、RTOS:实时操作系统 # 8、UART:通用异步收发传输器 9、MMU:内存管理单元 10、JTAG:边界调试接口 二、填空题 1、( 优先级抢占和时间片轮转)是一种运行时间一到就剥夺进程处理器使用权的剥夺式调度。 2、实时系统的两个基本要求:( 逻辑或功能正确)、时间正确。所谓时间正确是指 (实时系统的计算必须在预定的时间内完成)。 3、临界区是指( 处理时不可分割的代码、每个进程中访问临界资源的那段程序) ` 4、UCOS调用系统延时最小时间单位( 毫秒) 5、UCOS配置文件中OS_TICKS_PER_SEC的数值定义为32,含义是(时钟频率为32 hz) 6如果某一个任务不是必须的监控任务,我们一般采用( 动态内存管理)的机制来创建该任务所需要的变量内存空间,要想能使用这种机制,必须首先将内存交给(操作系统)来统一管理 7、如果系统中某一个资源属于独占资源,n个任务都需要使用,标准的做法是使用(互斥信号量)来解决 8、在UCOS中,优先级用一个数字表示,数字越大表示任务的优先级别越(低) 9、优先级调度的( 任务就绪表)标志进程抢占处理器的权利大小。 10、(任务控制块)主要用来记录任务的堆栈指针,任务的当前状态,任务的优先级别等一些与任务管理有关的属性的表。 11、临界区是指( 保证共享资源的完整性和可靠性的代码段)。 ( 12、可重入指的是(是一段代码(如一个函数)可以被多个任务同时调用,而不必担心会破坏数据)。 13、某事件周期不确定,持续时间较短,处理容忍度较长,通常我们采取在(任务就绪表)中发现该事件,在(任务调度)中处理该事件。 14、如果系统中有2个资源,n个任务都需要使用,标准的做法是使用(互斥信号量)来解决。 15、在UCOS中,最低优先级自动赋给( 空闲任务)这个系统任务。 16、对CPU资源进行分配的两种操作系统常见调度算法为__(任务级调度_)和(中断级调度)。 17、uC/OS中,主要依靠_(任务堆栈_)来保存任务工作环境。

嵌入式实时操作系统_uCOSII

uC/OS-II
北京邮电大学计算机学院 邝 坚 2011年10月
教材及参考文献
《嵌入式实时操作系统 uC/OS-II(第2 版)》,Jean https://www.doczj.com/doc/7111704016.html,brosse, 邵贝贝, 北航出版 社, 2003年1月

uC/OS-II的主要特点
实时性可确定:绝大多数系统服务的执行时间具有可确定 性,不依赖于用户应用程序Task数目的多少。 多任务、独立栈:最多64个Task,基于优先级抢占调度方 式。每个Task有自身独立的堆栈。 可裁减性:系统最小可裁减到几K到十几K,这种裁减还可 以做到基于函数级。 可移植性:与CPU体系结构相关部分用汇编编写,其他功 能组件CPU无关。 可靠、稳定性:由整个系统设计来保证,市场验证。美国 联邦航空管理局(FAA)认证。 开源代码:内核约5500行C代码。 可固化:面向嵌入式应用。
系统功能
实时内核 任务管理 时间管理 信号量、互斥信号量管理 事件标志组管理 消息邮箱管理 消息队列管理 内存管理 …

Targets x86 68k PPC CPU32 i960 SPARC ARM MIPS XScale …
Typical development configuration
Ethernet
RS-232
Development Host
Target
Typical scenario:
1. Boot target. 4. Download object module. 2. Attach target server. 5. Test & Debug. 3. Edit & compile. 6. Return to 3 or 1 as necessary

嵌入式实时操作系统ucosii课后答案

第一章 1.什么是操作系统?它应具备什么功能? 操作系统是控制其他程序运行,管理系统资源并为用户提供操作界面的系统软件的集合。 功能: 1.计算机硬件的封装和扩充; 2.计算机资源的管理,包括处理器管理、存储器存储空间管理、外部输入输出(I/O)设备管理、文件管理、网络和通信管理、提供用户接口。 2.简述嵌入式操作系统与普通操作系统的区别。 嵌入到对象体系中,为实现对象体系智能化控制的计算机系统,简称嵌入式系统。嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力;嵌入式系统和具体应用有机地结合在一起,它的升级换代也是具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。 3.什么是实时系统?对实时系统有什么要求? 如果一个系统能及时响应外部事件的请求,并能在规定的时间内完成对事件的处理,这种系统称为实时系统。 对实时系统的两个基本要求: 1.实时系统的计算必须产生正确的结果,称为逻辑或功能正确。 2.实时系统的计算必须在预定的时间内完成,称为时间正确。 4.什么是可剥夺内核? 当一个进程正在被处理器所运行时,其他就绪进程可以按照事先规定的规定的规则,强行剥夺正在运行进程的处理器使用权,而使自己获得处理器使用权并得以运行。 5.计算:RM 等三种算法;实时进程的可调度性。 一个事件发生周期为T =200ms ,一般需要运行50ms 才完毕。试按RM 算法确定该进程的优先级别prio 。 答:如果取k=1,根据T=200ms=0.2S ,则 T k prio 1= 结果:prio=5。 假如有三个同时发生的周期型进程:进程1,进程2,进程3,周期分别为P1=70ms ,P2=80ms ,P3=30ms ,它们完成任务的时间分别为:C1=20ms ,C2=15ms ,C3=10ms 。试判断该进程是否为可调度的。 答: 807.0301080157020=++=ρ777 .0)12(3)12(3=-=-n n

uCOSII实时操作系统通信机制之内核分析

μC/OS-II通信机制之内核分析 摘要:本文主要着重对μC/OS-III通信机制的内核分析,研究μC/OS-II内核通信机制的实现方式及实现的技巧,同时分析其中不足之处。 1.引言 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。 μC/OS-II这款操作系统内核简单易学,通过对其源代码的分析,可以加深我们对操作系统内核的理解,为学习linux等大型操作系统打下基础。 2.操作系统中任务间的通信机制 内核中多个任务之间不可避免的存在相互协同的关系,来完成一定的内核功能。这种协同最直观的就是任务间相互通信。。包括VxWorks 等所有的嵌入式操作系统一般都会提供许多任务间通信的方法,通常包括: (1)共享内存,数据的简单共享。 (2)信号量,基本的互斥和同步。 (3)消息队列和管道,同一CPU 内多任务间消息传递。 (4)Socket 和远程调用,任务间透明的网络通信。 (5)Signals,用于异常处理。 在μC/OS-II中设计了五种通讯机制,或者说是同步机制,分别是信号量(semaphore),互斥体(mutual exclusion semaphore),事件组(event flag),邮箱(message box)和队列(queue)。 3. uC/OS-II中通信机制实现的方式分析 在uC/OS-II中是如何通信机制呢?这几种通信机制有什么关系?或者说有什么共同点有什么不同点?在实现上有哪些步骤是相同的?下面将就这几个问题进行分析论述。 我们知道通信机制是发生在任务之间的,换句话说任务与通信机制存在着关联。在内核又是如何处理这种关联呢?通信机制具体来说是信号量,互斥量,邮箱,队列等。通信机制协调的关系一般是针对两个以上的任务,比如说当两个任务互斥的访问共享资源,就需要一个互斥量,这个互斥量就关联着这两个任务。同样的道理,其他通信机制也是关联着两个以上的任务。那么设计内核时就要考虑如何将他们的关系有效协调地统一管理起来。 在内核中是通过一个事件控制块来实现通信机制与任务的联系。这里所说的事件就是指任务间进行通信时传递信号的统称。这里其实是利用到了一种抽象的思想,即将各种通信机制的共同点抽象出来,于是内核就设计了一个事件控制块的数据结构,这个数据结构是所有通信机制都会用到的,这样的设计就节省了不少代码,因为有共同点意味着有重复代码。 既然知道了事件控制块是实现通信机制代码共享的关键,那么下面我们就来分析下它的数据结构。

ucosII嵌入式实时操作系统实验

嵌入式实时操作系统实验报告 多任务的创建及运行 系别计算机与电子系 专业班级电子0901班 学生姓名高傲 指导教师黄向宇 提交日期 2012 年 4 月 1 日

一、实验目的 1.熟悉并掌握基于uC/OS-II的开发工具、工程管理工具 2.了解uC/OS-II的文件结构、文件之间的依赖关系。 3.掌握创建多任务的方法及对任务进行相关操作的技巧。 二、实验内容 1.建立并熟悉Borland C 编译及调试环境 2.使用课本配套光盘中的例程运行并修改,观察多任务的运行状态,尝试对其中的任务进行挂起并恢复、删除及查询等操作,观察运行结果. 3.完成课后练习题,P92页13-17题,至少完成其中任意两题。 三、实验原理 1.编译环境 Turbo C是Borland公司开发的DOS下16位C语言集成开发工具。有2.0和3.0版本,2.0只支持C语言编译不支持鼠标操作,而3.0版本可以支持C/C++两种语言编译,而且还支持鼠标和//注释方式;TC2.0是80年代开发的,使用了很多年一直到现在WINDOWS系统才逐渐退出舞台。Turbo C2.0不仅是一个快捷、高效的编译程序,同时还有一个易学、易用的集成开发环境。使用Turbo C2.0无需独立地编辑、编译和连接程序,就能建立并运行C语言程序。因为这些功能都组合在Turbo 2.0的集成开发环境内,并且可以通过一个简单的主屏幕使用这些功能。 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要

后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile 就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。 make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux 下GNU的make。 ?Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。 ?而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。 ?makefile 文件是许多编译器--包括 Windows NT 下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。 2. uC/OS-II 文件体系 uC/OS-II 包括三个部分: 1)核心代码部分,这部分代码与处理器无关,包括七个源代码文件和一个头文件,这七个源代码文件负责的功能分别是内核管理、事件管理、消息队列管理、存储管理、消息管理、信号量处理、任务调度和定时管理。2)设置代码部分,包括两个头文件,用来配置事件控制块的数目以及是否包含消息管理相关代码等。 3)处理器相关的移植代码部分,这部分包括一个头文件,一个汇编文件和一个C 代码文件,在uC/OS-II 的移植过程中,用户所需要关注的就是这部分文件。 3. uC/OS-II 任务的创建,OSTaskCreate() 想让μC/OS-Ⅱ管理用户的任务,用户必须要先建立任务。用户可以通过传递任务地址和其它参数到以下两个函数之一来建立任务:OSTaskCreate() 或OSTaskCreateExt()。OSTaskCreate()与μC/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的扩展版本,提供了一些附加的功能。用两个函数中的任何一个都可以建立任务。任务可以在多任务调度开始前建立,也可以在其它任务的执行过程中被建立。在开始多任务调度(即调用OSStart())前,用户必须建立至

uCOS-II实时操作系统内核源代码注释

/* ********************************************************************* ************************************ * uC/OS-II * 实时操作内核 * 内存管理 * * (c) 版权 1992-2002, Jean J. Labrosse, Weston, FL * All Rights Reserved * * 文件名 : OS_MEM.C * 作者 : Jean J. Labrosse * 注释 : 彭森 2007/9/2 ********************************************************************* ************************************ */ #ifndef OS_MASTER_FILE #include "includes.h" #endif #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0) /* ********************************************************************* ************************************ * 创建一个内存分区 * * 说明 : 创建一个固定大小的内存分区,这个内存分区通过uC/OS-II 管理。 * * 参数 : addr 内存分区的起始地址 * * nblks 来自分区的内存块的数目. * * blksize 每个内存分区中的内存块的大小. * * err 指向一个变量包含错误的信息,这个信息通过这个 函数或其他来设置: * * OS_NO_ERR 内存分区创建正确返回值. * OS_MEM_INVALID_ADDR 指定的是无效地址作为分 区的内存存储空间 * OS_MEM_INVALID_PART 没有未使用的有用的分区 * OS_MEM_INVALID_BLKS 使用者指定一个无效的内

相关主题
文本预览
相关文档 最新文档