嵌入式操作系统μCOS-II在C8051F040单片机中移植研究.doc

嵌入式操作系统μCOS-II在C8051F040单片机中移植研究

收藏

压缩包内文档预览:(预览前20页/共24页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:512654    类型:共享资源    大小:145.89KB    格式:RAR    上传时间:2015-11-11 上传人:QQ28****1120 IP属地:辽宁
6
积分
关 键 词:
毕业设计
资源描述:
嵌入式操作系统μCOS-II在C8051F040单片机中移植研究,毕业设计
内容简介:
目 录 摘要 . . . .1 关键词 . .1 Abstract . .2 Key words . .2 1. 绪论 . 3 1.1 嵌入式操作系统 . . .3 1.1.1 嵌入式系统的发展状况 .3 1.1.2 嵌入式操作系统的分类和发展 . .5 1.2 本课题研究的目的和意义 . . .5 2. C/OS-嵌入式实时操作系统 . 6 2.1 选择 C/OS-的原因 . .6 2.2 C/OS-操作系统内容简介 . .7 2.2.1 内核结构 . .7 2.2.2 任务管理 . 8 2.2.3 时间管理 . 10 2.2.4 任务间通信与同步 . 11 2.2.5 内存管理 . 12 3. C8051F系列单片机的特点 .13 3.1 C8051F系列单片机的特点 . 13 3.2 C8051F040的性能概述 . .13 4. C/OS-在 C8051F040上的移植 . .15 4.1 C/OS-硬件平台的选择 . . 15 4.2 C/OS-移植内容 . .15 4.2.1 OS_CPU H头文件的修改 .16 4.2.2 OS_CPU_A ASM汇编文件的修改 17 4.3 C/OS-在 C8051F040上的运行测试 . . 19 4.4 基于 C/OS-的 C8051F040运用系统开发 . . 21 5. 结论 . 22 参考文献 23 nts 1 嵌入式操作系统 C/OS-II在 C8051F040单片机中移植研究 摘要 : 随着现代控制技术、多媒体技术与 Internet的应用和普及,以计算机技术、芯 技术和软件技术为核心的数字化技术得到了迅猛发展,掀起了一场数字化技术革命,促使消费电子、计算机、通信一体化趋势的 步伐加快,嵌入式系统技术成为发展重点。 本文主要介绍了嵌入式实时操作系统 C/OS-在 C8051 F040 上的移植过程。首先 ,描述了嵌入式系统的发展状况;第二部分,介绍了 C/OS-操作系统的内容,包括内核结构,任务管理,时间管理,任务间通信与同步和内存管理; 第三部分,介绍了 C8051F 系列单片机的特点;第四部分,详细的叙述了 C/OS-移植的过程。 可以预见,由于 C/OS-具有不可替代的优点, C/OS-将在以后的嵌入式系统设计中得到广泛应用。 关键词 : C/OS- ; C8051F040; 嵌入式实时操作系统 ; 移植 nts 2 Embedded operating system C / OS-II in the C8051F040 MCU Transplantation Abstract: With application and popularization of modern control technology , multimedia technology and Internet, the digitized technology taking computer technology , chip technology and software engineering as the core has got swift and violent development, raise digitized technical revolution, impel paces of consuming electron , computer , integrated trend of communication to accelerate, embedded systematic technology becomes the developing focus。 This dissertation mainly introduces C/OS- transplantation course on C8051 F040 of embedded real-time operating system; and secondly, introduced C/OS- II operating system elements, including core structure, task management, time management, intertask communication and synchronization, and memory management.; The third part, on the characteristics of C8051F Series MCU; fourth part of a detailed description of the C/OS- transplant process. It can be predicted that as C/OS- irreplaceable advantages C/OS- will be at a later embedded systems design widely used. Key words: C/OS- ;C8051F040;Embedded Real-time OS;Porting nts 3 1 绪论 1.1 嵌入式操作系统 1.1.1 嵌入式系统的发展状况 嵌入式系统诞生于微型机时代,随着微型机技术的完善和发展,微型机出现了嵌入式应用环境,传统电子设备的智能化不同于通用机的嵌入式应用。现代计算机有通用计算机和嵌入式计算机两大分支,他们是两个完全不同的计算机 技术领域。通用计算机系统是高速海量数值计算,嵌入式系统是对象嵌入和智能化控制。分工后两个分支呈现高速发展的态势。 嵌入式系统是嵌入到对象体系中的专用计算机应用系统。其嵌入性是指非独立存在的物理空间,专用性是满足对象体系要求的软硬件裁剪,它是智能化的工具保证。由于传统电子系统的嵌入式应用环境是超小型、超低价、高可靠的嵌入式计算机,这就需要寻求芯片化的彻底解决办法,单片微型计算机应运而生,走单片机独立发展道路成了必然选择。 一个嵌入式系统包括硬件和软件两部分。硬件包括微处理器、存储器及外设器件等,而软件包括操作 系统软件和应用程序。为了提高系统性能,除了需要对硬件和软件进行优化外,还会引入总线的概念。与普通计算机系统类似,嵌入式系统仍然包括微处理器、存储设备和输入、输出设备,但是它与一般的 PC系统还有很大的区别。一般来讲,嵌入式系统在功耗、体积、成本、可靠性、速度、处理能力、电磁兼容性等方面均受到应用要求的制约。 作为二十世纪人类最伟大的发明之一,计算机在期待着第五代出现的同时,也迈入了其另一个新阶段 后 PC时代。后 PC时代的到来,使得人们开始越来越多的接触到一个新的概念 嵌入式产品,如手机、 PDA、数控机床等 。其实,嵌入式操作系统很早以前就出现就得到了广泛应用,如微型计算器、 PC中的键盘,都是最典型最简单的嵌入式系统。如果说PC机的出现构建了信息产业的框架,推动了整个信息产业和人类文明的发展和前进,那么嵌入式系统的发展将会更加完善这个框架,并成为信息产业发展的加速器。 根据 IEEE 的定义,嵌入式系统是控制、监视或者辅助设备机器和车间运行的装置,这主要是从产品的应用角度加以定义的。按照目前业界和学术界对嵌入式系统的普遍看法,嵌入式操作系统被定义为以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、 可靠性、成本、体积、功耗严格要求的专用计算机系统。 嵌入式系统技术是将先进的计算机技术、半导体技术及电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。综观嵌入式系统技术的发展,大致经历了以下三个阶段: ( 1)第一阶段是嵌入式技术的早期阶段。 嵌入式操作系统的发展历史悠久,可以说它是伴随着数字计算机的出现而诞生的。但早期的计算机主要器件由电子管、晶体管等组成,体积过于庞大,因而阻碍了嵌入式系统的发展。早期系统以功能简单的专用计算机或单片 机为核心的可编程控制器形式存在,具有监测、伺服、设备指示等功能。这一阶段系统的主要特点是系统结构和功能都相对单一,处理效率较低,存储容量较小,几乎没有用户接口,比较适合于各类专用领域。 ( 2) 第二阶段是以嵌入式处理器 /控制器和嵌入式操作系统为标志的嵌入式系统。 nts 4 随着并行技术、先进控制、流水线、强有力的中断系统、操作系统等技术的发展,特别是在微处理器问世以后,嵌入式系统得到了真正的发展。微处理器的广泛应用形成了一个广阔的嵌入式应用市场。 这一阶段系统的主要特点是计算机硬件出现了高可靠、低功耗的嵌入式处理器; 同时,各类商业嵌入式操作系统开始出现并得到逊色发展,嵌入式操作系统能运行于各种不同类型的微处理器上,兼容性好;操作系统内核小、效率高,并具备高度的模块化和扩展性;具备文件和目录管理、设备支持、多任务、网络支持、图形窗口以及用户界面等功能;具备大量的应用程序接口,开发应用程序简单;嵌入式应用软件丰富。 ( 3)第三阶段是以芯片技术和 Internet技术为标志的嵌入式系统。 微电子技术发展迅速, SOC 技术使嵌入式系统越来越小,功能越来越强。随着 NOC 的出现,以及 Internet 技术与信息家电、工业控制技术等的结合 日益密切,嵌入式系统的网络化趋势将推动其更加快速的发展。 近几年嵌入式操作系统技术的发展有以下几个显著的变化: ( 1)新的处理器越来越多,一方面,嵌入式操作系统自身结构的设计更易于移植,以便在短时间内支持更多种微处理器;另一方面,系统应能使用驱动程序开发与配置环境,造就一个新的 BSP和驱动程序结构,以适应微处理器不断升级变化所产生的需求。 ( 2)开放源码之风已波及嵌入式系统厂家。数量相当多的嵌入式系统厂家出售产品时,就附加了源程序代码并含生产版税。 ( 3)后 PC时代更多的产品使用嵌入式操作系统,它们对实时性 要求并不高。 ( 4)电信设备、控制系统要求的高可靠性,对嵌入式系统提出了新的要求。 ( 5)各类通用机上使用的新技术、新观念正逐步移植到嵌入式系统中。 ( 6)各种嵌入式 Linux操作系统正迅速发展,已经形成了能与 Windows CE等嵌入式操作系统进行有力竞争的局面。 ( 7)面向定制趋势,在系统级整合改造并支持应用特制的性能,即在定制商品化的软硬件上提供高性能和高可靠性系统服务,将操作系统的功能和内存需求定制成每个应用所需的系统。 ( 8)嵌入式系统的多媒体化和网络化方向趋势。 ( 9)基于知识的嵌入式系统也已开 始出现。 随着因特网技术的成熟、带宽的提高, ICP 在网上提供的信息内容日趋丰富、应用项目多种多样,嵌入式电子设备的功能不再单一,电气结构也更复杂。 后 PC 时代,计算机将无处不在,家用电器将向数字化和网络化发展,电视机、冰箱、微波炉、电话等都将嵌入计算机,并通过家庭控制中心与 Internet 联接,转变为智能网络家电,还可以实现远程医疗、远程教育等。中国拥有最大的手机用户,而掌上电脑和 PDA等因为易于使用,携带方便、价格便宜而得到了快速发展, PDA与手机已呈现融合趋势。用掌上电脑或 PDA上网,人们可以随时随 地获取信息。新的手持设备将使无线互联访问成为更加普遍的现象。与互联网联接,结合音频应用,如 MP3功能,将会促使移动计算设备市场创造新的销售记录。整合手机模块,为移动计算设备提供语音功能,也将是大势所趋。 nts 5 1.1.2 嵌入式操作系统的分类和发展 国外的嵌入式操作系统有 VXWORK、 QNX、 PALMOS、 Windows CE、 Linux、 C/OS-等,国内有基于 Windows CE的机顶盒系统和 HOPEN OS等。 从应用方面分为面向低端设备的嵌入式操作系统和面向高端设备的嵌入式操作系统。传统的嵌入式系统主 要是面向低端设备的操作系统,如各种工业系统、汽车发动机系统和防报死系统、民用微波炉、洗衣机、冰箱等。这类应用客观上要求操作系统体积小,实时性强,开放源代码的实时操作系统 C/OS就属这类。芯片技术的发展使得高端设备也成为嵌入式系统。这类系统通常具体和计算机主板相似的结构,使用的 CPU是功能强大的 16位和 32位微处理器。信息化家电、掌上电脑、机顶盒、 WAP手机, WinCE、 PALMOS和 Linux便属于这类操作系统。 嵌入式软件是数字化产品的核心, PC的出现使桌面软件得到了飞速发展,而数字化产品的广泛普及必将 为嵌入式软件产业的蓬勃发展提供无穷的推动力。操作系统控制着应用程序和硬件之间的交互作用,应用程序控制着系统的运行。 随着嵌入式应用系统架构的开发越来越复杂,嵌入式操作系统软件的开发往往开始得很晚,导致软硬件的集成被推迟,所以,很可能导致研发出有设计错误的产品,错失市场机会,造成设计反复、成本高昂等问题。因此,软件成为设计开发的关键,软件需要在标准化平台上运行,软件发展需要工具支持,软件发展不断促进标准的建立,如 MIPI、 OpenGL、 JSR184等。 1.2 本课题研究的目的和意义 嵌入式操作系统是嵌入式系 统发展到一定阶段的产物 ,是为了满足日益复杂的嵌入式系统设计的要求而产生的。随着微处理器功能的不断提升 ,嵌入式操作系统的应用范围也变得越来越强大。对基于特定嵌入式操作系统上的软件设计研究已成为了近年来的热点 ,并且对于嵌入式操作系统在实际工程中的推广应用有着重要的意义。 本课题研究在存储器资源受限,但应用非常广泛的 8 位单片机(以 C8051F040 为例)中移入嵌入式 C/OS-操作系统,为 8位单片机的应用提供新的空间。 nts 6 2 C/OS-嵌入式实时操作系统 2.1 选择 C/OS-的原因 C/OS是一个实时操作系统,是由 Jean J.Labrosse于 1992年首先设计编写的。 1999年,Labrosse又编写了 C/OS-。该操作系统是一个高度简洁、可 ROM固化、可裁剪、实现抢先式实时多任务的操作系统内核,可用于各种微处理机系统。 C/OS-可管理多达 64 个任务,并可提供如下服务: ( 1)信号灯 ( 2)互斥式信号灯 ( 3)事件标志 ( 4)消息队列 ( 5)任务管理 ( 6)存储块管理 ( 7)定时管理 实时执行体一般包括一套支持实时系统所必需的机制。在嵌入式应用中,这一套机制被称为实时执 行体或实时操作系统内核。操作系统就是一个实时执行体。可裁剪的体系结构是指一个软件系统能够支持多种应用而无需在接口上做很大的变动。因此,可以开发出成本低、品种多的软件产品。 C/OS-的特点如下: (1) 开放的源代码 (2) 可移植性:绝大部分用 ANSI C写,和硬件相关的用汇编语言写。 (3) 可固化性:只要有合适的软件工具就可以 C/OS-嵌入到产品中去。 (4) 可裁剪性:产品可以只调用很少的 C/OS-,这样可以减少存储空间,这是依靠条件编译来实现的。 (5) 占先式: C/OS-是运行就 绪条件下优先级最高的任务。 (6) 多任务: C/OS-可以管理 64个任务, 8个给系统。 (7) 可确定性: C/OS-函数调用与服务执行时间是可知的。 (8) 任务栈:使用 C/OS-栈空间校验函数可以确定任务有多少栈空间。 (9) 系统服务: C/OS-提供例如邮箱、信号量、消息队列等系统服务。 (10) 中断管理:中断足以使正在执行的任务暂时挂起。 (11) 稳定性和可靠性: C/OS-是基于 C/OS的,已有几百个商业应用。 对于国内大多数使用 8051 系列单片机的用户来说, C/OS-具 有很高的性价比,很适合这样的嵌入式应用。 C/OS-是基于优先级的抢占式实时多任务操作系统,具有如下特点:开放源代码,可移植性,可裁剪性,良好的稳定性和可靠性。 C/OS-很容易地移植到各种各样的 CPU 平台上,只要这一种微处理机能满足以下条件即可:具有堆栈指针,可执行 CPU 内部寄存器的入栈、出栈指令;所使用的 C 编译器支持内嵌汇编指令,或者 C编译器支持可扩展、可连接汇编模块,使得中断控制能够在 C语言汇总实现。 nts 7 C/OS-可以在绝大多数的 8位、 16位、 32位,甚至是 64位的微处理机系统或数字信号处理器 系统中运行。 2.2 C/OS-操作系统内容简介 2.2.1 内核结构 就像所有的实时内核一样, C/OS- 需要在存取代码核心区时禁止中断,在存取完成后再将中断重新打开。禁止中断是为了保护核心区代码,以免出现多个任务或中断服务程序同时进入该代码区。中断禁止时间是实时内核的一项最重要的指标,因为它影响着系统对实时事件的响应能力。 C/OS-试图将这段中断禁止时间减至最小。但是,这在很大程度上还取决于系统的CPU 结构,以及编译器生成的代码质量。 CPU 通常提供禁止 /允许中断的汇编指令,而用户的编译器必 须支持从 C语言中直接执行这种操作。有一些编译器允许用户在 C原码中插入汇编语句,这样,就使得插入允许和禁止中断的指令非常方便。 为了将由于上述编译器的差异而导致的中断设置差异隐藏起来, C/OS-了两个宏来实现对中断的允许和禁止: OS_ENTER_CRITICAL( )和 OS_EXIT_CRTICAL( )。这两个宏的实现是由 CPU决定的,它们在 os_cpu.h的头文件中定义,每种 CPU都会在 os_cpu.h中移植实现这个宏。 OS_ENTER_CRITICAL( )和 OS_EXIT_CRTICAL( )可 以有三种不同的实现方法。具体使用哪种,取决于用户的 CPU能力。用户可通过 #define OS_CRITICAL_METHOD 来定义选用一种实现方法。 第一种方法: #define OS_CRITICAL_METHOD1 这也是最简单的一种实现 OS_ENTER_CRITICAL( )和 OS_EXIT_CRTICAL( )的方法。如果用户在中断禁止的情况下调用了一个 C/OS-函数,而在从一个 C/OS-函数返回时,中断将被允许。但是,如果用户在调用 C/OS-之前已禁止了中断,而一般在调用返回以后仍要求 禁止中断。 第二种方法: #define OS_CRITICAL_METHOD2 这种实现方法在实现 OS_ENTER_CRITICAL( )时,是将禁止的中断状态保留在堆栈中,然后禁止中断。而 OS_EXIT_CRTICAL( )的实现只需要简单地将中断状态从堆栈中恢复出来。通过这种方案,无论是在中断禁止时,还是中断允许时调用 C/OS-服务,都可以在该调用前后保留中断状态。 第三种方法: # define OS_CRITICAL_METHOD3 有些编译器提供了一些功能扩展,允许用户获取 CPU状态字,并可以将 它存入函数的局部变量中。 C/OS-代码主要由 C语言实现,而 C语言中的数据类型一般与硬件平台所对应的编译器有关。为了实现在各种硬件平台上的可移植性, C/OS-了自己定义的基本数据类型。 C/OS-库函数可以分为以下几类:任务控制类:用于实现 C/OS-启动、任务管理、任务调度、任务优先级设置等功能。动态内存管理类:用于实现 C/OS-内存的动态管理。用 C/OS-时,最好采用 C/OS-的内存管理函数。 为了使 C/OS-能管理用户任务,用户必须在建立一个任务的时候,将任务的起始地nts 8 址与其 它参数一起传给下面两个函数中的一个: OSTastCreat 或 OSTaskCreatExt()。OSTaskCreateExt()是 OSTaskCreate()的扩展,扩展了一些附加的功能。 图 2.1是 C/OS-控制下的任务状态转换图。在任一给定的时刻,任务的状态一定是在这五种状态之一。 图 2-1 任务状态转换图 2.2.2 任务管理 任务可以是一个无限的循环,也可以是在一次执行完毕后被删除掉。这里要注意的是,任务代码并不是被真正的删除了,而只是 C/OS-不再理会该任务代码,所以该任务代码不会 再运行。任务看起来与任何 C函数一样,具有一个返回类型和一个参数,只是它从不返回。任务的返回类型必须被定义成 void型。这里提到的函数可以在 OS_TASK文件中找到。其内容包括如何在用户的应用程序中建立任务、删除任务、改变任务的优先级、挂起和恢复任务,以及获得有关任务的信息。 C/OS-可以管理多达 64 个任务,并从中保留了四个最高优先级和四个最低优先级的任务供自己使用,所以用户可以使用的只有 56 个任务。任务的优先级越高,反映优先级的值则越低。在最新的 C/OS-中,任务的优先级数也可作为任务的标识符使用 。想让 C/OS-管理用户的任务,用户必须要先建立任务。 用户可以通过传递任务地址和其它参数到以下两个函数之一来建立任务: OSTaskCreate() 或 OSTaskCreateExt()。 OSTaskCreate()与 C/OS 是向下兼容的, OSTaskCreateExt()是OSTaskCreate()的扩展版本,提供了一些附加的功能。用两个函数中的任何一个都可以建立任务。 任务可以在多任务调度开始前建立,也可以在其它任务的执行过程中被建立。在开始多任务调度 (即调用 id 参数为要建立的任务创建一个特殊 的标识符。该参数在 C/OS 以后的升级版本中可能会用到,但在 C/OS-中还未使用。这个标识符可以扩展 C/OS-功能,使nts 9 它可以执行的任务数超过目前的 64 个。 pbos 是指向任务的堆栈栈底的指针,用于堆栈的检验。 stk_size用于指定堆栈成员数目的容量。也就是说,如果堆栈的入口宽度为 4字节宽,那么 stk_size为 10000是指堆栈有 40000个字节。该参数与 pbos一样,也用于堆栈的检验。 pext是指向用户附加的数据域的指针,用来扩展任务的 OS_TCB。每个任务都有自己的堆栈空间。堆栈必须声明 为 OS_STK类型,并且由连续的内存空间组成。用户可以静态分配堆栈空间 (在编译的时候分配 )也可以动态地分配堆栈空间 (在运行的时候分配 )。用户可以用 C编译器提供的 malloc()函数来动态地分配堆栈空间,在动态分配中,用户要时刻注意内存碎片问题。特别是当用户反复地建立和删除任务时,内存堆中可能会出现大量的内存碎片,导致没有足够大的一块连续内存区域可用作任务堆栈,这时 malloc()便无法成功地为任务分配堆栈空间C/OS- 支持的处理器的堆栈既可以从上 (高地址 )往下 (低地址 )长也可以从下往上长。 用户在调用 OSTaskCreate()或 OSTaskCreateExt()的时候必须知道堆栈是怎样长的,因为用户必须得把堆栈的栈顶传递给以上两个函数,当 OS_CPU.H文件中的 OS_STK_GROWTH置为 0时,用户需要将堆栈的最低内存地址传递给任务创建函数。任务所需的堆栈的容量是由应用程序指定的。用户在指定堆栈大小的时候必须考虑任务所调用的所有函数的嵌套情况,任务所调用的所有函数会分配的局部变量的数目,以及所有可能的中断服务例程嵌套的堆栈需求。另外,堆栈必须能储存所有的 CPU寄存器。有时候决定任务实际所需的堆栈空间 大小是很有必要的。因为这样用户就可以避免为任务分配过多的堆栈空间,从而减少自己的应用程序代码所需的 RAM(内存 )数量。 C/OS-提供的 OSTaskStkChk()函数可以提供这种有价值的信息。 为了使用 C/OS-的堆栈检验功能,必须要 做以下几件事情:在 OS_CFG.H 文件中设OS_TASK_CREATE_EXT为 1。用 OSTaskCreateExt()建立任务,并给予任务比实际需要更多的 内 存 空 间 。 在 OSTaskCreateExt() 中 , 将 参 数 opt 设 置 为OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR。将想检验的任务的优先级作为OSTaskStkChk()的参数并调用之。 OSTaskStkChk()顺着堆栈的栈底开始计算空闲的堆栈空间大小,具体实现方法是统计储存值为 0的连续堆栈入口的数目,直到发现储存值不为 0的堆栈入口。注意堆栈入口的储存值在进行检验时使用的是堆栈的数据类型。 有时候删除任务是很有必要的。删除任务 ,是说任务将返回并处于休眠状态,并不是说任务的代码被删除了,只是任务的代码不再被 C/OS-调用。任务的删除意味着:它的任务控制块从 OSTCBList链表中 移到 OSTCBFreeList,这样时钟节拍函数中就不会处理它了,这样调度把它置入就绪表的可能性就没了;如果它已经处于就绪表中,那么它将被移出,这样调度器函数就不会处理它,这样它被调度运行的机会就没了;在建立任务的时候会分配给任务一个优先级。在程序运行期间,用户可以通过调用 OSTaskChangePrio()来改变任务的优先级。换句话说,就是 C/OS-允许动态的改变任务的优先级。 用户不能改变空闲任务的优先级,但可以改变调用本函数的任务或者其它任务的优先级。为了改变调用本函数的任务的优先级,可以指定该任 务当前的优先级或 OS_PRIO_SELF,OSTaskChangePrio()会决定该任务的优先级。用户还必须指定任务的新优先级。因为 C/OS-不允许多个任务具有相同的优先级,所以 OSTaskChangePrio()需要检验新优先级是否是合法的。 nts 10 2.2.3 时间管理 C/OS-要求提供定时中断来实现延时与超时控制等功能。这个定时中断叫做时钟节拍,它应该每秒发生 10至 100次。时钟节拍的实际频率是由用户的应用程序决定的。时钟节拍的频率越高,系统的负荷就越重。时钟的 中断服务子程序和节时钟节函数 OSTimeTick 该函数用于通知 C/OS-发生了时钟节拍中断。这里主要讲述五个与时钟节拍有关的系统服务: (1) OSTimeDly() (2) OSTimeDlyHMSM() (3) OSTimeDlyResume() (4) OSTimeGet() (5) OSTimeSet() C/OS-提供了这样一个系统服务:申请该服务的任务可以延时一段时间,这段时间的长短是用时钟节拍的数目来确定的。实现这个系统服务的函数叫做 OSTimeDly()。调用该函数会使 C/OS-进行一次任务调度,并且执行下一 个优先级最高的就绪态任务。任务调用OSTimeDly()后,一旦规定的时间期满或者有其它的任务通过调用 OSTimeDlyResume()取消了延时,它就会马上进入就绪状态。只有当该任务在所有就绪任务中具有最高的优先级时,它才会立即运行。 OSTimeDly()虽然是一个非常有用的函数,但应用程序需要知道延时时间对应的时钟节拍的数目。用户可以使用定义全局常数 OS_TICKS_PER_SEC 的方法将时间转换成时钟段,但这种方法有时显得比较愚笨。如果增加了 OSTimeDlyHMSM()函数后,用户就可以按小时(H)、分 (M)、秒 (S)和毫秒 (m)来定义时间了,这样会显得更自然些。与 OSTimeDly()一样,调用 OSTimeDlyHMSM()函数也会使 C/OS-进行一次任务调度,并且执行下一个优先级最高的就绪态任务。任务调用 OSTimeDlyHMSM()后,一旦规定的时间期满或者有其它的任务通过调用 OSTimeDlyResume()取消了延时,它就会马上处于就绪态。同样,只有当该任务在所有就绪态任务中具有最高的优先级时,它才会立即运行。 C/OS-允许用户结束延时正处于延时期的任务。延时的任务可以不等待延时 期满,而是通过其它任务取消延时来使自己处于就绪态。这可以通过调用 OSTimeDlyResume()和指定要恢复的任务的优先级来完成。实际上, OSTimeDlyResume()也可以唤醒正在等待事件的任务,虽然这一点并没有提到过。在这种情况下,等待事件发生的任务会考虑是否终止等待事件。 无论时钟节拍何时发生, C/OS-都会将一个 32位的计数器加 1。这个计数器在用户调用 OSStart()初始化多任务和 4,294,967,295个节拍执行完一遍的时候从 0开始计数。在时钟节拍的频率等于 100Hz的时候,这个 32位的计数器每隔 497天就重新开始计数。 用户可以通过调用 OSTimeGet()来获得该计数器的当前值。也可以通过调用 OSTimeSet()来改变该计数器的值注意,在访问 OSTime 的时候中断是关掉的。这是因为在大多数 8 位处理器上增加和拷贝一个 32位的数都需要数条指令,这些指令一般都需要一次执行完毕,而不能被中断等因素打断。 nts 11 2.2.4 任务间通信与同步 在 C/OS- 中,有多种方法可以保护任务之间的共享数据和提供任务之间的通讯。这里只讲其中的两种:一是利用宏 OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()来关闭中断和打开中断。当两个任务或者一个任务和一个中断服务子程序共享某些数据时,可以采用这种方法。 二是利用函数 OSSchedLock()和 OSSchedUnlock()对 C/OS-II 中的任务调度函数上锁和开锁。用这种方法也可以实现数据的共享。 图 2-2 事件控制块的使用 图 2.2表示任务和中断服务子程序之间是如何进行通讯的。一个任务或者中断服务子程序可以通过事件控制块 ECB( Event Control Blocks)来向另外的任务发信号。这里,所有的信号都被看成是事件 ( Event)。这也说明为什么上面把用于通讯的数据结构叫做事件控制块。 一个任务还可以等待另一个任务或中断服务子程序给它发送信号。只有任务可以等待事件发生,中断服务子程序是不能这样做的。对于处于等待状态的任务,还可以给它指定一个最长等待时间,以此来防止因为等待的事件没有发生而无限期地等下去。 nts 12 多个任务可以同时等待同一个事件的发生。在这种情况下,当该事件发生后,所有等待该事件的任务中,优先级最高的任务得到了该事件并进入就绪状态,准备执行。上面讲到的事件,可以是信号量、邮箱或者消息队列等。当事件控制块是一个信号 量时,任务可以等待它,也可以给它发送消息。 2.2.5 内存管理 在 ANSI C中可以用 malloc()和 free()两个函数动态地分配内存和释放内存。但是,在嵌入式实时操作系统中,多次这样做会把原来很大的一块连续内存区域,逐渐地分割成许多非常小而且彼此又不相邻的内存区域,也就是内存碎片。由于这些碎片的大量存在,使得程序到后来连非常小的内存也分配不到。在任务堆栈中,讲过用 malloc()函数来分配堆栈时,也讨论过内存碎片的问题。另外,由于内存管理算法的原因, malloc()和 free()函数执行时间是不确定的。 在 C/OS- 中,操作系统把连续的大块内存按分区来管理。每个分区中包含有整数个大小相同的内存块。利用这种机制, C/OS- 对 malloc()和 free()函数进行了改进,使得它们可以分配和释放固定大小的内存块。这样一来, malloc()和 free()函数的执行时间也是固定的了。 如图 2.3,在一个系统中可以有多个内存分区。这样,用户的应用程序就可以从不同的内存分区中得到不同大小的内存块。但是,特定的内存块在释放时必须重新放回它以前所属于的内存分区。 显然,采用 这样的内存管理算法,上面的内存碎片问题就得到了解决。为了便于内存的管理,在 C/OS- 中使用内存控制块( memory control blocks)的数据结构来跟踪每一个内存分区,系统中的每个内存分区都有它自己的内存控制块。 图 2-3 内存分区 nts 13 3 C8051F系列单片机的特点 3.1 C8051F系列单片机的特点 Cygnal公司推出的 C8051F系列单片机将 80C51系列单片机从 MCU推向了 SOC(片上系列)时代,其主要特点是: 指令运行速度大大提高。 C8051F系列采用 CIP-51的 CPU模式,指令以时钟周期为运行单位。与 8051相比,相同的时钟下,单周期指令运行速度为原来的 12倍;全指令集平均运行速度为原来的 9.5倍。 I/O 从固定方式到交叉开关配置。 C8051F 系列采用开关网络以硬件方式实现 I/O 端口的灵活配置。在这种通过交叉开关配置的 I/O 端口系统中,单片机外部为通用 I/O 口,内部有输入 /输出的电路单元,通过相应的配置寄存器控制的交叉开关配置到所选择的端口上。 为单片机提供了一个完善 的时钟系统。当程序运行时,可实现内外时钟的动态切换。 从传统的仿真调试到基于 JTAG 接口的在系统调试。 C8051F 的 JTAG 接口不仅支持FLASH ROM的读 /写操作及非侵入式在系统调试,而且它的 JTAG逻辑还为在系统测试提供了边界扫描功能。 从引脚复位到多源复位。 C8051F的多复位源提供了上电复位、掉电复位、外部引脚复位、软件复位、时钟检测复位、比较 0 复位、 WDT 复位和引脚配置复位。众多的复位源为保障系统的安全、操作的灵活以及零功耗系统设计 带来极大的好处。 3.2 C8051F040的性能概述 C8051F040 在一个芯片内集成了构成单片机数据采集或控制系统所需要的几乎所有的模拟和数字外设及其他功能部件。它的供电电压为 2.73.6V,带有内部可编程振荡器。 C8051F040的 A/D转换部分包括:一个 12位 ADCO子系统,可以测量 12路外部输入和 1路内部温度传感器输出,最高转换速度为 100KS/s;一个 8 位 ADC1 子系统,可以测量 8 路外部输入,最高转换速度为 500KS/s。 C8051F040的 ADC有单端输入和差分输入两种测量方式,另外它还 集成了跟踪保持电路和可编程窗口检测器。同时, C8051F040有两个 12位电压方式 DAC。每个 DAC的输出摆幅均为 0VREF(对应的输入码范围是 0x0000Xfff)。 C8051F040 的内核采用流水线指令结构, 70%的指令的执行时间为 1 个或 2 个系统时钟周期,它的最高时钟频率可达 25MHz。同时,它具有 64KB的 FLASH,可以进行在系统编程,扇区大小 512B,另外,它还有 64KB的外部数据存储器接口,可以编程为复用和非复用方式。 C8051F040 有 8B 宽的端口 I/O,所有口线均耐 5V电压。它可以同 时使用 SMBus, SPI以及 2个 UART串口。另外,它还有可编程的 16 位计数器 /定时器阵列, 5个捕捉 /比较模块, 5个通用 16位计数器 /定时器以及专用的看门狗定时器。 除上述功能外, C8051F040还集成了 BOTSH-CAN,它兼容 CAN技术规范 2。 0A和 2.0B,主要由 CAN内核、消息 RAM(独立于 CIP-51的 RAM)、消息处理单元和控制寄存器组成。CAN 内核由 CAN 协议控制器和负责消息收发的串行 /并行转换 RX/TX 移位寄存器组成。消息 RAM用于存储消息目标和每个目标的仲裁掩码。这种 CAM处理器有 32个 随意配置为发送和接收的消息目标,并且每一个消息目标都有它自己的识别掩码,所有的数据传输和接收滤波都是由 CAN 控制器完成的,而不是由 CIP-51 来完成。通常 CAN 内核不能直接访问消nts 14 息 RAM,而必须通过接口寄存器 IFI 或 IF2 来访问。另外, CIP-51 的 SFR 并不能直接访问CAN内部寄存器的所有单元,其配置 CAN、消息目标、读取 CAN状态以及获取接收数据、传递发送数据都由 SFR中的 6个特殊寄存器来完成,其中 CANOCN、 CANODAL、 CANOADR 3个寄存器主要用来访问修改其他不能直接访问的 CAN内部寄存器 ,消息处理单元则用于根据寄存器中的消息来控制 CAN内核中移位寄存器和消息 RAM之间的数据传递,同时,它还可用来管理中断的产生。 nts 15 4 C/OS-在 C8051F040上的移植 4.1 C/OS-硬件平台的选择 Cygnal公司 (现 Sillicon Labs公司 )的 C8051F系列单片机是完全集成的混合信号系统级芯片 (SOC),具有与 MCS-51 指令集完全兼容的高速 CIP-51 内核。 C8051F 系列单片机在一个芯片内部集成了构成一个单片机数据 采集或控制系统所需要的几乎所有模拟和数字外设及其他功能部件,它是完全集成的混合信号片上系统型 MCU,具有 64个数字 I/O引脚, C8051F040具有 CAN2.0B 控制器、 4352 字节 (256+4k)内部集成的数据 RAM 和 64k 字节在系统可编程FLASH程序存储器。 C8051F040是 C8051F04X系列单片机中一种。其特性如下: ( 1)高速、流水线结构的 8051兼容的 CIP-51内核 ( 2)控制器局域网控制器,有 32个消息对象,每个消息对象有自己的标识 ( 3)全速、非侵入式的系统调试接口 ( 4)真正 12位、 100ksps的 ADC,带 PGA和 8通道模拟多路开关 ( 5)允许高电压差分放大器输入到 12/10位 ADC,增益可编程 ( 6)真正 8位 500ksps的 ADC,带 PGA和 8通道模拟多路开关 ( 7)两个 12位 DAC,具有可编程数据更新方式 ( 8) 64KB可在系统编程的 FLASH存储器 ( 9) 4352字节的片内 RAM ( 10)可寻址 64KB地址空间的外部数据存储器接口 ( 11)硬件实现的 SPI、 SMBus/12C和两个 UART串行接口 ( 12) 5个通用的 16位定时器 ( 13)具有 6个捕捉 /比较模块的可编程计数器 /定时器阵列 ( 14)片内看门狗定时器、 VDD监视器和温度传感器 具有片内 VDD 监视器、看门狗定时器和时钟振荡器的 C8051F040MCU是真正能独立工作的片上系统。所有模拟和数字外设均可由用户固件使能 /禁止和配置。另外, C/OS-的运行平台需要一定的条件如下: ( 1)由与
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:嵌入式操作系统μCOS-II在C8051F040单片机中移植研究
链接地址:https://www.renrendoc.com/p-512654.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!