(测试计量技术及仪器专业论文)基于niosⅡ软核cpu的tcpip协议实现.pdf_第1页
(测试计量技术及仪器专业论文)基于niosⅡ软核cpu的tcpip协议实现.pdf_第2页
(测试计量技术及仪器专业论文)基于niosⅡ软核cpu的tcpip协议实现.pdf_第3页
(测试计量技术及仪器专业论文)基于niosⅡ软核cpu的tcpip协议实现.pdf_第4页
(测试计量技术及仪器专业论文)基于niosⅡ软核cpu的tcpip协议实现.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

(测试计量技术及仪器专业论文)基于niosⅡ软核cpu的tcpip协议实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 本文主要研究了基于n i o s l l 软核c p u 的t c p i p 协议实现方案。通过分析 n i o s l i 软核c p u 的体系结构,其支持的编译器满足嵌入式实时操作系统p c o s i i 的移植条件。具体的移植工作包括:定义数据类型、定义堆栈宽度及增长方向、 设计任务的堆栈空间以及任务的切换函数。任务切换主要是用来保存和恢复处理 器现场( 寄存器) ,必须使用处理器汇编语言来完成。通过分析t c p i p 协议流程, 对其做了大量的简化,实现了几个最基本的协议:地址解析协议a r p 、网络控制 报文协议i c m p 、网际协议i p 、用户数掘报协议u d p 和传输控制协议t c p 。通过 封装i a c o s i i 的消息处理和内存管理机制,实现了供协议栈进行数据包缓冲和传 递的消息队列,从而使协议栈运行在l a c o s - i i 上。并且完成了底层网络芯片 c s 8 9 0 0 a 的驱动设计。通过将u d p 和t c p 进行封装,实现了供上层应用程序调 用的应用程序接口a p i 。 关键词:n i o s l i l t c o s i it c p i p 协议 移植 a b s t r a c t t h i st h e s i ss t u d ym a i n l yt h es c h e m eo fi m p l e m e n tt c p h pp r o t o c o lb a s e do n t h en i o s l is o f t c o r ec p u b ya n a l a s i z i n gt h es y s t e ma r c h t e c h t u r eo ft h ec p u ,i t s c o m p i l e ri ss a t i s f i e dw i t ht h ec o n d i t i o no fp o r t i n gt h ee m b e d d e dr e a l - t i m es y s t e m i _ t c o s i io ni t t h ep o r t i n gw o r ki n c l u d e st h ed e f i n i t i o no fd a t at y p e ,s t a c kw i d t ha n d s t a c ki n c r e a s ed e r e c t i o n ,t h ed e s i g no ft a s ks t a c ks p a c ea n dt a s ks w i t c hf u n c t i o n t a s k s w i t c hi sm a i n l yd e a l e dw i t ht h ep r e s e r v a t i o na n dc o m e b a c ko fc p ul o c a l e ( r e g i s t e r ) , s oi tm u s tb ep r o g r a m m e db yp r o c e s s o ra s s e m b l el a n g u a g e b ya n a l y z i n ga n d s i m p l i f y i n go ft c p i pp r o t o c o l ,s e v e r a l b a s i sp r o t o c o l sa r ei m p l e m e n t e ds u c ha s a r p ( a d d r e s sr e s o l u t i o np r o t o c 0 1 ) ,i p ( i n t e m e tp r o t o c 0 1 ) ,i c m p ( i n t e m e t c o n t r o l m e s s a g ep r o t o c 0 1 ) ,u d p ( u s e rd a t a g r a mp r o t o c 0 1 ) a n dt c p ( t r a n s m i s s i o nc o n t r o l p r o t o c 0 1 ) t h em e s s a g eq u e u ei si m p l e m e n t e db yp a c k a t i n gt h em e s s a g ep r o c e s s i n g m e c h a n i s ma n dm e m o r ym a n a g e m e n to fr t c o s i i i tc a nb eu s e df o rt h et c p i p p r o t o c o ls t a c kt ob u f f e r i n ga n dt r a n s m i t t i n gt h ed a t ap a c k e t ,w h i c hm a k e st h ep r o t o c o l s t a c kr u n so ni a c o s - i i c s 8 9 0 0 ai su s e da sl o w e rl a y e rn e t w o r kc h i pa n di t sd r i v e ri s c o m p l e t e d b yp a c k e t i n gt h eu d pa n dt c p , t h ea p p l i c a t i o np r o g r a mi m e r f a c ei sa l s o c o m p l e t e d ,w h i c hc a l lb ec a l l e db yh i g h e rl a y e ra p p l i c a t i o np r o g r a m k e y w o r d :n i o s l i p c o s i i t c p ,i p p o r t i n g 创新性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果;也不包含为获得西安电子科技大学或 其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做 的任何贡献均已在论文中做了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名:同期 关于论文使用授权的说明 本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究生 在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。本人保证毕业 离校后,发表论文或使用论文工作成果时署名单位仍然为西安电子科技大学。学 校有权保留送交论文的复印件,允许查阅和借阅论文:学校可以公布论文的全部 或部分内容,可以允许采用影印、缩印或其它复制手段保存论文。( 保密的论文在 解密后遵守此规定) 本人签名 导师签名盔! ! 同期 f 1 期 第一章绪论 第一章绪论 1 1 引言 随着计算机技术、芯片制造工艺以及i n t e m e t 的不断发展和相互结合,使得嵌 入式系统的应用日益广泛。嵌入式系统目前已广泛应用于通讯、网络、金融、航 天、航空、消费电子、军事装备、仪器仪表、制造业控制等领域。在嵌入式系统 的应用开发中,采用嵌入式实时操作系统( 简称r t o s ) 能够支持多任务,使得程 序| 丌发更加容易,便于维护,同时能够提高系统的稳定性和可靠性。这已逐渐成 为嵌入式系统开发的一个发展方向。同时,以高端处理器作为高性能嵌入式系统 的核心,并且支持i n t e m e t 访问,是嵌入式技术发展的必然趋势。 1 2 嵌入式系统简介 嵌入式系统是继网络技术之后,又一个新的技术发展方向。i e e e ( 国际电气 和电子工程师协会) 对嵌入式系统的定义为:嵌入式系统是“用于控制、监视或 者辅助操作机器和设备的装置”。国内普遍认同的嵌入式系统定义为:以应用为中 心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、 成本、体积、功耗有严格要求的专用计算机系统f ij 。它包括硬件和软件两部分。硬 件部分包括处理器( 微处理器) 、存储器及i o 外设、图形控制器等。软件部分包 括嵌入式操作系统软件( 要求实时和多任务) 和应用软件。应用程序控制着系统 的运作和行为,而操作系统控制着应用程序编程与硬件的交互作用。有时把这两 种软件组合在一起。 嵌入式系统的核心是嵌入式微处理器。它一般具备以下4 个特点: ( 1 ) 对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应 时间,从而使内部的代码和实时内核心的执行时问减少到最低限度。 ( 2 ) 具有功能很强的存储区保护功能。这是由于嵌入式系统的软件结构已模 块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区 保护功能,同时也有利于软件诊断。 ( 3 ) 可扩展的处理器结构,支持硬件可裁减。 ( 4 ) 嵌入式微处理器必须功耗很低,尤其是用于靠电池供电的便携式无线及 移动通信设备。 嵌入式系统与通用型计算机系统相比具有以下特点: ( 1 ) 嵌入式系统通常是面向特定应用的,它通常都具有低功耗、体积小、集 成度高等特点,能够把通用c p u 中许多由板卡完成的任务集成在芯片内部,从而 有利于嵌入式系统设计趋于小型化,移动能力大大增强。 ( 2 ) 嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业 2基于n i o s l l 软核c p u 的t c p 1 p 协议实现 的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、 高度分散、不断创新的知识集成系统。 ( 3 ) 嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余, 力争在同样的硅片面积上实现更高的性能,这样卅+ 能在具体应用中对处理器的选 择更具有竞争力 ( 4 ) 嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产 品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。 ( 5 ) 为了提高执行速度和系统可靠性,嵌入式系统中的软件般都固化在非 易失性存储器( r o m 、e p r o m 、e e p r o m 和f l a s h ) 芯片中。 ( 6 ) 嵌入式系统通常对时间的要求非常严格,一般都要使用嵌入式实时操作 系统。 13 嵌入式操作系统简介 嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件。它是嵌入式系 统的重要组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动 接口、通信协议、图形界面等。嵌入式操作系统具有通用操作系统的基本特点, 如能够有效管理系统资源;能够把硬件虚拟化,使得开发人员从繁忙的驱动程序 移植和维护中解脱出来:能够提供库函数、标准设备驱动程序以及工具集等。与 通用操作系统相比,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软 件固态化以及应用的专用性等方面具有较为突出的特点。 嵌入式操作系统大部分是实时操作系统r t o s ( r e a lt i m eo p e r a t i n gs y s t e m ) 【2 j 【”。所谓实时,是指一个处于就绪的高优先级的任务能够立即得到c p u 的使用 权,而且在得到c p u 的使用权后,如果没有其它更高优先级任务出现,则一直执 行到工作结束。r t o s 将c p u 、i o 、定时器、中断等资源都包装起来,留给用户 一个标准的a p i 。 嵌入式操作系统种类繁多,通常可分为2 种:商用型和免费型。目f j 商用型的 嵌入式操作系统主要有v x w o r k s 4 1 、w i n d o w sc e 、q n x 等。它们的优点是功能稳 定、可靠,有完善的技术支持和售后服务;能运行在各种不同的微处理器上:具 有强大的通用型操作系统的功能,如文件和目录管理、多任务、设备驱动支持、 网络支持、图形用户界面等功能;具有丰富的a p i 和嵌入式应用软件。缺点是价 格昂贵且不开放源代码,这就大大限制了它们的应用。目前免费的嵌入式操作系 统有l i n u x 5 i 和i t c o s i i ( 6 j ,它们公开源代码并且易于移植,因此被广泛应用。在 r t o s 领域占有越来越重要的地位 伴随着嵌入式操作系统的发展,面向i n t e m e t 的嵌入式操作系统正同益引起人 们的重视,成为重要的发展方向。嵌入式系统与i n t e m e t 的结合、嵌入式操作系统 第一章绪论 3 与应用设备的无缝结合代表着嵌入式操作系统发展的未来。 1 4 嵌入式系统与系统级可编程芯片 嵌入式系统对硬件的体积、重量、功耗、成本、可靠性都有不同程度的要求, 对某些指标又会有特殊的要求。例如,手机一类的移动设备对功耗特别敏感,信 息家电产品成本很敏感,军用设备对可靠性等指标要求极高。因此,对不同的应 用领域,其需求的侧重点是不同的,必须认真考虑选择合适的软硬件平台。 随着集成电路技术及工艺的发展,用可编程逻辑技术把整个系统集成到一块 芯片上,称作可编程片上系统s o p c ( s y s t c mo l lp r o g r a m m i n gc h i p ) i ) 1 i s 。s o p c 是一种特殊的嵌入式系统,它具备软硬件在系统可编程的功能,具有软硬件可裁 减、可扩充、可升级等灵活的设计方式。基于s o p c 的嵌入式系统,不论在体积、 重量、功耗、成本、可靠性等方面均可达到理想效果,将成为嵌入式系统的一个 理想的平台。 总的来浇,嵌入式系统向着高性能、低功耗、小体积、更廉价的方向发展。 嵌入式系统的设计和实现朝着基于s o p c 的方向发展。为了降低研制难度,常采 用融合微处理器技术、数字信号处理技术、可编程系统级:枣片设计和软硬件协同 设计技术【9 i 于一体的嵌入式系统的设计方法。这样可以提高嵌入式系统的| 丌发效率 和质量,缩短产品开发周期。 1 5 研究工作概要及工作简介 1 5 1 主要工作 本文主要对n i o s l i 软核c p u 、嵌入式实时操作系统1 t c o s i i 以及t c p i p 协 议进行了深入的研究,并在n i o s l l 上实现了t c p i p 协议。首先深入研究了n i o s l i 软核c p u 的体系结构,并在该c p u 上用汇编语言移植了 t c o s i i 。然后通过对 t c p i p 协议进行深入分析,将其做了大量的简化,最后在“c o s i i 上实现。 研究工作可以分为以下三个阶段: ( 1 ) 前期工作,熟悉n i o s l i 软核c p u 的结构及其指令集,熟悉嵌入式实时 操作系统f a c o s i i 以及t c p i p 协议。 ( 2 ) 在n i o s l l 软核c p u 上用汇编语言移植了p c o s i i 。 ( 3 ) 对t c p i p 协议进行简化,将其在t t c o s i i 上实现。 本文的主要成果: ( 1 ) 用汇编语言在n i o s l l 上移植了“c o s i i 。 ( 2 ) 实现了a r f 、i p 、i c m p 、u d p 和t c p 几个基本协议;将u d p 和t c p 封装,为上层应用程序提供了应用程序接口a p i ;同时完成底层网络芯 片的驱动程序设计。 4 基于n i o s l l 软核c p u 的t c p , q p 协议实现 1 5 2 论文章节安排 第一章为绪论,简要介绍了嵌入式系统和嵌入式操作系统,以及嵌入式系统的 发展新方向。第二章,简要介绍了n i o s l l 软核c p u 和嵌入式实时操作系统i t c o s i i , 深入研究3 i t c o s i i 在n i o s l i 上的移植。第三章,介绍了t c p i p 协议参考模型, 重点介绍了a r p 、i p 、i c m p 、u d p 和t c p 几个基本协议。第四章,重点介绍了 a r p 、i p 、i c m p 、u d p 和t c p 几个协议的设计,以及它们在l a c o s 1 i 上的实现。 第五章介绍了应用程序接口设计以及网络驱动设计。结束语对本设计方案进行了 讨论和展望。 第二章i t c o s 1 1 在n i o s l l 上的移植 5 第二章t t c l o s i i 在n i o s l i 上的移植 2 。ln i o s l i 简介 n i o s l l 伸1 软核c p u 是a l t e r a 公司开发的软核处理器。该处理器采用哈佛结构, 可由用户自己配置参数,具有非常好的灵活性,可操作性和强大的处理能力。结 合丰富的外设、专用指令和硬件加速单元创建可编程片上系统鼍s o p c ) 解决方案。 采用n i o s l l 具有以下2 方面的优势: ( 1 ) n i o s 技术可以方便快捷的完成设计任务。 在a l t e r a 提供的设计软件q u a r t u s l l 中提供多种硬件设计语言,如v h d l , v e r i l o g h d l 等。q u a r t u s 还提供了多种文件方式,如网表文件,框图文件等,供用 户选择。在设计过程中,设计软件将已经优化的i pc o r e 集成于软件s o p cb u i l d e r 中。用户只需要在模块列表中双击需要的功能模块,就可以在系统中添加相应功 能模块,并通过图形化界面设置所需的参数。整个设计方便快捷。 ( 2 ) n i o s 技术可以高效率的完成设计任务 n i o s l i 采用a v a l o n j 2 1 总线技术,提高了运算效率。 传统的总线逻辑如图2 1 左图所示,其中,一个总线仲裁逻辑控制一个或多个 总线主控器( m a s t e r ) 与总线受控器( s l a v e r ) 之间的通信。每个主控器要得到总线, 都必须先向总线仲裁逻辑申请并得到批准。当多个主控器申请总线时,总线仲裁 逻辑就根据事先制定好到仲裁法则选定其中的一个主控器,授予其访问权限,而 令其余到主控器处于等待状态。因此不可避免到产生了瓶颈效应。 n i o s l ic p u 采用了右图所示的a v a l o n 总线逻辑。不像传统微处理器有共享的 总线,n i o s l ic p u 在每个主控器与相应的受控器间产生连接逻辑。所以,只要不 出现两个或两个以上的主控器同时访问同一个受控器,a v a l o n 总线就允许多个主 6 基于n i o s l l 软核c p u 的t c p i p 协议实现 控器同时与相应的受控器通信,从而提供处理器的效率。 当然,在多主控器同时工作的结构中也不可避免的会出现多个主控器争用同 一个受控器的情况,所以在a v a l o n 总线中也有仲裁逻辑。仲裁机理同传统总线逻 辑的仲裁机理类似。 除了提高单个c p u 的效率外,n i o s l i 还允许在同一个系统中设计多个c p u 相互协作。 2 2u c o s - i i 简介 i a c o s 出自于美国的一位嵌入式系统专家j e a nj l a b r o s s e 。目前已经广泛应用 于各个领域,如医疗仪器、音响设备、发动机控制、网络接入设备、a t m 机、工 业机器人等。近几年的应用表明,这个r t o s 是稳定可靠的。1 9 9 8 年,作者出了 r t c z o s 的第二本书”g c o s - i it h er e a lt i m ek e r n e l ”,给l a c o s 增加了一些新的功能, 并且增加了约2 0 0 页的解释,对实时操作系统中的一些基本概念做了详细的描述。 p c o s 和g c o s i i 是专门为计算机的嵌入式应用设计的,绝大部分代码是用c 语言写的。c p u 硬件相关部分是用汇编语言写的。汇编语言部分被压缩到最低限 度,为的是便于移植到任何一种其它的c p u 上。用户只要有标准的c 交叉编译器, 有汇编、连接等软件工具,就可以将c o s i i 嵌入到丌发的产品中。 因为i t c o s i i 是为了嵌入式应用编写的通用软件,它不得不强调各种c p u 的 共性,并将汇编代码、c p u 硬件相关部分代码压缩到最小。读懂这些源码以后, 根据不同c p u 的特点,对l a c o s i i 中的函数可进一步优化,改善r t o s 的实时性。 p c o s i i 具有以下一些特点: 1 ,公开源代码 i _ t c o s i i 的全部源代码都是公开的。并且组织有序、注解详尽、清晰易读。 2 ,可移植性( p o r t a b l e ) 绝大部分g c o s i i 的源码是用移植性很强的a n s ic 写的。和微处理器硬件相 关的那部分是用汇编语言写的。汇编语言+ 写的部分已经压到最低限度,使得 p c o s - i i 便于移植到其它微处理器上。i a c o s i i 可以在绝大多数8 位、1 6 位、3 2 位以至6 4 位微处理器、微控制器、数字信号处理器( d s p ) 上运行。 3 ,可固化( r o m a b l e ) g c o s i i 是为嵌入式应用而设计的。只要读者有固化手段( c 编译、连接、 下载和固化) ,l a c o s i i 就可以嵌入到读者的产品中成为产品的一部分。 4 ,可裁剪( s c a l a b l e ) 可以只使用g c o s i i 中应用程序需要的那些系统服务。这样可以减少产品中 的t t c o s i i 所需的存储空间( r a m 和r o m ) ,这种可裁剪性是靠条件编译实现 的。只要在用户的应用程序中( 用# d e f i n ec o n s t a n t s 语句) 定义哪些t t c o s i i 中的 第二章p c o s i i 在n i o s l l 上的移植 7 功能是应用程序需要的就可以了 5 ,占先式- ( p r e e m p t i v e ) i t c o s - i i 是占先式的实时内核。这意味着p c o s i i 总是运行就绪条件下优先 级最高的任务。大多数商业内核也是占先式的,l a c o s i i 在性能上和它们类似。 6 ,多任务 t a c o s i i 可以管理6 4 个任务保留8 个给系统,应用程序最多可以有5 6 个 任务。赋予每个任务的优先级必须是不同的,这意味着l t c o s i i 不支持时间片轮 转调度法( r o u n d - r o b i ns c h e d u l i n g ) 。该调度法适用于调度优先级平等的任务。 7 ,任务栈 每个任务有自己单独的栈,r t c o s i i 允许每个任务有不同的栈空问。以便压 低应用程序对r a m 的需求。使用“c o s i i 的栈空间校验函数,可以确定每个任务 到底需要多少栈空间。 8 ,系统服务 p c o s i i 提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的 内存申请与释放、时间相关函数等。 9 ,中断管理 中断可以使正在执行的任务暂时挂起。如果优先级更高的任务被该中断唤醒, 则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达2 5 5 层。 2 3i t c o s 1 i 在n i o l i 上的移植 2 3 1 移植的概念 所谓移植【6 】,就是使一个实时内核能在其它的微处理器或微控制器上运行。为 了方便移植,大部分肛c o s i i 的代码都是用c 语言编写的,但是仍需要用c 语言 和汇编语言编写一些与处理器硬件相关的代码。这是i 撕c o s i i 在读写处理器 寄存器时,只能通过汇编语言来实现。 要使“c o s i i 能正常运行,处理器必须满足以下要求: ( 1 ) 处理器的c 编译器能产生可复用代码1 6 1 : ( 2 ) 处理器支持中断,并且能产生定时中断 ( 3 ) 用c 语言就可以开关中断; ( 4 ) 处理器能支持一定数量的数据存储硬件堆栈; ( 5 ) 处理器有将堆栈指针以及其他c p u 寄存器的内容读出、并存储到堆栈或 内存中去的指令。 图2 2 示意p c o s i i 的结构以及与硬件的关系。使用i t c o s i i 时,用户需要提 供应用软件和i _ t c o s i i 配置代码。 8 基于n i o s l l 软核c p u 的t c p i p 协议实现 2 3 2 移植的文件和函数 p c o s 1 1 实际上可以看作是一个多任务的调度器在这个任务调度器之上完善 并添加了和多任务操作系统相关的一些系统服务,如信号量、邮箱、消息队列等。 移植工作的绝大部分都集中在多任务切换的实现上,因为这部分代码主要是用来 保存和恢复处理器现场( 相关的寄存器) ,因此不能用c 语言,只能使用处理器的 汇编语言完成。 i _ t c o s i i 的全部源代码量大约是6 0 0 0 - - 7 0 0 0 行,一共有1 5 个文件。柳c o s i i 移植到n i o s i i 处理器上,只需修改三个和n i o s l i 体系结构相关的文件。下面分别 介绍这三个文件的移植工作: o sc p u h 文件 数据类型定义: 这部分的移植是和所用的编译器相关的,我们使用的编译器是n i o s 2 e l f - g c c 。 需要定义的数据类型如下: t y p e d e fu n s i g n e d c h a rb o o l e a n ; 第二章p c o s 1 1 在n i o s l l 上的移植 9 t y p c d e f u n s i g n e d c h a ri n t 8 u ; t y p e d e f s i g n e d c h a ri n t 8 s ; t y p e d e f u n s i g n e d i n ti n t i6 u ; t y p c d e fs i g n e d i n t i n t l 6 s ; t y p e d e fu n s i g n e dl o n gi n t 3 2 u ; t y p e d e fs i g n e dl o n g i n t 3 2 s ; t y p e d e f f l o a t f p 3 2 ; t y p e d e f d o u b l e f p 6 4 ; 堆栈宽度: 因为处理器现场的寄存器在任务切换时都将被保存在当前运行任务的堆栈中, 所以0 ss t k 数据类型应该与处理器的寄存器长度一致。 t y p e d e fi n t 3 2 u ,o s s t k ; 堆栈增长方向: 堆栈由高地址向低地址增长,这和选择的编译器有关。 # d e f i n e o s s t k g r o w t h l 宏定义( 包括丌、关中断的宏定义,以及进行任务切换的宏定义) # d e f i n eo se n t e rc r i t i c a l ( ) d i s a b l ei n t e r r u p t 0 ; 产关中断+ # d e f i n e o s _ e x i t - - c r i t i c a l ( )e n a b l e _ i n t e r r u p t ( ) 严丌中断+ 这两个函数分别是进入临界区和退出临界区的宏指令。主要用于在进入临界 区之前关中断,在退出临界区的时候恢复原来的中断状态。 # d e f i n e o s _ t a s k _ s w ( ) o s c t x s w ( ) o st a s k 是一个宏,是在 从低优先缎任务切换到高优先级任务_ s w op c o si i 时用到的。o st a s ks w o 总是在任务级代码中被调用。另一个函数o s i n t e x i t o 用在中断服务子程序i s r 中。当中断服务子程序使更高优先级任务进入就绪态时。 o s i n t e x i t 0 完成任务切换功能。任务切换只是简单地将处理器的寄存器保存到将被 挂起的任务的堆栈中,并且从堆栈中恢复要运行的更高优先级的任务。 在i a c o s i i 中,处于就绪念任务的堆栈结构看起来就像刚刚发生过中断一样, 所有的寄存器都保存在堆栈中。换句话说,p c o s i i 要运行处于就绪念的任务必 须要做的事情就是,从任务堆栈中恢复处理器所有的寄存器,并且执行中断返回 指令。为了任务调度,可以通过执行0 s j a s k _ s w 0 模仿中断的产生。绝大多数 处理器会提供软中断或陷阱指令( t r a p ) 来完成这项功能。中断服务子程序或陷 阱处理函数( 也叫做异常处理函数) 的中断向量地址必须指向汇编语言函数 o s c t x s w o 。用户必须实现这项要求。 o s _ c p u _ c c 文件 在该文件中必须实现的函数是o s t a s k s t k l n i t 0 ,其它的函数必须声明,但不一 i o 基于n i o s l l 软核c p u 的t c p i p 协议实现 定要包含任何代码 函数o s t a s k s t k l n i t o 实现任务初始化时的堆栈空间设计,也就是在堆栈增长方 向上如何定义每个需要保存的寄存器的位置。我们将堆栈空间设计为,按任务堆 栈空间由高至低依次保存寄存器r a 、i s t a t u s 、r l r 3 1 、s t a t u s t m i 。如图2 3 函数o s t a s k c r e a t e o 和o s t a s k c r e a t e e x t ( ) 通过调用o s t a s k s t k l n i t 0 来仞始化任 务的堆栈。因此,堆栈看起来就像中断剐发生过一样,所有寄存器都保存在堆栈 中。o s t a s k s t k l n i t 0 的伪代码如下所示( 这里假定堆栈是从上往下递减的) : o s s t k + o s t a s k s t k l n i t ( v o i d( + t a s k ) ( v o i d + p d ) , v o i d + p d a t a , o ss t k + p r o s , i n t l 6 u o p t ) ; 模拟带参数( p d a m ) 的函数调用; ( 1 ) 模拟i s r 向量: ( 2 ) 按照预先设计的寄存器值初始化堆栈结构; ( 3 ) 返回栈顶指针给调用该函数的函数; ( 4 ) 图2 4 显示了o s t a s k s t k l n i t 0 在建立任务时,任务堆栈应陔仞始化成何种形式。 第二章p o l o s 1 i 在n i o s l l 上的移植 ( 3 ) 1 氐l 衙内 手 处理器其它的寄存器 处理器状态字 中断返回地址 任务起始地址 p d a t a 图2 4 初始化堆栈结构 七堆栈指针 ( 4 ) l 方向 下面对伪代码中的4 个步骤做详细 兑明 ( 1 ) 假定p d a t a 会被编译器保存到堆栈中,o s t a s k s t k l n i t 0 就会模拟编译器的 这种行为,将p d a t a 保存到堆栈中。 ( 2 ) 因为该函数根本就没有被调用,只是为了建立一个任务结构,好像这段 任务代码被调用过一样。o s t a s k s t k l n i t 0 函数仅仅知道任务的起始地址( 是作为参 数传递过来的) 。 ( 3 ) o s t a s k s t k l n i t 0 需要将处理器的寄存器保存在堆栈中。当处理器识别并开 始执行中断时,它会自动地完成该过程。一些处理器会将所有的寄存器都推入堆 栈,而另外一些处理器只将部分寄存器推入堆栈。通常,处理器至少需要将程序 计数器的值( 中断返回地址) 和处理器的状态字存入堆栈。显然,处理器是按一 定的顺序将寄存器推入堆栈的,这就要求用户在将寄存器推入堆栈时,也必须按 照这一顺序。 ( 4 ) 初始化堆栈之后,o s t a s k s t k i n i t 0 应当返回堆栈指针所指向的地址。函数 o s t a s k c r e a t e 0 或o s t a s k c r e a t e e x t 0 得到这个地址,并保存在任务控制块中。 在该文件中还需要实现几个操作系统规定的h o o k 函数。如果没有特殊需求, 都实现为空函数即可。 o sc p u a s 文件 在o sc p ua s 文件中,用户需要编写4 个汇编函数: ( 1 ) o s s t a r t h i g h r d y o i 弱数 此函数是在o s s t a r t o 多任务启动后,负责从最高优先级任务的任务控制块t c b 中获得该任务的堆栈指针s p ,通过s p 依次将c p u 现场恢复。这时系统就将控制权 交给用户创建的该任务进程,直到该任务被阻塞或者被其他更高优先级的任务抢 占c p u 。该函数仅仅在多任务启动时被执行一次,用来启动优先级最高的任务执 1 2 基于n i o s l l 软核c p u 的t c p i p 协议实现 行。o s s t a r t h i g h r d y o 函数的伪代码如下: v b 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 0 ; o s r u r m i n g = 1 1 j i 也: 得到将要恢复运行任务的堆栈指针: 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 r p t r ; 从新任务堆栈中恢复处理器的所有寄存器; 执行中断返回指令; ( 2 ) o s c t x s w o 函数 任务级的上下文切换函数。它是当任务因为被阻塞而主动请求e p u 调度时被执 行。它的工作是先将当前任务的c p u 现场保存到该任务堆栈中,然后获得最高优 先级任务的堆栈指针,从该堆栈中恢复此任务的c p u 现场,使之继续执行。 o s c t x s w 0 的伪代码如下: v o i do s c t x s w ( v o i d ) 保存处理器寄存器; 在定前任务的任务控制块中保存当前任务的堆栈指针: 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 ( ) ; o s t c b c u r = o s t c k h i g h r d y : o s p r i o c u r = o s p r i o h i g t w 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 r p t r ; 从新任务的任务堆栈中恢复处理器所有寄存器的值; 执行中断返回指令; ( 3 ) o s t i e l d s r 0 函数 时钟中断处理函数。它的主要任务是负责处理时钟中断,调用系统实现的 o s t i m e t i c k 函数,如果有等待时钟信号的高优先级任务,则需要在中断级别上调 度其执行。 必须在开始多任务后,即调用o s s t a r t o 后,启动时钟节拍中断;但由于函数 o s s t a r t 0 不会返回,用户无法实现这一操作。然而,可以在o s s t a r t 0 运行后,启动 运行的第一个任务中初始化时钟节拍中断。这个任务是调用o s s t a r t 0 之前建立的 第二章p c o s i i 在n i o s l l 上的移植 1 3 任务中优先级最高的任务。o s 啊c m s r o 的伪代码如下: v b i do s t i c m s r ( v o i d ) 保存处理器寄存器: 调用o s i n t e n t e r 0 或者直接给o s i n t n e e t i n g 加l : i f ( o s i n t n e s t i n g 1 ) o s t c b c u r - - o s t c b s t r p t r ;s t a c kp o i n t e r ; 给产生中断的设备清中断: o s t i m e t i c k 0 ; o s i n t e x i t 0 ; 恢复处理器寄存器: 执行中断返回指令: ( 4 ) o s i n t c t x s w 0 函数 中断级的任务切换,它是在i s r ( 中断服务例程) 中执行任务切换。当发现有 高优先级任务就绪,则在中断退出后并不返回被中断任务,而是直接调度就绪的 最高优先级任务执行。这样做的目的是尽快的让高优先级的任务得到响应,保证 系统的实时性。它的原理基本上与任务级的切换相同,但由于进入中断时已经保 存过被中断任务的c p u 现场,这里就不用再保存。o s i n t c t x s w o 的伪代码如下: v o i do s i n t c t x s w ( v o i d ) 调用用户定义的o s t a s k s w h o o k 0 : o s t c b c l l r = o s t c k h i g h r d y : o s p r i o c u r = o s p r 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 r p t r ; 从新任务的任务堆栈中恢复处理器所有寄存器的值; 执行中断返回指令: o s i n t c t x s w ( ) i 函数的绝大多数代码同o s c t x s w ( ) 函数是一样的。区别只是,应 为i s r 已经保存了c p u 的寄存器,因此就不需要在o s i n t c t x s w ( ) 函数中再保存 c p u 的寄存器。实际上如果需要,可以跳转到o s c t x s w o 函数中相同的代码,以 减少代码量。 本章简要介绍了n i o s l i 软核c p u 和嵌入式实时操作系统l a c o s i i ,重点介绍 1 4基于n i o s l l 软核c p u 的t c p i p 协议实现 t p c o s - i i 在n i o s l i 上的移植,包括移植所要实现的文件和函数等。 第三章t c p ,l p 协议简介 第三章t c p i p 协议简介 3 1 引言 t c p i p 协议【n 1 ,即传输控制协议网际协议是一个开放式的通讯协议,开放 性意味着在任何网络之间,不管这些设备的物理特征有多大差异,都可以进行通 信。本章主要介绍t c p i p 协议参考模型。 3 1 1 参考模型 t c p i p 是一种分层模型。它是由基于硬件层次上的四个层次结构,即应用层、 传输层、网络层和数据链路层。t c p i p 协议的分层模型结构如图3 ,1 所示。 应用层 传输层 网络层 数据链路层 h t t p 、f t p 年f l e m a i1 等 t c p 和u d p i p 、i c m p 齐ni g m p a r p 、网络驱动 圈3 it c p | p 协议参考模型 链路层:通常又分为数据链路层和网络接口层,包括操作系统中的设备驱动 程序和计算机中对应的网络接口卡。数据链路层处理硬件( 任何传输媒介) 的物 理接口细节。必须对这些硬件设各的电气特性作一个舰范,使这些设备都能够互 相连接并兼容使用;网络接口层定义了如何使用实际网络( 如e t h e m e t ) 来传送 数据。它定义了将数据组成正确帧的规范和在网络中传输帧的规范。帧是指一串 数据,它是数据在网络中传输的单位。 网络层:本层定义了互联网中传输的“信息包”格式,以及从一个用户通过一 个或多个路由器到最终目标的“信息包”转发机制。它负责提供基本的数据包封装 和传送功能,让每个数据包都能够到达目的主机( 但不检查是否被e 确接收) 。在 t c p i p 协议族中,网络层协议包括i p 协议( 网际协议) ,i c m p 协议( 互联网控 制报文协议) ,以及i g m p 协议( 互联网组管理协议) 。 传输层:为两个用户进程之间建立、管理和拆除有效的端到端连接。在此层 中,它提供了节点问的数据传送服务,如传输控制协议( t c p ) 、用户数据报协议 ( u d p ) 等,t c p 和u d p 给数据包加入标志符号并把它传输到下一层中。t c p 1 6 基于n i o s l l 软核c p u 的t c p i p 协议实现 提供可靠的数据传输,而u d p 则提供不可靠的数据传输,其可靠性由上层应用程 序提供。 应用层:它定义了应用程序使用互联网的规程。如简单电子邮件传输 ( s m t p ) 、文件传输协议( f t p ) 、网络远程访问协议( t e l n e t ) 等。 3 1 2t c p ,i p 分层模型的工作原理 数据包在t c p i p 协议栈中传输的时候,是由上至下或由下至上,逐层进行传 输的。在整个协议层次结构中,通讯协议使用了封装和分用的技术。发送方在报 文中加入报文的类型、选用的协议等附加信息,然后发送出去

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论