




已阅读5页,还剩70页未读, 继续免费阅读
(轮机工程专业论文)基于嵌入式系统的internet接入技术的研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 随着通讯技术、网络技术和半导体技术的飞速发展,i n t e r n e t 技术正在逐渐向 工业控制和嵌入式系统设计领域渗透,实现i n t e r n e t 互联这是当前嵌入式系统发 展的热点领域和重要方向。如果m c u 应用系统能够连接到i n t e r n e t 上则可以方便 低廉地将信息传送到世界上的任何一个角落。 论文从软件平台和硬件平台两方面出发,详细的论述了一个基于u c o s i i 和 u l p 的嵌入式以太网工业控制系统开发平台的设计过程,整个平台系统设计采用 了大多数嵌入式系统设备开发的体系结构。软件方面本论文通过分析嵌入式实时 操作系统uc o s - i i ,了解其内核原理。并根据5 1 系列微处理器的内部结构特点, 将此实时多任务系统移植到5 1 微处理器上。由于采用r t l s 0 1 9 a s 网络接口芯片, 对其驱动程序的编写做了详细的分析和介绍。由于uc o s i i 内核不具备网络功能 故将精简的t c p i p 协议栈u l p 移植到uc o s - i i 系统上,并对如何实现t c p i p 协 议栈进行了详细的分析。硬件方面,对网卡接口:漆片r t l 8 0 1 9 a s 结构,引脚,收 发包做了详细说明,设计了一个以5 1 m c u 、r t l 8 0 1 9 a s 网络接口芯片和一些接口电 路为核心的网络控制器系统。 本论文的研究课题经过几个月的软硬件设计和调试,已实现了最初的设计目 标。课题的实现对于众多领域里需要接入i n t e m e t 的嵌入式设备具有很好的参考价 值,它的顺利完成是向其他适用系统移用该技术的良好基础。 关键谒:嵌入式系统;p c o $ - u ;t g p i p 协议栈;r i l 8 0 1 9 a $ a b s t r a c t w 汕t h ed e v e l o p m e n to fc o m m u n i c a t i o nt e c h n i c n e t w o r kt e c h n i ca n d s e m i c o n d u c t o rt e c h n i c i n t e r n e tt e c h n i ci s f i l t e r i n gt oi n d u s t r yc o n t r o l l i n ga n dt h e d e s i g n i n go f e m b e d d e ds y s t e mg r a d u a l l y a c h i e v i n gm u t u a li n t e m e tt h eh o t s p o td o m a i n a n dt h ei m p o r t a n tw a yo f e m b e d d e ds y s t e md e v e l o p m e n t i f m c uc a n j o i nw i t hi n t e r n e t , t h ei n f o r m a t i o nc o u l db et r a n s m i t t e dc h e a p l yt oe v e r y w h e r eo f t h ew o r l d w ed e s i g n e dt h ef r a m e w o r ko ft h eh a r d w a r ea n ds o f t w a r e ,d e t a i li n t r o d u c e dt h e d e s i g n i n gp r o c e s so fe m b e d d e di n d u s t r yc o n t r o ls y s t e mb a s e do nl i c o s - i ia n du l p a n dd e s i g n e dt h ef l a m ew o r kw h i c hc o u l db eu s e df o rm o s te m b e d d e dd e v i c e s s o f t w a r e f a c e t ,w ea n a l y s er t o li - t c o s i ia n dr e a l i z et h ep r i n c i p l eo fk e r n e l a c c o r d i n gt o t h ec h a r a c t e ro ft h em c u ,t r a n s p l a n t i n go st ow 7 8 e 516 b e c a u s eo fu s i n ge t h e m e t i n t e r f a c ec h i p ,w ei n t r o d u c et h ed r i v e r si nt h ed e t a i l a si x c o s - i id o e s n th a st h e f f m c t i o no fn e t w o r k ,w ee m b e d d e dt h et i d yt c p i pp r o t o c o ls t a c ki n i t c o s i i ,a sw e l l a sw ed i s c u s sh o wt oa c h i e v et c p i pp r o t o c o ls t a c ki nt h ed e t a i l h a r d w a r ef a c e t ,w e e x p l i c a t e t h ee t h e m e ti n t e r f a c ec h i p c o n f i g u r a t i o n ,l e a d ,a n dd i s c u s sr e c e i v e i n f o r m a t i o np a c k a g ei nt h ed e t a i l w ed e s i g n e dan e t w o r kc o n t r o ls y s t e m ,w h i c hi sm a d e u po f 51s e r i e sm c u ,e t h e r n e ti n t e r f a c ec h i pa n di n t e r f a c ec i r c u i t s a f t e rs e v e r a lm o n t h s d e s i g n i n ga n dt e s t i n go fh a r d w a r ea n ds o f t w a r e ,w eh a v e a c h i e v e dt h ea i m t h ea c c o m p l i s h m e n to ft h i sp a p e ri sag o o df o u n d a t i o nf o rt h e c o m p a t i b l es y s t e mt ou t i l i z et h i st e c h n o l o g ya n d a tt h es a m et i m ei th a sag r e a tv a l u eo f r e f e r e n c e k e yw o r d :e m b e d d e ds y s t e m ;p c o s 一:t o p ips t a c k ;r t l 8 0 1 9 a s i i 大连海事大学学位论文原创性声明和使用授权说明 原创性声明 本人郑重声明:本论文是在导师的指导下,独立进行研究工作所取得的成果, 撰写成博士,硕士学位论文 :薹王邀厶式丕缝篮! 皿! ! ! 鲢攮厶整盔鲍班究:。除 论文中已经注明引用的内容外,对论文的研究做出重要贡献的个人和集体,均已 在文中以明确方式标明。本论文中不包禽任何未加明确注明的其他个人或集体已 经公开发表或未公开发表的成果。 本声明的法律责任由本人承担。 论文作者签名习么心钟;月r f 学位论文版权使用授权书 本学位论文作者及指导教师完全了解“大连海事大学研究生学位论文提交、 版权使用管理办法”,同意大连海事大学保留并向国家有关部门或机构送交学位论 文的复印件和电子版,允许论文被查蒯和借阅。本人授权大连海事大学可以将本 学位论文的全部或部分内容编入有关数据库进行检索,也可采用影印、缩印或扫 描等复制手段保存和汇编学位论文。 保密口,在年解密后适用本授权书。 本学位论文属于:保密口 不保密口( 请在以上方框内打4 ) 论文作者签名导师签名蜘、 日期:碱年;月同 乃飧n 0 魏 第1 章绪论 1 1 嵌入式系统简介 嵌入式系统是指嵌入式计算机( e m b e d e dc o m p u t e r ) 及其应用系统,是指嵌 入于各种设备及应用产品内部的计算机系统,它主要完成信号控制的功能,体积 小,结构紧凑,可作为一个部件埋藏于所控制的装置中,它提供用户接口、管理 有关信息的输入输出、监控设备工作,使设备及应用系统有较高智能和性价比。 嵌入式系统由嵌入式硬件与嵌入式软件组成,硬件以芯片、模板、组件、控制器 形式埋藏于设备内部,软件是实时多任务操作系统和各种专用软件,一般固化在 r o m 或闪存中。软硬件可剪裁,适用于对功能、体积、成本、可靠性、功耗有严 格要求的计算机系统中。嵌入式计算机系统“1 ,最早出现在二十世纪60 年代武器 控制中,后来用于军事指挥控制和通信系统,现在广泛用于民用机电一体化产品 中。 国内外嵌入式系统市场广阔嵌入式系统主要用于各种信号处理与控制,目前 已在国防、国民经济及社会生活各领域普及应用,用于企业、军队、办公室、实 验室以及个人家庭等各种场所。 军用各种武器控制( 火炮控制、导弹控制、智能炸弹制导引爆装置) 、 坦克、舰艇、轰炸机等陆海空各种军用电子装备,雷达、电子对抗军事通信装备, 野战指挥作战用各种专用设备等。在海湾战争到最近伊拉克战争中广泛使用。我 国嵌入式计算机最早用于导弹控制。 家用我国各种信息家电产品,如数字电视机、机顶盒、数码相机、v cd 、d v d 音响设备、可视电话、家庭网络设备、洗衣机、电冰箱、智能玩具 等。广泛采用微处理器微控制器及嵌入式软件,em it 已用于社区对家用电、 水、煤气表远程抄表、洗衣机遥控。 工业用各种智能测量仪表、数控装置、可编程控制器、控制机、分布 式控制系统、现场总线仪表及控制系统、工业机器人、机电一体化机械设备、汽 车电子设备等。广泛采用微处理器、控制器芯片级、标准总线的模板级及系统嵌 入式计算机。 商用各类收款机、p0s 系统、电子秤、条形码阅读机、商用终端、 银行点钞机、ic 卡输入设备、取款机、自动柜员机、自动服务终端、防盗系统、 各种银行专业外围设备。 办公用 复印机、打印机、传真机、扫描仪、激光照排系统、安全 监控设备、手机、寻呼机、个人数字助理( pda ) 变频空调设备、通信终端、 程控交换机、网络设备、录音录象及电视会议设备、数字音频广播系统等。女娲h ope n 嵌入式软件己用于机顶盒、网络电视、电话、手机、个人数字助理( p da ) 。 目前微处理器微控制器产量为几亿片到十多亿片,远远大于个人计算机的通用 台式机。故而嵌入式系统技术具有非常广阔的应用前景。 1 2 嵌入系统接入i n t e r n e t 技术 将嵌入式系统与以太网相结合的想法由来已久,主要的困难在于当时的以太 网在速度和确定性等方面都有很大欠缺,不能满足工业通信网络要求;另外,各 种网络通信协议对于嵌入式系统存储器容量、运算速度等的要求比较高,当时的 嵌入式系统中除部分3 2 位以上的处理器外,都无法达到这一要求。随着工业以太 网在速度上不断提高以及交换技术、全双工工作方式等技术的融入,以太网与工 业通信网络的差距正在逐步缩小。从8 0 年代起,一些i t 组织和公司开始进行嵌 入式系统的研发,大部分新开发的嵌入式处理器都支持网络协议。可以说,目前 研究嵌入式以太网。“”的条件已经成熟。 以太网本质上是一个物理层标准,作为一套完整的网络传输协议,必须具有高 层控制协议,以太网使用了t c p i p 。虽然t c p i p 并不是专为以太网而设计的, 但实际上它们现在已经不可分离了,其传输层和网络层的协议基本上已经统一到 t c p i p , 也已经为大多数工业控制器厂家所接受。以太网最典型的应用形式是 e t h e m e t + t c p f l p , 即灵活的e t h e m e t 底层加上几乎已成通用标准的网络传输协议 t c p i p ,使得以太网能够非常容易地集成到以i n t e m e t 和w e b 技术为代表的信息网 络中。然而现有i n t e m e t 技术的t c p i p 协议比较复杂,内容非常丰富,主要适用 于与p c 的连接,在工业自动化领域的广泛使用显得过于昂贵,并不适用。因此, 降低硬件成本,简化t c p i p 协议的实现有特别现实的意义。 2 嵌入式以太网的实质是在嵌入式系统的基础上实现网络化,使嵌入式系统能 够实现t c p i p 网络通信协议,接入以太网“1 。将嵌入式系统与t c p s p 协议融合到 一起主要有两种方法: 1 硬件方式:使用已有的t c p f l p 芯片直接作为以太网口。这种方法的优点是 可靠性高,执行速度快,但往往硬件电路复杂,价格昂贵,硬件成本高。 2 软件方式:将t c p i p 协议以软件方式嵌入到嵌入式系统的r o m 中。一般 来说,t c p i p 协议栈都比较庞大,在嵌入式系统中很难支持完整的t c p f l p 协议栈, 因此要根据嵌入式网络产品的特点,精简t c p s p 协议,实现与需要相关的部分, 大幅度减少对于系统资源的需求。 本论文正是采用了第二种方法,使用通用高性能5 1 系列的m c u ,成本低、 技术成熟,软硬件开发周期都很短,并且设计方案灵活多变,可适用于不同的对 象。虽然现在8 位m c u 有了足够的存储空间和较高的运行速度,但m c u 要在完 成原有控制系统功能的前提下,同时实现t c p i p 网络通信,又是发送又是接收, 这在系统软件的编写中使用传统的前后台程序开发机制是非常困难的,所以我采 用了嵌入式实时操作系统( r t o s lp c o s i i “2 1 来开发多任务程序,使t c w i p 协议 更好的在其上运行。 1 3 嵌入式实时操作系统 实时操作系统,简称r t o s ( r e a lt i i n eo p e r a t i n gs y s t e m ) ,是指能在确定的时 间内执行其功能并对外部的异步事件做出响应的计算机系统。实时操作系统对响 应的时间有严格的要求,其操作的正确性不仅依赖于逻辑设计的正确程度,而且 跟这些操作进行的时间有关。大多数实时操作系统是嵌入式系统。在这种系统中, 计算机被内装于专用设备或系统中,它的反应速度快,自动化程度高。嵌入式实 时操作系统向开发人员提供一个实时多任务内核,开发人员将应用分解成若干个 独立的任务,将各任务要做的事、任务间的关系向实时多任务内核交代清楚,让 实时多任务内核去管理这些任务,开发过程即完成。嵌入式实时操作系统的核心 部分是实时多任务内核,它好比一颗行星,诸任务就像围绕行星旋转的许多卫星, 在内核的管理下,有条不紊地运转着。任意时刻,处于运行状态地任务只有一个, 其他任务则处于另外的状态,如睡眠、等待、就绪等【l j 。 1 3 1 实时操作系统与通用操作系统的一些比较 我们在日常工作学习环境中接触最多的是通用操作系统,通用操作系统是由 分时操作系统发展而来,大部分都支持多用户和多进程,负责管理众多的进程并 为它们分配系统资源。分时操作系统的基本设计原则是:尽量缩短系统的平均响 应时间并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服务。分 时操作系统注重平均表现性能,不注重个体表现性能。对于整个系统来说,注重 所有任务的平均响应时间而不关心单个任务的响应时间,对于某个单个任务来说, 注重每次执行的平均响应时间而不关心某次特定执行的响应时间。 对于实时操作系统面言除了要满足应用的功能需求以外,更重要的是还要满 足应用提出的实时性要求,而组成一个应用的众多实时任务对于实时性的要求是 各不相同的。实时操作系统所遵循的最重要的设计原则是始终保证系统行为的可 预测性( p r e d i c t a b i l i t y ) 。可预测性是指在系统运行的任何时刻,在任何情况下,实 时操作系统的资源调配策略都能为争夺资源( 包括c p u 、内存、网络带宽等) 的多个 实时任务合理地分配资源,使每个实时任务的实时性要求都能得到满足。与通用 操作系统不同,实时操作系统注重的不是系统的平均表现,而是要求每个实时任 务在最坏情况下都要满足其实时性要求,也就是晚,实时操作系统注重的是个体 表现,更准确地讲是个体最坏情况表现。 1 3 2 嵌入式应用中使用r t o s 的必要性 提倡在嵌入式应用中使用r t o s 最主要的原因是它可以提高系统的可靠性。 在控制系统中“不死机”是最起码的要求。系统设计时硬件上要尽量提高抗干扰 能力,满足电磁兼容性要求,这只是提高可靠性一方面,另一方面就是在软件上 采取措施。 传统的程序开发采用前后台式结构编制线性的应用程序。整个应用程序是一 个无限循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。 中断服务程序处理异步事件,这部分可以看成前台行为。后台可以叫做任务级, 前台也叫中断级。这种系统的最坏情况下任务级响应时间取决于整个循环的执行 时间。它在遇到强干扰时,程序在任何一处产生死循环或破坏都会引起死机,这 时只能依靠硬件看门狗复位,重新启动系统,而对于r t o s 管理的系统,这种干 扰可能只是引起若干进程中的一个破坏, 可以将应用程序分解成若干独立的进程, 可以用另外的进程对其进行修复。不仅 而且可以另外启动一个监控进程,监视 各进程运行状况。提倡使用r t o s 的第二个原因是提高开发效率,缩短开发周期。 一个复杂的应用程序,可以分解成多个任务。每个任务模块的调试、修改几乎不 影响其他模块。 1 4 课题的提出 迅速发展的网络技术,特别是以i n t e r n e t 为代表的互联网正在突破以往以p c 为网络节点的概念,连通性、网络化正在逐渐成为各类测控装置、现场仪器仪表 以及家用电器设计的发展方向。据i t 权威机构预测,未来十年之内,各类拥有网 络接入功能产品的数量会超过p c 机,我们将迎来所谓的“后p c ”时代。i n t e m e t 技术的发展,促进了嵌入式网络设备和产品的市场需求,使这些设备和产品与 i n t e m e t 相连成为趋势,i n t e r n e t 技术将继续深入到日常生活和工作所用到的电子设 备中,对于各类智能装置和家用电器,它们的“心脏”为m c u 。由于微控器芯片 品种达数百种,这些微控器的硬件结构和指令系统各不相同。因此,不能像p c 机 那样通过标准的硬件接口和接口软件直接接入i n t e m e t 。如何以很低的成本将各类 智能装置或家用电器与i n t e m e t 连接起来,以便人们能够远程获得这些电子设备的 信息并控制它们的运行,已成为i t 界关注的焦点。本文就是在这样大背景下提出 来的。 第2 章嵌入式实时操作系统1 1c o s i i 2 1 1 1c 0 s i i 简介 i c o s i i 是由j e a nj l a b r o s s e 先生编写的、现在流行的一种免费公开源代码 的实时操作系统。它可广泛应用于从8 位到6 4 位单片机的各种不同类型、不同规 模的嵌入式系统。斗c o s i i 不仅具有结构小巧、可固化、可裁剪、多任务和可剥 夺型的实时内核等特点:而且其实时性、稳定性和可靠性也得到了广泛认可。 i - l c o s i i 的最小内核可编译至2 k b ,一般情况占用内存在1 0 k b 数量级,适用基于 8 0 5 1 的嵌入式系统的需要。在系统中嵌入i c o s i i 可以把整个程序分成许多任 务,每个任务相对独立,然后在每个任务中设置超时函数,时间用完后,必须交 出m c u 的使用权。即使一个任务发生问题,也不会影响其他任务的运行。在单片 机系统中嵌入i j c o s i i 提高了系统的可靠性,并使调试程序变得简单,同时也增 强了系统的可扩展性和产品开发的可延续性。 2 2 1 10 0 8 - i i 的任务 2 2 1 任务简介 一个任务就是一个简单的程序,该程序可以认为c p u 完全只属于该程序自己。 实时应用程序的设计包括如何把问题分割成多个任务,每个任务不仅是整个应用 的一部分而且还被赋予一定的优先级有自己的一套堆栈空间和c p u 寄存器。每个 任务都是一个无限的循环,都可能处于以下五种状态之一即:休眠态,就绪态, 运行态,挂起态及被中断态。“”。休眠态相当于任务驻留在内存中,没有被多任务 内核所调度:就绪态意味着任务已经准备好,可以运行,但由于该任务的优先级 比正在运行的的任务的优先级低,还暂时不能运行;运行态是指任务掌握了c p u 的使用权,正在运行中;挂起态也可以叫做等待事件,指任务在等待,等待某一 事件发生;发生中断时,c p u 提供相应的中断服务,原来正在运行的任务暂不能 运行,就进入了中断状态。图2 1 是肛c o s i i 控制下的任务状态转换图。多任务 运行的实现实际上是靠c p u 在许多任务之间转换和调度。c p u 轮番服务于一系列 任务中的某一个。当多任务内核决定运行另外的任务时,它保存正在运行任务的 6 当前状态于自己的栈区之中,入栈工作完成后就把下一个要运行的任务的当前状 况从该任务的栈区中调出到c p u 的寄存器,并开始下一个任务的运行。 圈2 1 任务状态转换图 f i g 2 1m i s s i o ne s t a t ec o n v e r s i o n 2 2 2 任务控制块 l a c o s - i i 的每个任务在被创建的时候,一个称为任务控制块o s t c b 将被赋 值。任务控制块是一个数据结构,当任务的c p u 使用权被剥夺时,肛c o s i i 用它 来保存该任务的状态。当任务重新得到c p u 使用权时,任务控制块能确保任务从 当时被中断的那一点继续执行。任务控制块数据结构如下: t y p e d e fs t r u c to s t c b 0 s j t k * o s t c b s t k p t r : 指向当前任务堆栈栈顶的指 针 产用于任务控制块双向链表的前后链接+ 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 st c b * o s t c b p r e v : i n t l 6 u o s t c b d i y :保存任务允许等待的最大时 钟节拍数 i n t 8 uo s t c b s t a t : 任务状态字 o s t c b p r i o : 任务的优先级 p 用于加速任务进入就绪态或进入等待事件发生状态的过程+ i n t s u o s t c b x : i n t 8 u o s t c b y : i n t 8 uo s t c b b i t x : i n t 8 u o s t c b b i t y ; jo s j c b : 所有任务控制块o s t c b 都被连接成单向任务链表。任务一旦建立,空任务块 指针o s t c b f r e e l i s t 指向的任务控制块便赋给了该任务,然后o s t c b f r e e l i s t 的 值调整为指向链表中下一个空任务块。一旦任务被删除,任务控制块就还给空任 务链表。如图2 2 所示。任务建立时,函数o s _ t c b i n i t 0 将初始化任务块。 o s t c b t b ll o sm a xt a s k s + 0 sns y st a s k s 1 图2 2 空任务控制块列表 f i g 2 2 f r e eo s _ t c b sl i s t o 2 2 3 任务调度机制 任务调度机制是嵌入式实时内核的一个重要概念,也是其核心技术。对一个 实时操作系统的了解首先从它的任务调度机制开始。肛c o s i i 是可剥夺型实时多 任务内核。可剥夺型的实时内核在任何时刻都运行就绪了的最高优先级任务。确 定哪个任务优先级最高,下面该哪个任务运行了的工作是由调度器( s c h e d u l e r ) 完成的。任务级的调度由函数o s s c h e d 0 完成,它的内容可分为两个部分:最高优 先级任务的寻找和任务切换。 对于最高优先级任务,不同的内核有不同的处理方式。最简单的是顺次检索: 将所有任务按照优先级排序,优先级高的排在队前,优先级低的排在队后。查找 时从队列头开始检索,遇到的第一个就绪的任务就是最高优先级的就绪任务。这 种查找方式思路直接,便于实现,但是花费c p u 时间不同,系统任务多时速度很 慢,将会大大影响任务调度的速度。在i j t c o s i i 中采用了一种独特的方式来标识 任务的就绪状态:将6 4 个任务的优先级分为8 组,每组8 个任务,每个任务对应 于一个8 字节数组o s r d y t b l 8 q b 的一位,如图2 3 所示。每个字节的8 位表示对 应的8 个任务是否就绪:如是,则对应位置l ;否则,清零。此外,只要某组中有 一个任务就绪,则对应的o s r d y g r p 中的位也要置1 。 田习丑丑五皿 l r jl r j l在。5 s a v t n , 在o s r d y g r p 中的位置 ios_lowest_prio8:广 i x 一 7 6420 1 51 41 31 2 1 098 2 22 1 1 91 81 6 3 12 82 6 2 5 3 2 4 7 4 54 3 4 1 5 25 1 4 9 6 16 0 5 95 85 7 最低优先级任务 任务优先级 ( i d l e t a s k ) o s l o w e s t p r i o 8 + i 也用于对o s r d y t b l 0 s _ l o r r ,s t _ p r i o 8 + i 的索引 图2 3p c o s 1 i 的任务就绪表 f i g 2 3r e a d yl i s to f l c o s i i 下面程序段的代码用于将任务放入就绪表。p r i o 是任务的优先级。 o s r d y g r p i = o s m a p t b l p r i o 3 : o s r d y t b l p r i o 3 i = o s m a p t b l p r i o o x 0 7 : 从图2 3 可以看出,任务优先级的低3 位用于确定任务在总就绪表o s r d y t b l 】 中的所在位。接下去的3 位用于确定是在o s r d y t b l 数组的第几个元素。如果要 tlilllii。liili上 使一个任务脱离就绪态,则要做求反处理。程序段代码如下: i f ( ( o s r d y t b l p r i o 3 = 0 s m a p t b l p r i o 0 x 0 7 ) = = 0 ) 0 s r d y g r p = 。o s m a p t b l p r i o 3 1 】: 它将就绪任务表数组o s r d y t b l 中相应元素的相应位清零,而对于 o s r d y g r p ,只有当被删除任务所在任务组中全组任务一个都没有进入就绪态时, 才将相应位清零。 为了找到那个进入就绪态的优先级最高的任务,并不需要从o s r d y t b l o 开始 扫描整个就绪任务表,只需要查另外一张表,即优先级判定表o s u n m a p t b l 【2 5 6 。 o s r d y t b l q b 每个字节的8 位代表这一组的8 个任务哪些进入就绪态了,低位的 优先级高于高位。利用这个字节为下标来查o s u n l v l a p t b l 这张表,返回的字节就 是该组任务中就绪态任务中优先级最高的那个任务所在的位置。确定进入就绪态 的优先级最高的任务由以下代码完成的。 y = o s u n m a p t b l 0 s r d y g r p : x = 0 s u n m a p t b l 0 s r d y t b l y : p r i o = ( y 8 ; + s t k + + = 0 x 0 a : + s t l 【+ + = 0 x 0 b : + s t k + + = o x 0 0 ; ,用户堆栈最低有效地址 ,用户堆栈长度 任务地址低8 位 任务地址高8 位 f f 随c | 怒 ,i ) p h 方长增栈堆 , + s ( + + = o x o o ; + s t l 【+ + = o x 0 0 ; + s t l ( + 十= o x 0 0 ; 朋) p l 玎p 踊 腮o + s t k + + 2 ( i n t l 6 u ) p p d a t a & o x f f ; r 1l o wb y t eo fp p d a t a + s t k + + = ( 1 n t l 6 u ) p p d a t a 8 ; r 2h i g hb y t eo fp p d a t a + s 咄+ + 2o x o l ; r 3t h et y p eo fp p d a t a :x d a t a + s t l 【+ 十= o x 0 4 ; r 4 + s 咄+ + = 0 x 0 5 ; r 5 + s 墩+ + ;o x 0 6 ;r 6 + s t k + + = o x 0 7 ; r 7 + s t k + + = ( i n t l 6 u ) ( p t o s + m a x s l k s i z e ) 8 ;、? cx b p 仿真堆栈指针高8 位 + s t k + + = ( i n t l 6 u ) ( p t o s + m a x s t k s i z e ) & 0 x f f ;h ? cx b p 仿真堆栈指针低8 位 r e t u r n ( ( v o i d + ) p r o s ) ; 针对微处理器w 7 8 e 5 1 6 所设计函数o s t a s k s t k i n t 0 的用户堆栈结构如图2 6 高地址 低地址 用户堆栈 硬件堆栈 图2 6 堆栈结构图 f i g 2 6f r a m e w o r ko f s t a c k 这种用户堆栈结构增加了保存仿真堆栈的指针? c _ x b p 和堆栈内容的数据结 构,解决了函数重入问题。在这里我们设计固定大小的用户任务堆栈,它可以精 确的计算出来。用户堆栈空间= 硬件堆栈空间+ 仿真堆栈空间。硬件堆栈空间的 1 6 国 瓣 一 一一 舭 驴 础姗 剿 o m 惦 篡 龇 、y ,僦 大小要适中,因为它占用内部r a m ,内部r a m 执行效率高,如果堆栈空间过大就会 影u 自k e i l 编译的性能,如果堆栈空间过小,在中断嵌套和程序调用时则会造成系统 的崩溃。仿真堆栈大小取决于形参和局部变量的类型及数量,需要在具体应用时 精确算出。 3 用汇编语言编写4 个与处理器相关的函数( o s _ c p u a a s m ) g c o s - i i 移植需要改写o s c p u _ _ a a s m 中的4 个函数在:o s s t a r h i g h r d y ( ) 、 o s c t x s w 0 、o s l m c m s w o 和o s t i e k l s r ( ) 。o s c p u a a s m 用a 5 1 宏汇编语言编 写,它的大致结构和需注意的问题如下: + 十 + + + + + 十 + + + + + + + + + + 女 + + 十 + + + + 十+ + + + + + + + + + n a m e 模块名,与文件名无关。 定义重定位段,即我们要编写的四个汇编语言函数。段名格式:? p r ? 函数名? 模块名 声明引用全局变量和外部子程序注意关键字为“e x t r n ”没有e 。 全局变量名直接引用:这里用到了o s t c b c u r 、o s t c b h i g h r d y 、o s r u n n i n g 、 o s p r i o c u r 、o s p r i o h i g h r d y 几个全局变量,为了提高c p u 的 效率使用r j 而不) 羽d p t r 访问这些变量,k e i 用1 扩展关键字 i d a t a 将它们定义在内部r a m 中。 对外声明4 个编写的四个汇编语言函数为不可重入函数。格式:p u b l i c 函数名 分配堆栈空间。只定义大小,堆栈起点由k e i l 决定。不能自己分配堆栈起点,只要用 d s 通知k e i l 预留堆栈空间即可。因为? s t a c k 段名与s t a r t u p a 5 1 中的段名相同,这意味着k e i l 在连接时将把两个同名段拼在一起, s t a r t u p a 5 1 预留了1 个字节空间,所以编译连接完成后堆栈段总 长为用户定义长度+ 1 。查看m 5 1 可知k e i l 定义堆栈的起点和长度, 它处于内部r a m 中。 定义宏:宏名m a c r o 实体e n d m 具体子程序编写 o s s t a r t h i g h r d y o s c t x s w o s t n t c 戗s w 1 7 o s t i c k i s r e n d ;声明汇编源文件结束 十十+ + + + + + + + + 十 + + + + + + + + + 十 + 十 + + + + + + + + 四个汇编语言函数各自功能如下: ( 1 ) o s s t a r h i g h r d y 0 函数 该函数由o s s t a r o 函数调用,功能是让进入就绪态的优先级运最高的任务运 行。在调用o s s t a r t ( 函数之前,必须先调用o s l n i t o i 垂i 数进行系统初始化,且至少已 经创建一个任务。在o s s t a r h i g h r d y ( ) 启动之前,必须调o s t a s k s w h o o k 0 数, 通过检查变量o s r u n i n g 来确定o s t a s k s w h o o k ( ) i 垂l 数被调用的对象。为了启动任 务,o s s t a r h i 曲r d y ( ) 首先找到当前就绪的优先级最高任务( o s t c b h i g h r d y 中保存 有优先级最高任务的任务控制块t c b 的地址) ,并从任务的任务控制块( o s _ t c b ) 中找到指向堆栈的指针,然后从堆栈中弹出全部寄存器的内容,运行m c u 一5 1 指 令r e t i 中断返回。由于任务创建时堆栈的结构就是按中断后的堆栈结构初始化 的,执行中断返回指令r e t i 后就切换到了新任务。o s s t a r h i g h r d y o i 函数的示意性 代码如下所示: v o i do s s t a r t h i g h r d y ( v o i d ) 调用用户定义的o s t a s k s w h o o k o ; o s r u n i n g 。t r u e ; 得到将要恢复运行任务的堆栈指针: s t a c kp o i n t = o s t c b h i g h r d y - o s t c b s t k p t r ; 从新任务堆栈中恢复处理器的所有寄存器; 执行中断返回指令; ( 2 ) o s c t x s w o i 函数 o s c 乜【s w 0 是一个任务级的任务切换函数( 在任务中调用,区别于在中断程序 中调用的o s t n t c t x s w 0 ) 。在i x c o s i i 中,如果任务调用了某个函数,而该函数的 执行结果可能造成系统任务重新调度,则在函数的末尾会调用o s s h e d 0 ,o s s h e d 0 1 8 将查找当前就绪的优先级最高的任务,若不是当前任务,则判断是否需要进行任 务调度,并找到该任务控制块o st c b 的地址,将该地址拷贝到变量 o s t c b h i g h r d y 中,然后通过o s c t x s w 0 进行任务切换。在此过程中,变量 o s t c b c u r 始终包含一个指向当前运行任务o s _ t c b 的指针。o s c t x s w ( ) 函数的示 意性代码如下所示: v o i do s c t x s w ( v o i m 保存处理器寄存器; 在当前任务的任务控制块中保存当前任务的堆栈指针: o s t c b c u r - o s t c b s t k p t r = s t a c kp o i n t e r ; 调用用户定义的o s t a s k s w h o o k 0 ; o s t c b c i l r2o s t c b h i g h r d y ; o s p r i o c u r = o s p f i o h i g h r d y ; 得到将要重新开始运行的任务的堆栈指针: s t a c kp o i n t e r = o s t c b h i g h r d y - o s t c b s t k p t r ; 从新任务的任务堆栈中恢复处理器所有寄存器的值; 执行中断返回指令; ) 从图2 7 、图2 8 、图2 9 的一些变量和数据结构的变化状况我们清楚的看到任 务的整个切换过程。图2 7 示意在调用o s c m s w ( ) 之前的状况。此时o s t c b c u r 指向即将被挂起的任务( 低优先级任务) 如图2 7 中;c p u 的堆栈指针( s p 寄存器) 指向即将被挂起任务的栈顶如图2 7 中;o s t c b h i g h r d y 指向任务切换后运行的 任务的任务控制块o s t c b 如图2 7 中;高优先级任务的o s t c b 中 的o s t c b s t k p 仃指向即将运行的任务的栈顶。 图2 8 示意了调用o s c m s w 0 及挂起任务的c p u 寄存器后的情况。调用 o s c 投s w ( ) 后首先强制处理器保存p s w 和p c 的当前值如图2 8 中;然后保存通 用寄存器的值( 这部分既是o s c 救s w o 示意代码( 1 ) 所做的工作) 如图2 8 中;堆 栈指针寄存器被保存在当前任务的o s _ t c b 中,c p u 的s p 寄存器和 1 9 o s t c b c u r - o s t c b s t k p t r 指向当前任务堆栈同一位置。 0 s t c b c u r 低优先级任务 o s t c b h i g h r d y 高优先级任务 图2 7 调用0 s _ t a s k _ s w 0 前的数据结构 f i g 2 7d a t e s t r u c t u r eb e f o r et r a n s f e r r i n go st a s k _ s w o 图2 8 保存当前任务c p u 寄存器的值 f i g 2 8s a v i n gr e g i s t e rv a l u eo f t h ee u r r e m l yc p u 图2 9 示意了任务切换时及切换后的变量和数据结构的情况。由于高优先级的 任务要开始运行,任务切换代码将o s t c b h i g h r d y 复制到o s t c b c u r 如图2 9 中 ;接下来要从o s _ t c b 中找出将要重新开始运行的任务的堆栈指针( 在 o s t c b h i g h r d y - o s t c b s t l d t r 中) ,装入c p u 的s p 寄存器中如图2 9 中;要运 行任务寄存器值按相反的方向从堆栈中弹出如图2 9 中;最后通过执行中断返回 咖胃 目 自 j;i 堆 指令,p c 和p s w 的值装回到c p u 中如图2 9 中。此时,由于程序计数器p c 的值变了,重新开始运行的任务代码从p c 指向的那一点开始运行,于是切换到新 任务代码的过程完成。 低优先级任务 高优先级任务 堆栈 图2 9 重新装入要运行的任务 f i g 2 9r u n n i n gm i s s i o no fr e c a s e d ( 3 ) o s i n t c t x s w ( ) 函数 在i - t c o s i i 中,中断的产生可能会引起任务切换,在中断服务程序的最后会 调用o s i n t e x i t 0 函数检查任务就绪状态。如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省成安县2025年上半年公开招聘城市协管员试题含答案分析
- 2025年度网络直播平台虚拟礼物充值合作协议
- 2025年汽车行业车辆安全检测服务合同样本
- 2025年度航空航天测试加工服务合同签订细则
- 2025版货运司机安全押金担保合同书
- 2025版现代服务业商铺分租管理协议
- 2025年私车公用车辆维修保养与保险协议书
- 2025版机械设备借出及操作培训合同
- 2025版体育产业赛事运营委托合同
- 贵州省望谟县2025年上半年公开招聘村务工作者试题含答案分析
- 2025河北保定市市直事业单位选调58人考试备考试题及答案解析
- 肩关节运动康复新策略-洞察及研究
- 神奇的艾草教学课件
- 《耳念珠菌医院感染预防与控制专家共识(2025)》解读 2
- 环保废气基础知识培训课件
- 2026届广州市高三年级阶段训练(8月市调研摸底) 语地理试卷(含答案)
- 网络安全测验题目及答案
- 2025至2030中国密封圈行业项目调研及市场前景预测评估报告
- 2025-2026学年苏教版(2024)小学数学一年级上册教学计划及进度表
- 2025年幼儿园指南考试题目及答案
- 医美行业监管趋势下2025年美容整形手术的市场需求与消费者行为分析报告
评论
0/150
提交评论