




已阅读5页,还剩87页未读, 继续免费阅读
(计算机软件与理论专业论文)应用于手持终端的嵌入式操作系统的研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学硕士学位论文 摘要 嵌入式手持终端设备在越来越多的领域发挥着重要作用。随着嵌入式软 硬件技术的发展,过去1 6 位c p u 加精简的d o s 操作系统的系统组成,逐 渐被3 2 位的嵌入式c p u ( p h a r m 系列) 2 n 实时操作系统( r t o s ) 的系统组成所 取代。而成熟的r t o s 往往价格昂贵,而且不能很好的满足行业用户的需求。 因此,自主开发,有一定通用性,容易裁剪,界面友好,便于应用于多种产 品的r t o s ,是项非常有意义的工作。 本文着重讨论基于u c o s i i 内核的手持终端嵌入式操作系统的研究与 实现,包括u c o s i i 内核剖析和硬件驱动接口模块以及图形用户界面系统的 设计与实现三部分。最终在免费的源代码公开的u c o s i i 内核上完成一个自 主开发的嵌入式r t o s 。 首先,研究u c o s i i 内核原理和实现方法,重点讨论u c o s i i 实时内核 对任务调度管理,以及任务切换过程中涉及的处理器现场保存恢复等问题, 并以u c o s i i 内核在a r m 7 t d m i 处理器上的移植以及核心任务调度函数的 实现为例,完成对u c o s i i 内核的深入剖析。 接着,为了尝试将面向对象软件开发技术用于嵌入式软件开发,扩充 u c o s i i 内核,自主实现了基于c 语言的面向对象语言一o b j e c t c 宏语言。 该语言支持面向对象语言的三个主要的特性:类封装、继承和多态。在此分 析了o b j e c t c 的对象模型以及o b j e c t c 元类概念,扼要讨论了其面向对象 特性的实现原理。并详细分析了其使用语法,为下面的论述打下基础。 随后,在u c o s i i 内核的基础上使用o b j e c t c 宏语言开发驱动接口模 块。充分利用面向对象语言的特性,实现了对驱动接口模块良好的封装,在 u c o s i i 内核和底层硬件之间实现了异步串行通信接口、液晶显示屏以及触 摸屏键盘驱动接口模块。同时也提高了接口模块的易用性。 最后,详细分析了使用ob i e c t c 实现的嵌入式图形用户界面系统 ( g u i ) 一e g u i 。该g u i 充分利用了o b j e c t c 支持多态等语言特性,采用面向 对象的软件开技术,如设计模式等实现。因此e g u i 具有结构清晰、易于扩 展、易于使用等突出特点。文章还给出了核心部分一窗口管理和消息路由机 制的o b j e c t c 实现,并讨论了e g u i 在u c o s i i 上的移植和使用方法,以 及多任务加载测试试验。 关键字:实时操作系统,驱动接口,设计模式,图形用户界面 武汉理工大学硕士学位论文 a b s t r a c t t h ee m b e d d e d p o r t a b l ed e v i c eh a s b e e nu s e di nm o r ea n dm o r ef i l e d s w i t h t h ed e v e l o p m e n to fe m b e d d e dh a r d w a r ea n ds o f t w a r e ,e m b e d d e ds y s t e mb a s e d o n16 b i t sc p ua n dd o sh a sb e e nr e p l a c e db y3 2 b i t sc p ua n ds o m er e a l l i m e o p e r a t i n gs y s t e m ( r t o s ) b u tm o s tr t o sp r o d u c t sa r ee x p e n s i v ea n dn o te a s y t oc u td o w nt om e e ts p e c i a lf i e l dn e e d s s od e v e l o par t o sb a s e do no n ef r e e r t o sc o r ei sn e c e s s a r ya n dv a l u a b l e t h i st h e s i sf o c u so nt h ew a yt or e a l i z eae m b e d d e dr t o sb a s e do n u c o s i ic o r e ,w h i c hw i l lb eu s e di ne m b e d d e dp o r t a b l ed e v i c e t h em a i nb o d y c o u l db ed i v i d e di n t ot h r e ep a r t s :a n a l y s eo fu c o s i ic o r e ,r e a l i z a t i o no fd r i v e r i n t e r f a c em o d u l e sa n dr e a l i z a t i o no fe m b e d d e dg r a p h i cu s e ri n t e r f a c e ( o u l ) e g u i f i r s t ,w ea n a l y s e t h eb a s i ct h e o r yo fr t o s ,t h e nl o o kd e e p l yi n t ot h e u c o s i ic o r et ot a l ka b o u th o wt or e a l i z et a s ks c h e d u l i n ga n ds w i t c h i n g ar e a l e x a m p l e r e a l i z a t i o no f u c o s i io na r m 7 t d m i p l a t f o r m w i l lb e g i v e n t om a k e c l e a rt h ed e t a i l e dt e c h n o l o g y s e c o n d ,f o rm a k eu s eo fo b j e c to r i e n t e dd e s i g n ( o o d ) i ne m b e d d e df i e l d s f u l l yt oi m p r o v et h eq u a l i t yo fs o f t w a r e ,w er e a l i z e da l lo b j e c to r i e n t e dp r o g r a m l a n g u a g e ( o o p l ) - - o b j e c t c ,w h i c hs u p p o r tc l a s se n c a p s u l a t e ,c l a s ss u c c e s sa n d p o l y m o r p h i s m ,b a s e do ns t a n d a r d cl a n g u a g e t h i r d ,u s i n go b j e c t c ,w er e a l i z et h ed r i v ei n t e r f a c em o d u l e ,w h i c hi sm o r e e a s yt ob eu s e da n dh a sm o r e c l e a rs t r u c t u r e ,c o m p a r e dt ot h er e a l i z a t i o nu s i n g s t a n d a r dc l a s t ,t h eo o d a n ds o m ed e s i g np a t t e r n su s ei nt h ed e s i g no fe g u lw i l lb e g i v e n ,a n dt h ec o r em o d u l e w i n d o w sm a n a g i n ga n dm e s s a g er o u t i n gw i l lb e r e a l i z e db y0 b j e c t c i nt h ee n d ,t h ew a yt ot r a n s p l a n ta n du s ee o u lo nu c o s l l w i l lb eg i v e n k e yw o r d s :r t o s ,d r i v e ri n t e r f a c e ,d e s i g np a t t e r n ,g u i i i 武汉理1 二大学硕士学位论文 第1 章引言 手持终端在不同领域可用于数据采集、信息传播、部队定位、安全保卫 等。在美国,陆海空三军都开始应用手持终端,而且应用案例越来越多。在 推进我国现代化信息化建设的过程中,对手持终端的需求量也是非常大的, 这对国内厂商是一个绝好的机会。 国内零售市场容量迅速扩大。市场经济的快速增长与连锁商业的发展, 各种形式的配送中心如雨后春笋般发展起来。据不完全统计,目前全国共有 各种类型的物流配送中心1 0 0 0 多家。销售和物流领域对带条码的手持终端 需求量较大。 在电力、水利、建筑等工业领域,实现对仪器仪表的数据采集,实现对 文字图像的有线或无线传输等功能的手持终端有广阔的应用空问。 在手持终端上实现数据的海量存储资料的迅速查找、实现网络更新,将 对在法律、医疗、税收等领域的工作人员带来极大的便利。 人们同常生活的信息有8 0 与位置空间有关,而企业则有5 9 的信息与 位置空问有关。实现与g 1 s 、g p s 技术的密切融合,手持终端可以在汽车导 航、远程监控等移动定位业务中发挥巨大作用。已达6 0 0 万并在快速膨胀的 国内家庭购车市场也有手持设备的商业机会。 综上所述,嵌入式手持终端在不同领域有着越来越广泛的应用,需求量 也呈快速上升的趋势,这促成了嵌入式手持终端软硬件技术的飞速发展,也 是我们对其软件系统平台进行研究实现的原动力。 1 。1 研究的意义 以往的嵌入式手持终端设计,多采用1 6 位c p u 和精简的d o s 操作系 统,导致运行速度较慢,功耗不低,可靠性不强,操作界面不是很友好。现 在我们采用3 2 位的嵌入式c p u ( a r m 7 为核) 和实时操作系统u c o s i i 的系 统设计,将会在功耗、速度、价位、可靠性等多方面比过去表现的更为出色。 随着3 2 位嵌入式系统的飞速发展,它的应用领域将更加广阔,以a r m 为内核的3 2 位c p u 也广泛的应用在手持设备,网络设备,仪器仪表等二【:业 武汉理工大学硕士学位论文 或者民用产品上,现在对基于a r m + u c o s i i 的嵌入式手持终端的嵌入式操 作系统的研发对于以后的项目和产品开发将会有很大的帮助。 1 2 国内外的研究现状 目前我们所开发的嵌入式系统处于嵌入式发展史的第三阶段,即是以 嵌入式操作系统为标志的嵌入式系统。这一阶段系统的主要特点是:嵌入式 操作系统能运行于各种不同类型的微处理器上,兼容性好;操作系统内核小、 效率高,并且具有高度的模块化和扩展性;具备文件和目录管理、设备支持、 多任务、网络支持、图形窗口以及用户界面等功能;具有大量的应用程序接 口f a p i ) ,开发应用程序简单;嵌入式应用软件丰富。从手持终端的技术发 展来看,低功耗低成本的a r m 核的处理器将是手持终端处理器的主流,同 样其他硬件方面也是追求低功耗、低成本、高速的这个方向。这些技术目前 国内发展还比较慢,只能利用国外的现有产品,我们所能做的也就是怎样合 理的搭建系统。但是在软件方面的研究就不同了。国内手持终端软件的开发 者有从众心理,为了保险不出错,都去用别人用过的比较成熟的产品( 如p a l m o s 、w i n d o w s c e ) ,但是这些产品往往价格昂贵,而且可裁剪定制功能差, 不能很好的满足行业用户的要求。只使用国外的软件产品也不利于国内软件 业的成长,因为嵌入式软件不同于p c 软件,己经不可能出现一家垄断的情 况,实际上选择o s 的主要因素应该是由应用决定,国内应该抓住机会加入 到这个竞争行列中来。一些免费的r t o s ( 女i 嵌入式l i n u x ,u c o s i i 等) 为国 内手持终端软件的研发提供了很大的便利。 1 3 本课题研究的主要内容 本文所涉及的手持终端嵌入式操作系统的研究与实现,包括u c o s i i 内核害0 析和硬件驱动接口模块以及图形用户界面( g u t ) 系统的实现三部分。 最终在免费的源代码公开的o s 内核上完成一个自主性的操作系统。本文的 研究是基于u c o s i i 内核的,因为它的核心代码短小精悍,有很大的扩展空 间。但是同样是由于这个原因,我们需要做的其他工作将会很多,首先要将 它移植到我们的硬件平台上来,然后因为u c o s l l 只提供内核,我们还要开 发驱动接口模块,同时,配合u c o s i i 内核自主研发户图形界面系统( e g u i ) 。 需要特别强调的是,为了使用先进的面向对象软件开发技术,我们还在标 2 武汉理工火学硕士学位论文 准c 语言的基础上实现了o b j e c t c 宏语言,用于驱动接口模块和e g u l 的 设计和实现。该语言支持面向对象语言的三个主要特性;类封装、继承和多 态。实践证明,面向对象技术的使用大大提高了基于u c o s i i 内核的操作系 统的开发效率和可维护性。自主开发。功能健全,有通用性,容易进行定制 裁剪,界面的友好,便于应用于多种产品的嵌入式操作系统就是本文所要研 究实现的对象和解决的最主要的问题。下面简述各部分内容: ( 1 ) 分析u c o s i i 实时内核。通过对u c o s i i 内核源代码的分析和研究, 进一步加强对实时内核的各个部分的理解,并结合a r m 7 t d m i 处理器核提 出了具体的移植实现方案。 ( 2 ) 基于c 的0 b j e c t - c 宏语言。分析了o b j e c t c 宏语言的对象模型,简 要阐述了其面向对象特性实现的原理。分析了0 b j e c t c 宏语言的基本语法和 关键字,并给出使用实例。为下面的研究打下基础。 ( 3 ) 基于0 b j e c t c 的驱动接口模块的设计和实现。利用o b j e c t 。c ,实现 基于u c o s i i 的串行设备通信接口( u a r t ) 、液晶显示屏( l c d ) 以及键盘和 触摸屏驱动接口模块。 ( 4 ) 基于o b j e c t c 的g u i e g u 的设计和实现。详细分析了利用面向对 象语言分析设计一个结构清晰,易于扩展,使用方便的设计过程,及其基于 o b i e c t c 的实现。 综上所述,结合面向对象技术实现一个基于u c o s i i 内核的操作系统是 本文研究的主要内容。 1 4 本课题的创新点 ( 1 ) 为了解决一般嵌入式集成开发环境不支持c + + 语言调试,而导致嵌入 式底层软件开发过程中缺乏面向对象语言支持的问题,在c 语言的基础上实 现了支持类封装、类继承和多态等面向对象特性的宏语言o b j e c t c 。 f 2 ) 将面向对象技术用于嵌入式开发。使用0 b j e c t c 宏语言封装u c o s i i 内核提供的系统调用a p i ,实现了u c o s i i 平台上的硬件驱动程序的接口模 块。并使接口模块具有清晰易用的特点。 ( 3 ) 使用o b j e c t c 宏语言,实现了嵌入式g u i e g u i 。由于全面采用了面 向对象的思想,使用了设计模式等较先进的面向对象方法和技术。该g u i 有着清晰的框架结构,易于扩展,特别是其核心部分一消息响应机制的实现, 运用了封装回调函数和多态实现消息路由的方法,较传统的过程式编程实现 武汉理工大学硕士学位论文 方法有很大不同。同时e g u i 规定的应用程序框架决定的e g u i 使用方式优 于传统的g u i 使用方式。 ( 4 ) 系统集成的思想。在整个系统实现过程o e n , n 不同领域的技术( 如 a r m a s m 程序设计、a n s i c 预编译技术以及设计模式等) ,完成外部模块 和予系统的设计及其与系统内核的有效整合。 4 武汉理工大学硕士学位论文 2 1 概述 第2 章嵌入式实时操作系统 实时操作系统( r e a lt i m eo p e r a t i n gs y s t e m ,r t o s ) 是嵌入式应用软件的 基础和开发平台。目前大多数嵌入式开发还是在m c u d s p 上直接编程,由 一个主程序负责调度各个任务,没有r t o s 的支撑。r t o s 是一段嵌入在目 标代码中的程序,系统复位后首先执行,相当于用户的主程序。用户的其他 应用程序都建立在r t o s 之上。不仅如此,r t o s 还是一个标准的内核,将 c p u 时间、中断、i o 、定时器等资源都包装起来,留给用户一个标准的a p i ( 系 统调用1 ,并根据各个任务的优先级,合理地在不同任务之间分配c p u 时间。 2 2r t o s 的一般体系结构 一般来说,r t o s 内核表现为微内核( m i c r ok e r n e l ) 结构。所谓“微内核” ” 是指将核心功能( 如进程管理、任务通信、中断处理、迸程调度) 放在内核 中,而将那些不是必需的功能和服务( 如文件系统、g u i 、网络通信、设备管 理等) 作为内核之上可配置的部分。这样,整个操作系统就是由提供姥基 本服务机制的微内核加上一些服务进程构成,系统的各个系统调用和服务都 是由内核发消息到不同的服务进程,服务进程执行相应的操作,然后以消息 的方式返回到内核。 2 。3r t o s 与通用操作系统的比较 r t o s 是相对“分时操作系统”而言的,我们日常接触的通用操作系统( 如 w i n d o w 、u n i x 、l i n u x 等) 都是分时操作系统。r t o s 要求能及时( 或即时) 响 应外部事件的请求,在规定时间内完成对该事件的处理,并控制所有实时任 务协调一致的运行。分时操作系统的基本设计原则:尽量缩短系统的平均响 应时问并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服 务。由此可见,与分时操作系统相比,r t o s 具有多路性、独立性、及时性、 交互性、可靠性的特点。 武汉理工大学硕士学位论文 2 4r t o s 的功能 r t o s 应具有如下的功能:【2 】 ( 1 ) 任务管理。分时操作系统中的基本调度单位般是进程( 或者线程) , 而实时操作系统调度的基本单位就是任务,任务有四种状态:运行、就绪、 挂起、睡眠。实时操作系统支持多任务管理,任务管理负责任务的创建、挂 起、恢复、删除等。 ( 2 ) 任务间同步和通信。多数实时操作系统的任务问同步和通信的机制 有:消息、事件、信号量,而部分实时操作系统还在沿用邮箱机制,另外 些实时操作系统提供了共享内存的任务问通信机制。 f 3 ) 内存管理。一般说来,实时操作系统的内存管理,还有对于内存的优 化分配,都是为了减少整个系统的内存占有量。 ( 4 ) 实时时钟服务。目前,商用的实时操作系统在硬时钟中断的基础上, 提供了实时时钟服务。实时时钟是系统调度的基础,也是系统定时服务器的 基础。是否提供灵活的、高精度的定时器服务是衡量时实操作系统功能完整 性的一个重要指标。 ( 5 ) 中断管理服务。中断管理服务是实时操作系统的一个核心和基本的功 能。实时操作系统的中断管理有自己特殊的要求,那就是中断处理程序要短 小,以减少中断禁止时间和中断延迟时间。 2 5r t o s 几个重要评价指标【s 1 r t o s 的几个重要评价指标如下: ( 1 ) 任务调度机制。r t o s 的实时性和多任务能力在很大程度上取决于它 的任务调度机制。从调度策略上来讲,分优先级调度策略和时间片轮转调度 策略:从调度方式上来讲,分可抢占、不可抢占、选择可抢占调度方式;从 时间片来看,分固定与可变时间片轮转。在大多数商用的实时系统中,为了 让操作系统能够在有突发事件时,迅速取得系统控制权以便对事件作出反 应,所以太都提供了“抢占式任务调度”的功能,也就是操作系统有权主动 终止应用程序( 应用任务) 的执行,并且将执行权交给拥有最高优先级的任务。 ( 2 ) 内存管理。如同分时操作系统一样,实时操作系统使用内存管理单元 ( m m u ) 进行内存管理。实时操作系统内存管理模式可以分为实模式与保护模 式。目前主流的实时操作系统一般都可以提供两种模式,让用户根据应用自 武汉理工大学硕士学位论文 举选择。当然前提是需要处理器有m m u 功能。 ( 3 ) 最小内存开销。r t o s 的设计过程中,最小内存开销是一个较重要的 指标,这是因为嵌入式系统由于成本的考虑,其内存的配置一般都坷i 大,而 在这有限的空间内不仅要装载实时操作系统,还要装载用户程序。因此,在 r t o s 的设计中,其占用内存大小是一个很重要的指标,这是r t o s 设计与 其它操作系统设计的明显区别之一。 ( 4 ) 中断禁止时间与中断延迟时间。当r t o s 运行在核心态或执行某些系 统调用的时候,是不会因为外部中断的到来而中断执行的。只有当r t o s 重 新回到用户态时才响应外部中断请求,这一过程所需的最大的时间就是中断 禁止时间。中断延时时间是指系统确认中断开始直到执行中断服务程序的第 一条指令为止整个处理过程所需要的时间。实时操作系统的中断延迟时间由 下列三个因素决定:处理器硬件电路的延迟时间,通常这个时间可以忽略; 实时操作系统处理中断并将控制权转移给相关处理程序所需要的时间:实时 操作系统的中断禁止时间。 ( 5 ) 任务切换时间。当由于某种原因使一个任务退出运行时,r t o s 保存 它的运行现场信息、插入相应队列、并依据一定的调度算法重新选择一个新 任务使之投入运行,这一过程所需时间称为任务切换时间。更准确地说,任 务切换时间是实时操作系统将控制权从一个任务的执行中取回,然后交给另 外一个任务所需要的时间。它包括保存目前正在执行任务的现场信息所需要 的时间、r t o s 决定下一个调度任务所需的调度时间以及r t o s 把另外一个 任务调入系统执行所需要的时间。 上述几项中,最大中断禁止时间和任务切换时间是评价一个r t o s 实时 性最主要的两个标准。 武汉理工大学硕士学位论文 第3 章u c o s i i 内核分析 3 1 u c o s l l 内核特点【4 】f 5 】【6 】 u c o s i i 内核有如下显著特点: ( 1 ) 公开源代码。源代码清晰易读且结构协调,注解详尽,组织有序。 ( 2 ) 可移植性。绝大部分以u c o s i i 的源代码使用移植性很强的a n s ic 写的,和微处理器硬件相关部分采用汇编写,并且压倒了最低限度。只要该 处理器有堆栈指针,有c p u 内部寄存器入栈出栈指令就可以移植u c o s i i 。 目前u c o s i i 已经在绝大多数8 位、1 6 位、3 2 位以及6 4 位微处理器上运行。 ( 3 ) 可裁剪。可以只使用u c o s i i 中应用程序需要的哪些系统服务。这 种可裁剪性是靠条件编译实现的。 ( 4 ) 占先式。u c o s i i 完全是占先式实时内核,即总是运行就绪条件下优 先级最高的任务。 ( 5 ) 多任务。可以管理6 4 个任务,但系统保留了8 个任务,应用程序最 多可以有5 6 个任务。赋予每个任务的优先级必须是不相同的。 f 6 ) 可确定性。全部u c o s i i 的函数调用和服务的执行时间具有可确定 性,即它们的执行时间是可知的,进而言之,u c o s i i 系统服务的执行时间 不依赖于应用程序任务的多少。 ( 7 ) 任务栈。每个任务有自己单独的栈,u c o s i i 允许每个任务有不同的 栈空间。 ( 8 ) 系统服务。u c o s i i 提供多种系统服务,如邮箱、消息队列、信号量、 块大小固定的内存的申请与释放、时问相关函数等。 ( 9 ) 中断管理。中断可以使正在执行的任务暂时挂起,中断嵌套层数可达 2 5 5 层。 ( 1 0 ) 稳定性与可靠性。u c o s i i 是基于u c o s 的,u c o s 自1 9 9 2 年以 来己经有好几百个商业应用。u c o s i i 与u c o s 的内核是一样的,只不过 提供了更多的其他功能。 武汉理工大学硕士学位论文 3 2u c o s i i 内核结构 这一节描述u c o s i i 的主要结构,有以下一些内容: ( 1 ) u c o s i i 对临界区代码的处理 ( 2 ) u c o s i i 的任务对像模型一任务控制块 ( 3 、任务的状态图 ( 4 ) 任务的调度 ( 5 1 中断处理 ( 6 ) 什么是时钟节拍,时钟节拍对u c o s i i 的重要意义 ( 7 ) u c o s i i 是怎样初始化和启动的 3 2 1u c o s i i 对临界区代码的处理 一个任务在某些时候可能会访问共享内存或者共享文件,或其他共享资 源,我们把对共享内存进行访问的程序片断称作临界区( c r i t i c a ls e c t i o n ) 。为 了防【t 不同的任务同时处于临界区,必须使用一定互斥的方法来避免这种情 况的发生。而对于操作系统内核来说,关中断无疑是最好的办法。和其他内 核样,u c o s i i 为了处理临界区代码时需要关中断,处理完毕后再开中断。 关中断的时间是时内核开发商应提供的最重要的指标之一,因为这个指标影 响用户系统的实时事件响应。但就使用u c o s i i 而言,关中断的时间很大程 度上取决于处理器的架构以及编译器生成的代码质量。 微处理器一般都有开关中断的指令,用户使用的c 语言编译器必须有某 种机制能够在c 中直接实现开关中断操作。某些c 编译器允许在用户的c 源代码中插入汇编语言的语句,这使插入处理器指令来开关中断很容易实 现。而有的编译器把从c 语言中开关中断放在语言的扩展部分。u c o s i i 定 义两个宏( m a c r o ) 来开关中断,以便避开不同c 编译器厂商选择不同的方法 来处理开关中断。u c o s i i 中的这两个宏调用分别是: o se n t e rc r i t l c a l ( ) 和io se x i tc r i t i c a l ( ) 。因为这两个宏的定义取 决于所用的微处理器,故应该定 义在o sc p u h 中。 有两种实现开关中断的方法。一种是直接将处理器的中断禁止掉。这种 方法执行速度快,在此类操作频繁时更为突出。但是这种方法有一个隐患, 如果在关闭中断后调用了某个函数,而此函数返回后打开了中断,从严格意 9 武汉理工大学硕士学位论文 义上讲这是不允许的。另一种方法是先将中断关闭前的状态保存到堆栈中, o s e x i l c r i t i c a l ( ) 的操作是从堆栈中恢复中断状态,这样就不会改变中 断状态了。但是这种方法较第一种方法执行语句多一点。综合考虑以后我还 是采用了第二种方法开关中断,a r m 7 t d m i 汇编的源代码如下: a r m d i s a b l e i n t ;y e 中断 s t m d b s p ! , r o m r sr o ,c p s r o r rr o ,r 0 ,# 0 x 8 0 m s rc p s rc p s r ,r o m o vp c ,l r a r m e n a b l e i n t l d m i a s p ! , r o ) m r sc p s rc x s f , r o m o v p c ,l r ;程序状态字入栈 :中断屏蔽位置1 :置程序状态字 ;返回调用 ;开中断 :取栈顶 :恢复中断前的程序状态字 :返回 3 2 ,2u c o s i i 的任务对像模型一任务控制块( t c b ) 8 实时揉作系统中任务的概念和操作系统中进程的概念差不多,就是:一 个对正在运行的程序的抽象。任务和程序之间的区别是很微妙的,任务是对 一种重复操作的抽象。 在u c o s i i 中,任务的程序被写成函数的形式,这个函数有函数返回类 型,有形式参数变量,但其内部是一个无限的循环,绝对不会返回,故其返 回参数必须定义成v o i d ,如下面就是一个任务函数: v o i d m y t a s k ( v o i d + p d a t a ) f o r ( ;) 掌用户代码 p 调用u c o s i i 的某种系统调用4 , ) 当任务完成以后,任务可以自我删除,任务函数可以调用o s t a s k t e l ( ) 武汉理t 大学硕士学位论文 实现这个目的,任务删除不是指任务代码被删除了,而是指内核将不再处理 这个任务,当然任务函数也不会被执行。任务想要再次进入内核可以调用 o s t a s k c r e a t 0 或者o s t a s k c r e a t e x t 0 。 任务函数的形式参数变量是由用户代码在第一次执行时带入的,将变量 定义成v o i d 指针是为了允许用户应用程序传递任何类型的数据给任务。 u c o s i i 可以管理6 4 个任务。目前系统保留了优先级为0 、l 、2 、3 、 o s l o w e s t p r i o 一3 、o s l o w e s t p r i o 一2 、o s l o w e s t p r i o 一1 、 o sl o w e s tp r i o 这8 个任务。o sl o w e s tp r i o 在o sc f g h 中定义。 必须给每个任务赋以不同的优先级,优先级号越低,任务的优先级越高。 u c o s i i 总是运行进入就绪态的优先级最高的任务。 任务控制块( o st c b ) 是一个数据结构,是用来描述任务的一些属性。 当一个任务建立时,任务控制块将被初始化。当任务的c p u 使用权被剥夺 时,u c o s i i 用任务控制块来保存该任务的状态,当任务重新得到c p u 使 用权时,任务控制块能确保任务从中断的那一点继续执行下去。o st c b 全 部驻留在r a m 中。任务控制块代码如下: t y p e d e f s t r u c to s t c b o s s t k4 0 s t c b s t k p t r ; # i fo s j k s k c r e a t e e x t e n v o i d+ o s t c b e x t p t r : o s s t k + o s t c b s t k b o t t o m ; i n t 3 2 uo s t c b s t k s i z e : i n t l 6 u o s t c b o p t ; i n t l 6 u o s t c b i d ; # e n d i f s t r u c to s t c b + o s t c b n e x t ; s t r u c to s t c b + o s t c b p r e v ; # i f ( o s q _ e n & & ( o s m a x 。q s 22 ) ) i |o s m b o x e nl o s s e m e n o s e v e n t + o s t c b e v e n t p t r ; # e n d i f # i f ( o s q e n & & ( o s m a x q s = 2 ) ) | | o s m b o x e n v o i d + o s t c b m s g ; 1 1 武汉理工大学硕士学位论文 # e n d i f i n t l 6 u i n t 8 u h 、i t 8 u i n t 8 u i n t 8 u i n t 8 u i n t 8 u # i f 0 st a s kd e l b o o l e a n # e n d i f o s t c b d l y ; o s t c b s t a t ; o s t c b p r i o ; 0 s t c b x : o s t c by - o s t c b b i t x : o s t c b b i t y : e n o s t c b d e l r e q ; o s t c b ; o s t c b s t k p t r 是指当前任务栈顶的指针。每个任务都有自己的栈, u c o s i i 中栈的容量是可以任意大小的。o s t c b s t k r r 是o st c b 中唯一的 一个能用汇编语言来处理的变量。如图3 1 表示了多任务和栈的关系。 o s t c b e x t p t r 指向用户定义的任务控制块扩展。 o s t c b s t k b o t t o m 是指向任务栈底的指针。 o s t c b s t k s i z e 存有栈中可容纳的指针元数目而不是字节( b y t e ) 数。 o s t c b o p t 把选择项传给o s t a s k c r e a t e x t ( ) ,目前u c o s l l 只支持3 个 选项。 o s t c b i d 用于存储任务的识别码。现在还没用到这个变量。 o s t c b n e x t 和o s t c b p r e v 用于任务控制块o st c b s 的双重链接。 o s t c b e v e n t p t r 是指向事件控制块的指针。 o s t c b m s g 是指向传给任务的消息的指针。 o s t c b d l y 当需要把任务延时若干时钟节拍或者挂起一段时间,就要用 到这个变量。 o s t c b s t a t 是任务的状态字。为0 时,表示进入就绪态。 o s t c b p r i o 是任务优先级。 o s t c b x ,o s t c b y ,o s t c b b i t x 和o s t c b b i t y 用于加速任务进入就 绪态 的过程或者进入等待事件发生状态的过程。 武汉理工大学硕士学位论文 o s t c b d e l r e q 是一个布尔量,用于表示该任务是否需要删除。 t a s k 捧1t a s k1 t 2 t a s k 撑n s t c ks t a c k s l k 佃r 口 智一智“ 丁m e m o r y 一二式7 么一 。亘一 图3 - 1u c o s i i 的中多任务和栈 3 2 3u c o s i i 中的任务状态及其切换 图3 2 是u c o s i i 控制下的任务状态转换图。在任一时刻,任务的状态 一定是这5 种状态之一。 休眠态( d o r m a n t ) 指任务驻留在程序空间之中,还没有交给u c o s i i 管 理把任务交给u c o s i i 是通过调用两个函数:o s t a s k c r e a t ( 1 或者 o s t a s k c r e a t e x t 0 。当任务一旦建立,这个任务就进入就绪态( r e a d y ) 准备运 行。任务的建立可以是在多任务运行开始之前,也可以动态地被一个运行着 的任务建立。一个任务可以通过调用o s t a s k d e l 0 返回休眠态,或通过调用 该函数让另一个任务进入休眠态。 调用o s s t a r t 0 可以启动多任务。o s s t a r t ( ) 函数运行进入就绪态的优先级 最高的任务。只有当所有优先级高于它的任务转为等待状态,或者是被删除 了,就绪的任务才能进入运行态( r u n n i n g ) 。 正在运行的任务可以通过调用两个函数将自身延迟一段时间,这两个函 数是o s t i m e d l y 0 或o s t i m e d i y h m s m 0 。之后任务将会进入挂起态 口 圉 + 呲 一 武汉理工大学硕士学位论文 ( w a i t i n g ) ,等待这段时间的过去,下一个优先级最高的进入就绪态的任务立 刻被赋予了c p u 的控制权。等待时间过去以后,系统服务函数o s t i m e t i c k ( ) 使延迟了的任务进入就绪态。 图3 - 2u c o s i i 控制下的任务状态转换图 正在运行的任务期待某一事件的发生时也要等待,通过调用以下三个函 数实现:o s s e m p e n d o ,o s q p e n d o ,o s m b o x p e n d o 。调用后任务进入了等 待状态。当任务因等待事件被挂起( p e n d ) ,下一个优先级最高的任务立即得 到了c p u 的控制权。当事件发生了,被挂起的任务进入就绪态。事件发生 的报告可能来自另一个任务也可能来自中断服务子程序。 正在运行的任务是可以被中断的,除非该任务关中断,或者u c o s i t 关中断。被中断了的任务进入了中断服务程序( i s r ) 。响应中断时,正在执行 的任务被挂起,中断服务程序控制了c p u 的使用权。 当所有的任务都处于等待事件发生或等待延迟时间结束的状态时, u c o s i i 执行空闲任务( i d l et a s k ) ,即o s t a s k l d l e 0 函数。 3 2 4u c o s i i 中的任务调度 u c o s i i 总是运行进入就绪态任务中优先级最高的那一个。每个任务的 就绪态标志都放入就绪表( r e a d yl i s t ) 中,就绪表中有两个变量o s r e d y g r p 和 o s r d y t b l 。通过这两个变量和优先级判定表o s u n m 印t b l 【2 5 6 来确定该哪 个任务运行。任务级的调度是由函数o s s c h e d 0 完成的。中断级的调度是由 武汉理工大学硕士学位论文 o s i n t e x t 0 完成的,这个函数将在后面描述。o s s c h e d ( ) 的代码如下 v o i do s s c h e d ( v o i d ) 1 n t 8 uy ; o s e n t e r _ c r i t i c a l ( ) ; i f ( ( o s l o c k n e s t i n glo s i n t n e s t i n g ) = = 0 ) y 2 o s u n m a p t b l o s r d y g r p ; o s p r i o h i g h r d y = ( i n t 8 u ) ( ( y 3 ) + ( 3 ) i f ( 0 s p r i o h i 曲r d y ! = o s p r i o c u r ) ( 4 ) o s t c b h i g h r d y = o s t c b p r i o t b l o s p r i o h i g h r d y ;( 5 ) o s c t x s w c t r + + ;( 6 ) o s _ 1 a s k _ s w 0 ;( 7 ) ) o s e x i t c r i t i c a l ( ) ; ) o s s c h e d 0 的所有代码都属于临界区代码,所以要做关中断的工作。 u c o s i i 任务调度所花时间是常数,与应用程序中建立的任务数无关。 ( 1 ) 的条件判断是:如果是在中断子程序中调用o s s c h e d 0 ,或者用户至少调 用了一次给任务调度上锁函数o s s c h e d l o c k ( ) ,则不允许进行任务调度。( 2 ) , ( 3 ) 找优先级最高的任务。( 4 ) 判断优先级最高的任务是否就是当前正在运行 的任务,以此来避免不必要的任务调度。( 5 ) 使用o s t c b h i g h r d y 指向优先 级最高的那个任务的任务控制块。( 6 ) 使统计计数器加1 ,以跟踪任务切换的 次数。最后宏调用o st a s ks w 0 来完成实际的任务切换。 任务切换很简单,首先将被挂起任务的寄存器进栈,然后将较高优先级 任务的寄存器值从栈中恢复到当前寄存器中。因为这个过程与进出中断的过 程类似所以u c 0 s i i 建议用户使用模拟中断的方式来进行,多数处理器提供 有软件中断( s w i ) 或者陷阱指令( t r a p ) ,只要将中断向量指向o s c t x s w o 。 但是a r m 的中断响应并不会自动把很多寄存器进栈,只保存返回地址到 r 1 4x x x ,保存c p s r 到s p s rx x x ,中断返回时也只是恢复p c ( r 1 4x x x ) 和c p s r ( s p s r 。 的这个进出中断的过程和我们需要的过程不一_xxx)arm 样,也就没有必要利用软件中断( s w i ) 来实现o s j l a s k _ s w ( ) i 蚕i 数。实际上 也不需要用宏来表示o st a s ks w o ,直接将o st a s ks w 0 作为一个用 ) li,劲b l(1 ( bt y drso bt 1 p amnuso 武汉理工大学硕士学位论文 汇编实现的函数就可以了。汇编代码如下: g l o b a l o s t a s k s w o s t a s k s w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 天津2025年天津市农业科学院招聘工作人员(第二轮)笔试历年参考题库附带答案详解
- 河套学院《装饰工程管理与现场实训》2023-2024学年第二学期期末试卷
- 天津商业大学宝德学院《环境研究法》2023-2024学年第二学期期末试卷
- 长白山职业技术学院《专业综合实践2(智能电子系统设计与制作)》2023-2024学年第二学期期末试卷
- 山东财经大学燕山学院《中医学基础1》2023-2024学年第二学期期末试卷
- 抚顺职业技术学院《建筑制图与AutoCAD》2023-2024学年第二学期期末试卷
- 乌兰察布医学高等专科学校《基因工程制药》2023-2024学年第二学期期末试卷
- 四川工商学院《材料成型装备及自动化》2023-2024学年第二学期期末试卷
- 廊坊职业技术学院《产品设计表达基础》2023-2024学年第二学期期末试卷
- 上海师范大学天华学院《电子电路基础实验(下)》2023-2024学年第二学期期末试卷
- 2024年山东省高考物理+化学+生物试卷(真题+答案)
- 2024年风力发电运维值班员(技师)技能鉴定考试题库-下(判断题)
- 职业技术学院食品检验检测技术专业课程标准(2023级)
- 江苏省连云港市2024年中考物理试题(含答案)
- 海姆立克急救法课件(简单版)
- 2024辽宁中考物理二轮重点专题研究 微专题 光学组合作图(课件)
- 图书采购单模板
- 民进会章会史知识题库附有答案
- DL∕T 1476-2023电力安全工器具预防性试验规程
- GB/T 5683-2024铬铁
- CHT 1020-2010 1:500 1:1 000 1:2 000地形图质量检验技术规程
评论
0/150
提交评论