




已阅读5页,还剩64页未读, 继续免费阅读
(通信与信息系统专业论文)基于μcosⅡ的嵌入式tcpip协议栈的开发.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中文摘要 嵌入式网络协议应用广泛,因为它简单易懂。便于推广。 本文首先对t c p i p 协议以及嵌入式“c o s i i 操作系统进行一定的探讨研 究,然后使用此操作系统编写t c p i p 协议栈。在系统的硬件目标板上的核心芯 片使用的是5 1 微控制器i 网络接口芯片使用的是r e a l t e k 公司的r t l 8 0 1 9 a s 实 现网络互连。 方案中,首先要进行的是使硬件系统工作正常,微控制器可以控制网卡芯片 的数据收发,然后将嵌入式操作系统依照5 1 微控制器的结构移植到目标板上。 在此o s i i 操作系统下编写a r p 、i p 、t c p 、u d p 等协议。此方案实现的是网络 中s e r v e r 端的功能。在协议栈中共建立了三个任务:网卡接收任务,实现查询 网卡,判断是否有数据到达;t c p s e r v e r 任务,与客户端建立t c p 连接; u d p s e r v e r 任务,与客户端建立u d p 连接。三个任务中,t c p s e r v e r 任务的优 先级最高,三者通过c o s i i 中提供的信号量功能实现任务之间的切换。上述 为方案的大体流程,其中具体实现过程,比如内存分配参数,数据缓冲区大小的 开辟等内容要依具体应用而定,使系统性能达到最佳。 上述主要功能和算法均由软件编程实现小型t c p i p 协议栈。;因为硬件系统 无须改变,所以可以方便地进行算法升级,同时也便于移植。实验袁明,硬件系 统所提供的r o m 和r a m 空间小型对于小型协议栈是足够的。 关键字:p c o s - i i 操作系统;t c p i p 协议;5 1 微控器;信号量;网卡查询;任 务调度;内存分配;数据缓冲区 a b s t r a c t e m b e d e dn e t w o r kh a sb e e na p p l i e d e x t e n s i v e l y i ti se a s yt ou n d e r s t a n da n d p r o m o t i nt h i sa t i c a l ,w r i t e rp r o b e si n t ot h et c p i p p r o t o c o la n di c o s i io p e r a t i o n s y s t e m ,a n dc o m p i l e t c p i p p r o t o c o ls t a c kw i t h 斗c o s - i io s i n t h i ss y s t e m s h a r d w a r e t h em a i nc p ui s5 1m i c r o c o n t r o l l e r ;e t h e m e tc a r di sr t l 8 0 1 9 a sf r o m t e a i ,t e ks e m i c o n d u c t o rc o l t d i nt h es o l u t i o n , t h ep r i m a r yt a s ki st om a k eh a r d w a r es y s t e mw o r k s m o o t h l y , a n d m i c r o - c o n t r o l l e rc a nh a n d l ed a t at r a n s f e ri ne t b e m e tc a r d n l c n t r a n s f e re m b e d d e d o si n t ot h e m i c r o c o n t r o l l e r c o m p i l ea r p , i p , u d p a n dt c p p r o t o c o lb yg c o s - i i o s ,t h i ss o l u t i o nm a k e st h ef u n c t i o no fs e r v e re n di nn e t w o r ki n t or e a l i t y t h e r ea r e t h r e et a s k si nt h e p r o t o c o ls t a c k s :e t h e m e t c a r dr e c e p t i o n ,w h i c hc a n i n q u i r e w h e t h e r t h ed a t aa r r i v e di nd e s t i n a t i o no rn o t ;t c p s e r v e r , w h i c hi ss e tu pt c pc o n n e c t i o n 、i t l lc l i e n te n d ;u d p - s e r v e r , w h i c hi ss e tu pu d pc o n n e c t i o nw i t hc l i e n te n d t h e t a s ko f t c p - s e r v e r s p r i o r i t yi st h eh j g h e s ta m o n g t h e s et h r e et a s k s 。t h et a s k sc a nb e s w i t c h e dv i as e m a p h o r e p r o v i d e db yi _ t c o s i i a b o v em e n t i o n e d o n e si st h en o r m a l p r o c e s s i nt h es o l u t i o n f o rs p e c i f i cp r o c e s s ,m e m o r ya l l o c a t e dp a r a m e t e ra n dd a t a b u f f e rs h o u l db ed e f i n e dp e rs p e c i f i ca p p l i c a t i o n a b o v em e n t i o nf u n c t i o na n d a l g o r i t h ma r ec o m p l e t e d 、v i t h s o f i a , a r ec o m p i l a t i o n i ti se a s yt ou p d a t e a l g o r i t h r aa n d c o n v e n i e n tt ot r a n s f e rb e c a u s en oc h a n g ei n h a r d w a r e t i l i sp r o j e c ts h o w st h er o m a n dr a m s p a c eo f h a r d w a r ei se n o u g h f o r m i n i p r o t o c o l s t a c k k e yw o r d :i l c i o s - i io p e r a t i o ns y s t e m ;t c p i pp r o t o c o l ;5 1m i c r o - c o n t r o l l e r ; s e m a p h o r e ;e t h e r o e tr e c e p t i o n ;t a s ks c h e d u l i n g ;m e m o r y a l l o c a t i o n ;d a t a b u f f e r 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作和取得的 研究成果,除了文中特别加以标注和致谢之处外,论文中不包含其他人已经发表 或撰写过的研究成果,也不包含为获得墨鲞盘堂或其他教育机构的学位或证 书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中 作了明确的说明并表示了谢意。 学位论文作者签名:貔船 签字日期:删伞年a 月瞎日 学位论文版权使用授权书 本学位论文作者完全了解墨洼烂有关保留、使用学位论文的规定。 特授权墨凄盘堂可以将学位论文的全部或部分内容编入有关数据库进行检 索,并采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。同意学校 向国家有关部门或机构送交论文的复印件和磁盘。 ( 保密的学位论文在解密后适用本授权说明) 学位论文作者签名:旌瓤 导师签名 签字日期;渺竹年文月佑日签字目期:矿辱年吱月l 日 第一章绪论 计算机互连网的发展 第一章绪论 我们现在已经进入了2 1 世纪。进入了一个以网络为核心的信息时代。计算 机网络是个非常复杂的系统,而且相互通信的两个计算机必须高度协调工作才 行,而这种“协调”又是相当复杂的。为了设计这样复杂的计算机网络,在最初 设计的时候即提出了分层的方法。“分层”可将庞大而复杂的问题转化为若干较 小的问题,而这些较小的局部问题就比较易于研究和处理。 国际标准化组织i s o 为了不同网络体系结构的用户能够相互交换消息,于上 世纪七十年代末成立了专门机构研究该问题,并于不久后提出了一个试图使各种 计算机在世界范围内互连成网的标准框架,即著名的开放系统互连基本参考模型 o s i r m ,简称为o s i 。在z o 世纪8 0 年代,网络互连已成为计算机领域的一个重 要的内容。 在计算机网络的发展过程中,另一个重要的事件就是在2 0 世纪7 0 年代末出 现的局域网。局域网可以使在一个单位范围内许多微型计算机互连在一起以交换 信息。局域网连网简单,只要在微型计算机中插入一个接口板就能连上电缆实现 连网。由于局域网价格便宜,传输速率高,使用方便,因此局域网得到了很多的 发展。微型计算机的大量普及,对局域网的发展也起到了很大的推动作用。 在2 0 世纪8 0 年代,许多大公司甚至一些国家的政府机构都纷纷表示支持 o s i 。然而到了2 0 世纪9 0 年代,虽然整套的0 5 i 标准都已经制定出来了,但是 规模最大、覆盖全世界的计算机网络i n t e r n e t 并未使用o s i 标准。这是因为: o s i 标准没有商业驱动力:协议实现起来过分复杂,运行效率低;o s i 的层次划 分并不太合理,有些功能在多个层次中重复出现等问题。 进入2 0 世纪8 0 年代末期以后,在计算机网络领域最引人注目的就是源于美 国的i n t e r n e t 的飞速发展。现在i n t e r n e t 己发展成为世界上最大的国际性计算 机互联网。 1 1 计算机网络协议与体系结构 1 1 1 分层次的网络体系结构 在计算机网络中要做到有条不紊地交换数据,就必须遵守一些事先约定好的 堕二兰堑笙 规则 这些规则明确规定了所交换的数据的格式以及有关的同步问题。这些为进 行网络中的数据交换而建立的规则、标准或约定即称为网络协议。对于复杂的网 络协议,其结构是采用层次式的。这样可以带来很多的好处: ( 1 ) 各层之间是独立的。桀一层仅需知道该层通过层间接口提供的服务。 ( 2 ) 灵活性好。当任何层发生变化时,只要层间接口关系保持不变,则在 这层上下的各层均不受影响。 ( 3 ) 结构上可分割开。各层都可以采用最合适的技术来实现 ( 4 ) 易于实现和维护。因为整个系统已被分解为若干个相对独立的子系统。 ( 5 ) 能促进标准化工作,因为每一层的功能及其提供的服务都已有了精确 的说明。 将计算机网络的各层及其协议的集合,称为网络的体系结构。 1 1 2 网络原理体系的划分 0s i 模型将通信会话需要的各种进程划分成7 个相对独立的功能层次,这些 层次的组织是以在一个通信会话中事件发生 的自然顺序为基础的。 l 一3 层提供了网络访问,4 7 层用于支持端 端通信 ( 1 ) 物理层物理层的任务就是透明的传送比 特流 ( 2 ) 数据链路层它的任务是在两个相邻结点 闯的线路上无差错地传送以帧为单位的数据。 ( 3 ) 网络层网络层负责在源机器和目标机器 之间建立它们所使用的路由。 ( 4 ) 传输( 运输) 层它向上层进行通信的两 个进程之间提供一个可靠的端到端的服务,使 他们看不到传输层以下的数据通信的细节。 ( 5 ) 会话层会话层的功能主要是用于管理两 个计算机系统连接阅的通信流。 ( 6 ) 表示层表示层负责管理数据编码方式。 0 s l 参考模烈屡o s i 层 敬描述次号 应甩层 7 表示屡 6 会话屡 5 传鞠屡 4 网络层3 数据链路麒 2 糖理层 1 图1 1 ( 7 ) 应用层它确定进程之间通信的性质以满足用户的需求。 o s i 的七层协议体系结构既复杂又不实用,但其概念清楚。t c p i p 的协议得 到了全世界的承认,不过它实际上并没有一个完整的体系结构,在后文将详细介 绍。 第一章绪论 1 2t c p i p 协议栈的应用 由于i n t e r n e t 得到了全世界的承认,因此i n t e r n e t 所使用的t c p i p 协议 也就成为使用最广泛的协议。同时它也在网络仪器,智能小区,远程控制等多方 面得到广泛的应用。 现在,随着互连网络的发展的越来越迅速,使得网络已经渗透到人们生活的 各个角落。各种各样的网络设备的出现为人们的生活提供了很多的方便。而这些 网络设备的核心就是嵌入式t c p i p 协议栈,它为设备的上网提供了强有力的支 持。 目前能够实现嵌入式t c p i p 协议栈的操作系统有很多,比如v x w o r k s ,l i n u x p s o s ,uc o s 等。这些操作系统各有各自的优缺点,如果单纯从经济上考虑l i n u x 和u c o s 是最有竞争力的,因为它们是免费的。尤其是u c o s ,它不仅内核小, 而且源码完全公开,这也是笔者选用它的一个原因。 1 3 本论文完成的任务 研究使用pc i o s 珏嵌入式操作系统 研究t c p i p 协议 研究uc i o s 1 i 嵌入式操作系统的移植,并且成功实现其在5 1 微控器上 的移植、运行 实现5 1 微控器控制r t l 8 0 1 9 网络芯片编写小型t c p i p 协议栈 使用uc i o s i i 操作系统在目标板上实现t c p i p 协议栈,完成网络中 s e r v e r 端的功能,实现t c p ,u d p 的连接 1 4 本课题的研制进展与成果 本课题于2 0 0 3 年初开始准备,由于受到非典的影响,进行过程中耽误了一 些时间。不过后来进展比较顺利。到目前为止,已经基本完成预定目标,实现了 既定的功能。 第二章嵌入式hc o s - i i 操作系统简介 第二章扯c o s i i 嵌入式操作系统概述 提倡在计算机嵌入式应用中使用实时操作系统r t o s ( r e a lt i m eo p e r a t i n g s y s t e m ) ,是因为r t o s 将应用分解成多任务,简化了应用系统软件的设计;r t o s 使控制系统的实时性得到保证,可以接近理论上能达到的最好水平:良好的多任 务设计,有助于提高系统的稳定性与可靠性。嵌入式系统应用的范围不胜枚举, 在个现代化的社会里,可以说,只要能想到的领域都有计算机的嵌入式应用 在我国广泛的使用嵌入式r t o s 还是最近几年的事。这是由于r t o s 的商业软 件价格昂贵,而且其中大部分是不提供源码的,即所谓的黑盒。 uc i o s i i 作为嵌入式操作系统的一只新军,是近几年才为人们所认识的。它 是一个完整的、可移植、固化、裁剪的占先实时多任务内核。u c o s i i 是用a n s i 的c 语言编写的,包含一小部分语言代码,使之可供不同构架的微处理器使用。 世界上已有数千人在各个领域中使用 c i o s ,这些领域包括:照相机行业、航空 业、医疗器械和工业机器人等 2 1 实时操作系统的撅念 实时操作系统的特点是,如果逻辑和时序出现偏差,将会引起严重的后果。 有2 种类型的实时系统:软实时系统和硬实时系统。在软实时系统中,系统的宗 旨是使各个任务尽快的运行,丽不要求限定某一任务在多长时间内完成:在硬实 时系统中,各任务不仅须执行无误,而且要做到准时。 大多数实时系统是两者的结合。实时系统的应用涵盖广泛的领域,绝大多数 实时系统都是嵌入式的。这指计算机建立在系统内部,用户看不到有个计算机在 此系统里面。 在嵌入式实时系统中,最重要的一个概念就是任务,也可以称为线程。实时 应用程序的设计过程就是把要解决的问题分割成多个任务,每个任务是整个应用 程序的一部分,给每个任务赋予一定的优先级。多任务运行的实现实际上是靠 c p u 在许多任务之间转换和调度。c p u 只有一个,轮番服务于一系列任务中的某 一个。多任务运行使c p u 利用率达到最高,并使应用程序模块化。在实际应用中, 多任务的最大特点是,开放人员可以将很复杂的应用程序层次化。使用多任务, 应用程序将更容易设计与维护。因此,每个任务都是一个无限的循环,都处在以 下5 种状态之一一休眠态、就绪态、运行态、挂起态及被中断态。 4 第二章嵌入式uc o s i i 操作系统简介 在多任务系统中,内核( k e r n e l ) 负责管理各个任务,或者说为每个任务分 配c p u 时间,并且负责任务间的通信。内核提供的基本服务是任务切换。使用实 时内核可以大大简化应用系统的设计,因为实时内核允许将应用分成若干个任 务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,因为内核 提供的服务需要一定的执行时间。额外负荷的量取决于用户多久调用一次这类服 务。在设计得较好的应用系统中,内核占用2 一5 的c p u 负荷。因为内核是加在 用户应用程序中的软件,会增加r o m ( 代码空间) 的用量,内核本身的数据结构增 加了r a m ( 数据空间) 的用量。更重要的是,每个任务要有自己的栈空间,这部分 占用内存相当多。 多数实时内核是基于优先级调度法的。每个任务根据其重要程度的不同,被 赋予一定的优先级。基于优先级的调度法是指,c p u 总是让处于就绪态的、优先 级最高的任务先运行。基于优先级的内核有2 种类型:不可剥夺型和可剥夺型。 不可剥夺型内核要求每个任务主动放弃c p u 的使用权。异步事件由中断服务 来处理。中断服务可使一个高优先级的任务由挂起态变为就绪态,但中断服务以 后,使用权还是回到原来被中断了的那个任务,直到该任务主动放弃c p u 的使用 权,一个新的高优先级的任务才能获得c p u 的使用权。 可剥夺型内核在系统响应事件很重要的场合使用。因此p c o s i i 以及绝大多 数商业的实时内核都是使用可剥夺型内核。最高优先级的任务一旦就绪,总能得 到c p u 的使用权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态 时,当前任务的c p u 使用权就被剥夺了,或者说被挂起了,更高优先级的任务立 刻得到了c p u 的使用权。如果是中断服务子程序是一个商优先级的任务进入就绪 态,中断完成时,中断了的任务被挂起,优先级高的任务开始运行。 在多任务系统中。除了可以使用优先级调度法外,还可以使用时间片轮番调 度法。当2 个或2 个任务有同样的优先级时,内核允许1 个任务事先确定的一段 时间,这段时间叫做时间额度( q u a n t u m ) ,然后切换给另一个任务。这个过程叫 做时间片轮番调度。 在多任务系统中,任务之间或中断服务与任务之间要进行通信,这种信息转 递称为任务间的通信。任务间信息的传递有2 个途径:通过全程变量或发消息给 另一个任务。用全程变量时,必须保证每个任务或中断服务子程序独享该变量。 中断服务中保证独享的唯一办法就是关中断。如果两个任务共享某变量,各任务 实现独享该变量的办法可以是关中断,再开中断,或使用信号量。但是任务只能 通过全程变量与中断服务予程序通信,而任务并不知道什么时候全程变量被中断 服务子程序修改了,除非中断服务子程序以信号量方式向任务发信号。要避免这 种情况,可以考虑使用邮箱或消息队列。 第二章嵌入式uc o s i i 操作系统简介 消息邮箱也称为交换消息,即用一个指针型变量,一个任务或一个中断服务 子程序通过内核服务,可以把一则消息( 个指针) 放到邮箱里去。同样,一个 或多个任务通过内核服务,可以接受这则消息。发送消息的任务和接受消息的任 务约定,该指针指向的内容就是那则消息。每个邮箱有相应的正在等待消息的任 务列表。要得到消息的任务会因为邮箱是空的,而被挂起,且被记录到等待消息 的任务表中,直到接收到消息。等待消息的时间超过了,仍然没有接收到消息, 该任务进入就绪态,并返回出错信息,报告等待超时错误。消息放入邮箱后,把 消息传给等待消息的任务列表中优先级最高的任务。消息邮箱可以当作只取2 个值的信号量来用。邮箱里有消息,表示资源可以使用,用空邮箱表示资源已被 其他任务占用。 消患队列用于给任务发消息。消息队列实际上是邮箱队列。通过内核提供的 服务,任务或中断子程序可以将则消息放入消息队列。同样,一个或多个任务 可以通过内核服务从消息队列中得到消息。通常是按照先入先出的原则发送消息 的;而uc o s - i i 也允许使用后进后出的方式。 中断是一种硬件机制,用于通知c p u 有个异步事件发生了。中断一旦被识别, c p u 保存部分( 或全部) 现场( c o n t e x t ) 即部分或全部寄存器的值,跳转到专门的 子程序,称为中断服务子程序( i s r ) 。中断服务子程序做事件处理,处理完成后, 程序回到让进入就绪态的优先级最高的任务开始运行( 对可剥夺型内核而言) 。 中断使得c p u 可以在事件发生时才予以处理,而不必让微处理器连续不断地 查询( e o l l i n g ) 是否有事件发生。通过两条特殊指令:关中断( d i s a b l ei n t e r r u p t ) 和开中断( e n a b l ei n t e r r u p t ) 可以让微处理器不响应或响应中断。在实时环境 中,关中断的时间应尽量的短。关中断影响中断延迟时间。关中断时间太长可能 会引起中断丢失。微处理器一般允许中断嵌套,也就是说在中断服务期间,微处 理器可以识别另一个更重要的中断,并服务于那个更重要的中断。实时内核最重 要的指标就是中断关了多长时间。所有实时系统在进入临界区代码段之前都要关 中断,执行完临界代码之后再开中断。关中断的时间越长,中断延迟就越长。中 断响应定义为从中断发生到开始执行用户的中断服务子程序代码来处理这个中 断的时间。中断响应时间包括开始处理这个中断前的全部开销。典型地,执行用 户代码之前要保护现场,将c p u 的各寄存器推入堆栈。这段时间将被记作中断响 应时间。中断恢复时间定义为微处理器返回到被中断了的程序代码所需要的时 间。在前后台系统中,中断恢复时间很简单,只包括恢复c p u 内部寄存器值的时 间和执行中断返回指令的时间。 时钟节拍是特定的周期性中断。这个中断可以看作是系统心脏的脉动。中断 之间的时间间隔取决予不同的应用,一般在l o m s 到2 0 0 m s 之间。时钟的节拍式 6 第二章嵌入式uc o s - i i 操作系统简介 中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生 时,提供等待超时的依据。时钟节拍率越快,系统的额外开销就越大。各种实时 内核都有将任务延时若干个时钟节拍的功能。然而这并不意味着延时的精度是1 个时钟节拍,只是在每个时钟节拍中断到来时对任务延时做一次裁决而已。 实时内核也称为实时操作系统或r t o s 。它的使用使得实时应用程序的设计 和扩展变得容易,不需要大的改动就可以增加新的功能。通过将应用程序分割成 若干独立的任务,r t o s 使得应用程序的设计过程大为减化。使用可剥夺性内核 时,所有时间要求苛刻的事件都得到了尽可能快捷、有效的处理。通过有效的服 务,如信号量、邮箱、队列、延时、超时等,r t o s 使的资源得到更好的利用。 2 2 c i o s i i 操作系统 “c o s - i i ( 与处理器类型 无关的代码) 0 s _ c o r 啦c o s j 吧a g c o s _ 珊o x c o s _ 艇l c o s _ j a r r e x c o s c o ss e m c 0 st a s k c o st i 匣c “c o si i c p - c o si i h 画 j 第二章嵌入式uc o s i i 操作系统简介 如图2 1 示意“c o s i i 的文件结构以及与硬件的关系 2 2 1 临界段管理 代码的临界段指处理是不可分割的代码。一旦这部分代码开始执行,则不允 许任何中断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临 界段代码执行完以后要立即开中断。 微处理器一般都有关中断开中断指令,用户使用的c 语言编译器必须有某 种机制能够在c 中直接实现关中断开中断地操作。uc o s i i 定义两个宏 ( m a c r o s ) 来关中断和开中断,以便避开不同c 编译器厂商选择不同的方法来处理 关中断和开中断。uc o s i i 中的这两个宏调用分别是:o s _ e n t e r _ c r i t i c a l 0 和o s _ e x i t _ c r i t i c a l 0 。因为这两个宏的定义取决于所用的微处理器,故在文 件0 s p u h 中可以找到相应宏定义。每种微处理器都有自己的0 s p u h 文件。 2 2 2 任务管理 uc o s i i 可以管理多达6 4 个任务,但目前版本的uc o s i i 有两个任务已 经被系统占用了。保留了优先级为0 、l 、2 、3 、o sl o w e s tp 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 t _ p r i o 这8 个任务优先级 以被将来使用。0 sl o w e s t _ p r i o 是作为定义的常数在o s _ c f g h 文件中用定义常 数语句# d e f i n ec o n s t a n t 定义的。因此用户可以有多达5 6 个应用任务。必须给 每个任务赋以不同的优先级,优先级可以从0 到o s l o w e s t _ p r l 0 2 。优先级号 越低,任务的优先级越高。i ic o s i i 总是运行进入就绪态的优先级最高的任务。 任务状态如图2 2 睡眠态( d o r m a n t ) 指任务驻留在程序空间之中,还没有交给uc o s i i 管 理。把任务交给uc o s - i i 是通过调用下述两个函数之一: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 ( ) 。当任务一旦建立,这个任务就进入就绪态准备运行。如果 一个任务是被另一个任务建立的,而这个任务的优先级高于建立它的那个任务, 则这个刚刚建立的任务将立即得到c p u 的控制权。一个任务可以通过调用 o s t a s k d e l0 返回到睡眠态,或通过调用该函数让另一个任务进入睡眠态。 调用o s s t a r t 0 可以启动多任务。o s s t a r t 0 函数运行进入就绪态的优先级 最高的任务。就绪的任务只有当所有优先级高于这个任务的任务转为等待状态, 或者是被删除了,才能进入运行态。 正在运行的任务可以通过调用两个函数之一将自身延迟一段时间,这两个函数是 o s t i m e d l y ( ) 或o s t i m e d i y h m s m ( ) 。这个任务于是进入等待状态,等待这段时间 过去,下一个优先级最高的、并进入了就绪态的任务立刻被赋予了c p u 的控制权。 第二章嵌入式t lc o s i i 操作系统简介 图 2 2 正在运行的任务是可以被中断的,除非该任务将中断关了,或者uc o s - i i 将中断关了。被中断了的任务就进入了中断服务态( i s r ) 。响应中断时,正在执 行的任务被挂起,中断服务子程序控制了c p u 的使用权。中断服务子程序可能会 报告一个或多个事件的发生,而使一个或多个任务进入就绪态。在这种情况下, 从中断服务子程序返回之前,uc o s = i i 要判定,被中断的任务是否还是就绪态 任务中优先级最高的。如果中断服务子程序使一个优先级更高的任务进入了就绪 态,则新进入就绪态的这个优先级更高的任务将得以运行,否则原来被中断了的 任务才能继续运行。 任务控制块 一旦任务建立了,任务控制块0 s j c b s 将被赋值。任务控制块是一个数据结 构,当任务的c p u 使用权被剥夺时,uc o s - i i 用它来保存该任务的状态。当任 务重新得到c p u 使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不 差地继续执行。o st c b s 全部驻留在r a m 中。任务建立的时候,o st c b s 就被初 始化了。 建立任务 想让此o s i i 管理用户的任务,用户必须要先建立任务。用户可以通过传递 任务地址和其它参数到以下两个函数之一来建立任务: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 t0 。o s t a s k c r e a t e0 与屺o s 是向下兼容的,o s t a s k c r e a t e e x t ( ) 是o s t a s k c r e a t e0 的扩展版本,提供了一些附加的功能。用两个函数中的任何 一个都可以建立任务。任务可以在多任务调度开始前建立。也可以在其它任务的 执行过程中被建立。在开始多任务调度( 即调用o s s t a r t0 ) 前,用户必须建立至 少个任务。任务不能由中断服务程序( i s r ) 来建立。 第二章嵌入式1 1c o s - i i 操作系统简介 任务堆栈 每个任务都有自己的堆栈空间。堆栈必须声明为o s s t k 类型,并且由连续 的内存空间组成。用户可以静态分配堆栈空间( 在编译的时候分配) 也可以动态地 分配堆栈空间( 在运行的时候分配) 。用户可以用c 编译器提供的m a l l o c0 函数 来动态地分配堆栈空间。在动态分配中,用户要时刻注意内存碎片问题。特别是 当用户反复地建立和删除任务时,内存堆中可能会出现大量的内存碎片,导致没 有足够大的一块连续内存区域可用作任务堆栈,这时m a l l o c 0 便无法成功地为 任务分配堆栈空闻。 p c o s 1 1 支持的处理器的堆栈既可以从上( 高地址) 往下( 低地址) 长也可以 从下往上长。用户在调用o s t a s k c r e a t e0 或o s t a s k c r e a t e e x t0 的时候必须知道 堆栈是怎样长的,因为用户必须得把堆栈的栈顶传递给以上两个函数,当 0 s p u h 文件中的o s s t k _ g r o w t h 置为0 时,用户需要将堆栈的最低内存地址 传递给任务创建函数;当o s - c p u h 文件中的o s 岫s t k _ g r o w t h 置为1 时,用户需 要将堆栈的墩高内存地址传递给任务创建函数。 堆栈检验 有时候狭定任务实际所需的堆栈空间大小是很有必要的。因为这样用户就可 以避免为任务分配过多的堆栈空间,从而减少自己的应用程序代码所需的 r a m ( 内存) 数置。k o s - 1 i 提供的o s t a s k s t k c h k ( ) 函数可以为用户提供这种有价 值的信息。 假定堆栈是从上往下递减的( 即0 s _ s t k g r o w r h 被置为1 ) 。k o s i i 是通过 查看堆栈本身的内容来决定堆栈的方向的。只有内核或是任务发出堆栈检验的命 令时,堆栈检验才会被执行,它不会自动地去不断检验任务的堆栈使用情况。在 堆栈检验时,p c o s i i 要求在任务建立的时候堆栈中存储的必须是0 值( 即堆找 被清零) 。另外,此o s i i 还需要知道堆栈栈底( b o s ) 的位置和分配给任务盼堆栈 的大小。在任务建立的时候,b o s 的位置及堆栈的这两个值储存在任务的o s j c b 中。 删除任务 有时候删除任务是很有必要的。删除任务,是说任务将返回并处于休眠状态, 并不是说任务的代码被删除了,只是任务的代码不再被此0 s i i 调用。通过调用 o s t a s k d e l0 就可以完成删除任务的功能。o s t a s k d e l0 一开始应确保用户所要删 除的任务并非是空闲任务,因为删除空闲任务是不允许的。接着,o s t a s k d e l ( ) 还应确保用户不是在i s r 例程中去试图删除一个任务,因为这也是不被允许的。 调用此函数的任务可以通过指定0 s r i o _ s e l f 参数来删除自己。 挂起任务 l o 第二章嵌入式uc o s i i 操作系统简介 有时候将任务挂起是很有用的。挂起任务可通过调用o s t a s k s u s p e n d0 函数 来完成。被挂起的任务只能通过调用o s t a s k r e s u m e 0 函数来恢复。任务挂起是 一个附加功能。也就是说,如果任务在被挂起的同时也在等待延时的期满,那么, 挂起操作需要被取消,而任务继续等待延时期满,并转入就绪状态。任务可以挂 起自己或者其它任务。 恢复任务 被挂起的任务只有通过调用o s t a s k r e s u m e ( ) 才能恢复。因为 o s t a s k s u s p e n d ( ) 不能挂起空闲任务,所以必须得确认用户的应用程序不是在恢 复空闲任务。 要恢复的任务必须是存在的,因为用户需要操作它的任务控制块 o s _ t c be l 4 1 7 ( 2 ) ,并且该任务必须是被挂起的。o s t a s k r e s u m e 0 是通过清除 o s t c b s t a t 域中的o s - s t a t s u s p e n d 位来取消挂起的。最后,任务调度程序会检 查被恢复的任务拥有的优先级是否比调用本函数的任务的优先级高。 2 2 3 时间管理 此o s - i i ( 其它内核也一样) 要求用户提供定时中断来实现延时与超时控制 等功能。这个定时中断叫做时钟节拍,它应该每秒发生l o 至1 0 0 次。时钟节拍 的实际频率是由用户的应用程序决定的。时钟节拍的频率越高,系统的负荷就越 重。 任务延时 o s i i 提供了这样一个系统服务:申请该服务的任务可以延时一段时间, 这段时间的长短是用时钟节拍的数目来确定的。实现这个系统服务的函数叫做 o s t i m e d l y 0 。调用该函数会使u c o s - i i 进行一次任务调度,并且执行下一个优 先级最高的就绪态任务。任务调用o s t i m e d l y 0 后,一旦规定的时间期满或者有 其它的任务通过调用o s t i m e d l y r e s u m e 0 取消了延时,它就会马上进入就绪状 态。只有当该任务在所有就绪任务中具有最高的优先级时,它才会立即运行。 o s t i m e d l y 0 虽然是一个非常有用的函数,但用户的应用程序需要知道延时 时间对应的时钟节拍的数目。o s t i m e d i y h m s m ( ) 是使用户可以按小时( h ) 、分( m ) 、 秒( s ) 和毫秒( m ) 来定义时间了,这样会显得更自然些。与o s t i m e d l y 0 一样,调 用o s t i m e d i y h m s m ( ) 函数也会使埘c o s i i 进行一次任务调度,并且执行下一个优 先级最高的就绪态任务。任务调用o s t i m e d i y p m s m 0 后,一旦规定的时间期满或 者有其它的任务通过调用o s t i m e d l y r e s u m e0 取消了延时,它就会马上处于就绪 态。同样,只有当该任务在所有就绪态任务中具有最高的优先级时,它才会立即 运行处在延时期的任务结束延时。 第二章嵌入式uc o s 一】i 操作系统简介 坤c o s i i 允许用户结束正处于延时期的任务。延时的任务可以不等待延时期 满,而是通过其它任务取消延时来使自己处于就绪态。这可以通过调用 o s t i 1 e d l y r e s u f f i e 0 和指定要恢复的任务的优先级来完成。0 s t i m e d l y r e s u m e ( ) 也可以唤醒正在等待事件的任务。在这种情况下,等待事件发生的任务会考虑是 否终止等待事件。 系统时间 无论时钟节拍何时发生,c o s i i 都会将一个3 2 位的计数器加l 。这个计数 器在用户调用o g s t a r t ( ) 初始化多任务和4 ,2 9 4 ,9 6 7 ,2 9 5 个节拍执行完一遍的时 候从o 开始计数。在时钟节拍的频率等于l o o h z 的时候,这个3 2 位的计数器每 隔4 9 7 天就重新开始计数。用户可以通过调用o s t i m e g e t0 来获得该计数器的当 前值。也可以通过调用o s t i m e s e t0 来改变该计数器的值。 2 2 4任务之间的通信与同步 在虻o s i i 中,有多种方法可以保护任务之间的菇享数据和提供任务之间的 通讯。除了共享数据以外还可以有信号量、邮箱和消息队列。 一个任务或者中断服务子程序可以通过事件控制块e c b ( e v e n tc o n t r o l b l o c k s ) 来向另外的任务发信号。这里,所有的信号都被看成是事件( e v e n t ) 。 一个任务还可以等待另一个任务或中断服务子程序给它发送信号。只有任务可以 等待事件发生,中断服务子程序是不能这样做的。对于处于等待状态的任务,还 可以给它指定个最长等待时间,以此米防止因为等待的事件没有发生而无限期 地等下去。 多个任务可以同时等待同一个事件的发生。在这神情况下,当该事件发生后, 所有等待该事件的任务中,优先级最高的任务得到了该事件并进入就绪状态,准 备执行。上面讲到的事件,可班是信号量、邮箱或者消息队列等。当事件控制块 是一个信号量时,任务可以等待它,也可以给它发送消息。 事件控制块 屺o s i i 通过u c o s i i h 中定义的o s e v e n t 数据结构来维护一个事件控制 块的所有信息,也就是事件控制块e c b 。该结构中除了包含了事件本身的定义, 如用于信号量的计数器,用于指向邮箱的指针,以及指向消息队列的指针数组等, 还定义了等待该事件的所有任务的列表。每个信号量、消息邮箱及消息队列都应 分配一个事件控制块e c b 。 信号量管理 此o s i i 中的信号量由两部分组成:一个是信号量的计数值,它是一个1 6 位的无符号整数( 0 到6 5 ,5 3 5 之间) ;另一个是由等待该信号量的任务组成的等 第二章嵌入式uc 0 s i i 操作系统简介 待任务表。用户要在o s c f g h 中将o s j e m - e n 开关量常数置成1 ,这样p c o s i i 才能支持信号量。 在使用一个信号量之前,首先要建立该信号量,也即调用o s s e m c r e a t e0 函 数,对信号量的初始计数值赋值。该初始值为o 到6 5 ,5 3 5 之间的一个数。如果 信号量是用来表示一个或者多个事件的发生,那么该信号量的初始值应设为0 。 如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为1 ( 例如, 把它当作二值信号量使用) 。最后,如果该信号量是用来表示允许任务访问n 个 相同的资源,那么该初始值显然应该是n ,并把该信号量作为一个可计数的信号 量使用。 弋之 旧一 l 叫藏渊s t o r t e f , 图 2 3 心o s i i 提供了5 个对信号量进行操作的函数。它们是: 建立一个信号量o s s e m c r e a t e0 ,等待一个信号量o s s e m p e n d0 ,发送一个 信号量o s s e m p o s t0 ,无等待的请求一个信号量o s s e m a c c e p t0 和查询一个信号 量o s s e m o u e r y 0 函数。图2 3 说明了任务、中断服务子程序和信号量之间的关 系。图中用钥匙或者旗帜的符号来表示信号量:如果信号量用于对共享资源的访 问,那么信号量就用钥匙符号。符号旁边的数字n 代表可用资源数。对于二值信 号量,该值就是1 ;如果信号量用于表示某事件的发生,那么就用旗帜符号。这 时的数字n 代表事件已经发生的次数。从图中可以看出o s s e m p o s t 0 函数可以由 任务或者中断服务子程序调用,而o s s e m p e n d 0 和o s s e m q u e r y 0 函数只能有任务 程序调用。 邮箱 邮箱是犯o s - i i 中另一种通讯机制,它可以使一个任务或者中断服务子程序 向另一个任务发送一个指针型的变量。该指针指向一个包含了特定“消息”的数 据结构。为了在虬o s i i 中使用邮箱,必须将o s - c f g h 中的o sm b o x e n 常数 置为1 。 使用邮箱之前,必须先建立该邮箱。该操作可以通过调用o s m b o x c r e a t e0 第二章嵌入式uc o s i i 操作系统简介 函数来完成,并且要指定指针的初始值。般情况下,这个初始值是n u l l ,但 也可以初始化一个邮箱,使其在最开始就包含一条消息。如果使用邮箱的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025企业长期合作协议书
- 2025简化版供货合同协议范本
- 气象观测员考试题
- 咖啡文化知识竞赛试题(意式咖啡)
- 2025婴幼儿用品特许加盟合同(合同范本)
- 收益权转让及回购合同(标准版)
- 合同中保险合同(标准版)
- 本科伤寒考试题
- 无人机配送创新创业项目商业计划书
- 家居软装租赁搭配创新创业项目商业计划书
- 沈阳停车收费管理办法
- 2025版小学语文新课程标准
- 2025年 无锡市工会社会工作者招聘考试笔试试题附答案
- 小学保护洱海教学课件
- 地铁车站装修安全文明施工专项方案及措施
- 金属冶炼安全培训课件
- 3D打印车间粉尘防爆管理体系
- 剪映入门培训课件
- 新能源汽车充电桩工程物资供应措施
- 基于大数据的国际广播媒体发展模式比较分析-洞察阐释
- DB32-T 5108-2025 科技服务机构星级评定规范
评论
0/150
提交评论