版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录摘要 11.1选题的目的和意义 31.2国内外的研究现状和趋势 31.2.1ARM处理器 31.2.2操作系统 52系统设计 72.1可行性分析 72.2需求分析 72.3系统功能设计 82.3.1总体结构 82.3.2RTOS内核处理流程 83系统开发环境和工具 103.1开发环境 103.2开发工具 104系统详细设计 104.1任务创建模块 114.2任务调度模块 124.3任务通信模块 125系统具体实现 135.1任务创建模块 135.1.1任务 135.1.2任务状态 135.1.3任务控制块 145.1.4任务就绪表 155.2任务调度模块 175.2.1基于优先级抢占调度 175.2.2时钟节拍函数 185.3任务间的通信 196系统测试 216.1项目一:内核移植到周立功LPC2138测试及RS232串口的实现 216.2项目二:内核多任务的抢占调度及任务的睡眠机制 226.3项目三:任务管理测试 226.4项目四:任务间通信测试-互斥信号量 227总结和展望 22Abstract 24参考文献 25摘要微实时操作系统设计与实现田德伟(德州学院计算机系,山东德州253023)摘要:随着物联网的发展,嵌入式系统在人们的生活中的作用日益凸显。嵌入式操作系统在嵌入式开发中也逐步得到了开发人员的关注,如何在保证嵌入式系统的效率的前提下,降低开发成本,成为诸多厂商关注的焦点。该微实时操作系统与现行linux系统具有相比,具有更高实时性;与µ/COS-ii相比内核更精简、在控制产品成本中有巨大优势。该系统主要针对低端微处理器平台,旨在降低开发成本同时提高嵌入式系统对外围设备管理效率。该系统支持八个优先级,每个优先级可以创建一个任务,任务间同步采用信号量机制。关键字:嵌入式实时操作系统,µ/COS-ii,嵌入式系统
1引言1.1选题的目的和意义随着微电子技术的快速发展,芯片功能更加强大,微嵌入式实时操作系统必将成为嵌入式操作系统发展的趋势,这不仅能降低成本,缩小产品体积,还能增强产品的可靠性。同时,软件硬件的紧密结合,嵌入式软件与硬件界线更加模糊,嵌入式软件时常以硬件形态存在,这种方式可提高实时性,增强可维护性。1.2国内外的研究现状和趋势嵌入式操作系统种类繁多,有资源开销很少的IC卡操作系统,也有功能较强的网络计算机操作系统。这些嵌入式操作系统从功能到性能各具特色,为各种硬件环境及应用提供了相应的支持和服务。目前市场上共有几十种操作系统,有多任务系统,也有单任务系统;有实时系统系统,也有分时系统。总之,不同厂商推出的操作系统或多或少都有差异,但许多嵌入式操作系统一般具有如下一些内容和功能:系统核心、窗口图形系统、文件系统、设备驱动程序和网络协议等。嵌入式操作系统系统将有以下方向趋势:1.随着微电子技术的快速发展,芯片功能更加强大,嵌入式实时操作系统必将成为嵌入式操作系统的发展趋势,这不仅能降低成本,缩小产品体积,还能增强产品的可靠性。同时,软件硬件的紧密结合,嵌入式软件与硬件界线更加模糊,嵌入式软件时常以硬件形态存在,这种方式可提高实时性,增强可维护性。2.嵌入式操作系统会与嵌入应用软件协同发展。嵌入式系统中的重要角色包括嵌入式应用软件,嵌入式系统应用领域千差万别,只有充分重视应用软件的发展,才能满足丰富多彩的应用要求。1.2.1ARM处理器ARM(AdvancedRISCMachines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。技术具有性能高、成本低和能耗小的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。ARM处理器共有7种运行模式:用户模式(user,use)正常程序执行模式快速中断模式(fiq)用于高速数据传输和通道处理外部中断模式(irq)用于通常的中断处理管理模式(sve)操作系统使用的一种保护模式数据访问终止模式(abt)用于虚拟存储及存储保护未定义指令终止模式(und)用于支持通过软件方针硬件的协处理器系统模式(sys)用于运行特权级的操作系统任务除了用户模式之外的6种处理器模式称为特权模式(privilegedmodes)。在这些模式下,程序可以访问所有的系统资源,也可以任意的进行处理器模式切换。除系统模式外,其他5种特权模式又称为异常模式。处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下。这时,应用程序不能够访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器处理器模式的切换。这种体系结构可以使系统控制整个系统的资源。当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式中都有一组寄存器,供相应的异常处理程序使用,这样就可以保证在进入异常模式时,拥护模式下的寄存器(保存了程序运行状态)不被破坏。系统模式并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器。但是系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行处理器模式切换。它主要供操作系统任务使用。通常操作系统的任务需要访问所有的系统资源,同时该任务仍然使用拥护模式的寄存组,而不是使用异常模式下相应的寄存器组,这样可以保证当异常中断发生时任务状态不被破坏。ARM处理器含有37个寄存器,这些寄存器包括以下两类寄存器。(1)31个通用寄存器:包括程序计数器PC等,这些寄存器都是32位寄存器。(2)6个状态寄存器:状态寄存器也是32位的寄存器,但是只使用了其中的12位。在ARM处理器的7种模式下都有一组对应的寄存器组。在任意时刻,可见的寄存器组包括15个通用寄存器R0~R14、一个或两个状态寄存器和PC。在所有的寄存器中,有些是各种模式下共用的同一个物理寄存器,有些是各种模式自己独立拥有的物理寄存器。七种运行模式下寄存器分配如下图1.1所示:图1-11.2.2操作系统目前的操作系统种类繁多,很难用单一标准统一分类。根据操作系统的使用环境和对作业处理方式来考虑,可分为批处理系统、分时系统、实时系统。下面介绍一操作系统的五大类型:批处理操作系统、分时操作系统、实时操作系统、网络操作系统、分布式操作系统。1.批处理操作系统批处理(BatchProcessing)操作系统的工作方式是:用户将作业交给系统操作员,系统操作员将许多用户的作业组成一批作业,之后输入到计算机中,在系统中形成一个自动转接的连续的作业流,然后启动操作系统,系统自动、依次执行每个作业,最后由操作员将作业结果交给用户。批处理操作系统的特点是:多道和成批处理。2.分时操作系统分时(TimeSharing)操作系统的工作方式是:一台主机连接了若干个终端,每个终端有一个用户在使用。用户交互式地向系统提出命令请求,系统接受每个用户的命令,采用时间片轮转方式处理服务请求,并通过交互方式在终端上向用户显示结果。用户根据上步结果发出下道命。分时操作系统将CPU的时间划分成若干个片段,称为时间片。操作系统以时间片为单位,轮流为每个终端用户服务。每个用户轮流使用一个时间片而使每个用户并不感到有别的用户存在。分时系统具有多路性、交互性、“独占”性和及时性的特征。多路性指,伺时有多个用户使用一台计算机,宏观上看是多个人同时使用一个CPU,微观上是多个人在不同时刻轮流使用CPU。交互性是指,用户根据系统响应结果进一步提出新请求(用户直接干预每一步)。“独占”性是指,用户感觉不到计算机为其他人服务,就像整个系统为他所独占。及时性指,系统对用户提出的请求及时响应。它支持位于不同终端的多个用户同时使用一台计算机,彼此独立互不干扰,用户感到好像一台计算机全为他所用。常见的通用操作系统是分时系统与批处理系统的结合。其原则是:分时优先,批处理在后。“前台”响应需频繁交互的作业,如终端的要求;“后台”处理时间性要求不强的作业。3.实时操作系统实时操作系统(RealTimeOperatingSystem,RTOS)是指使计算机能及时响应外部事件的请求在规定的严格时间内完成对该事件的处理,并控制所有实时设备和实时任务协调一致地工作的操作系统。实时操作系统要追求的目标是:对外部请求在严格时间范围内做出反应,有高可靠性和完整性。其主要特点是资源的分配和调度首先要考虑实时性然后才是效率。此外,实时操作系统应有较强的容错能力。4.网络操作系统网络操作系统是基于计算机网络的,是在各种计算机操作系统上按网络体系结构协议标准开发的软件,包括网络管理、通信、安全、资源共享和各种网络应用。其目标是相互通信及资源共享。在其支持下,网络中的各台计算机能互相通信和共享资源。其主要特点是与网络的硬件相结合来完成网络的通信任务。5.分布式操作系统它是为分布计算系统配置的操作系统。大量的计算机通过网络被连结在一起,可以获得极高的运算能力及广泛的数据共享。这种系统被称作分布式系统(DistributedSystem)。它在资源管理,通信控制和操作系统的结构等方面都与其他操作系统有较大的区别。由于分布计算机系统的资源分布于系统的不同计算机上,操作系统对用户的资源需求不能像一般的操作系统那样等待有资源时直接分配的简单做法而是要在系统的各台计算机上搜索,找到所需资源后才可进行分配。对于有些资源,如具有多个副本的文件,还必须考虑一致性。所谓一致性是指若干个用户对同一个文件所同时读出的数据是一致的。为了保证一致性,操作系统须控制文件的读、写、操作,使得多个用户可同时读一个文件,而任一时刻最多只能有一个用户在修改文件。分布操作系统的通信功能类似于网络操作系统。由于分布计算机系统不像网络分布得很广,同时分布操作系统还要支持并行处理,因此它提供的通信机制和网络操作系统提供的有所不同,它要求通信速度高。分布操作系统的结构也不同于其他操作系统,它分布于系统的各台计算机上,能并行地处理用户的各种需求,有较强的容错能力。2系统设计2.1可行性分析(1)技术可行性:根据开发人员提供的系统函数接口、实时性及实现系统的各项条件,从技术的角度研究实现系统的可行性。(2)经济可行性:经济可行性是可行性研究的重要组成部分,它用于评估基于计算机系统的经济合理性,给出系统开发的成本论证。本系统是为保险公司信息管理而做的系统,装上该应用系统后即可使用,在系统移植方面简单,对硬件设备的要求进一步降低,节约了不必要的支出,所带来的效益大于系统的开发成本,在经济上完全可行。(3)法律可行性:研究在系统开发过程中可能涉及的各种合同、侵权、责任以及各种与法律相关的抵触问题。本系统的开发不触犯国家的任何法律规章,不涉及侵权等内容,法律上完全可行。综上所述,该系统符合所有的开发目标,能够保证系统开发有一定的实时性和稳定性。因此,该微实时操作系统的开发是可行的。2.2需求分析1.参考硬件平台为:ARM92410。实际上,也可用其他博创科技系列CPU和实验班,只要CPU有足够的RAM、Flash存储器和一个串口扩展就可以了。但与ARM92410区别越小越好,最终验证功能在都统一在ARM92410上进行测试;2.硬件抽象层的接口遵循μC/OS-II的借口规范;3.操作系统的调用采用函数调用方式,不用中断陷入方式;4.每个任务拥有自己独立的任务堆栈,作为任务的私有存储区;5.同时支持任务数不多于8个,空闲任务编号为0;7.串口接口参数:波特率115200,8位数据,1为停止位,无硬件流控制;8.任务优先级级数多于8级,最高优先级为0,最低优先级为7,空闲任务优先级为7。2.3系统功能设计2.3.1总体结构图2-11.硬件层硬件层主要包括:含量Flash存储器、串口RS232等,它是保证系统实现指定任务的最底层的部件。2.驱动层驱动层的作用是给操作系统提供接口,使其能管理相应的硬件。3.RTOS内核RTOS内核主要任务是完成多任务之间的调度和同步。4.应用层在用户的应用程序中可以创建用户自己的任务。任务之间的通信主要依赖信号量。2.3.2RTOS内核处理流程1.RTOS内核结构框架图2-22.查找最高优先级任务流程图2-33.任务通信中使等待状态优先级最高的任务从等待列表中删除,并把其放入就绪列表中流程如下:图2-43系统开发环境和工具3.1开发环境硬件平台:博创科技ARM92410,也可用其他博创科技系列CPU和实验板,只要CPU有足够的RAM、Flash存储器和一个串口扩展就可以了。但与ARM92410区别越小越好,最终的验证都统一在ARM92410上进行。内存:4MBROM:64MB开发工具:ADS1.23.2开发工具ADS1.2ADS是ARM公司的集成开发环境软件,他的功能非常强大。他的前身是SDT,SDT是ARM公司几年前的开发环境软件,目前SDT早已经不再升级。ADS包括了四个模块分别是:SIMULATOR;c编译器;实时调试器;应用函数库。ADS的编译器调试器较SDT都有了非常大的改观,ADS1.2提供完整的WINDOWS界面开发环境。c编译器效率极高,支持c以及c++,使工程师可以很方便的使用C语言进行开发。提供软件模拟仿真功能,使没有Emulators的学习者也能够熟悉ARM的指令系统。配合FFT-ICE使用,ADS1.2提供强大的实时调试跟踪功能,片内运行情况尽在掌握。ADS1.2需要硬件支持才能发挥强大功能。目前支持的硬件调试器有Multi-ICE以及兼容Multi-ICE的调试工具如FFT-ICE。4系统详细设计该内核设计采用结构化设计方法,以算法为中心,从处理到处理的数据流。内核一级数据流图如图4-1所示:图4-14.1任务创建模块首先,创建任务taskCreate()函数从空闲TCB池取得空闲的TCB,并根据用户分配堆栈的大小确定任务堆栈的栈顶指针,调用任务堆栈初始化函数OSTaskStkInit()对任务堆栈进行初始化,返回任务堆栈的栈顶指针;然后调用函数OSTCBInit()完成对任务控制块的初始化工作;最后把任务控制块存放任务就绪列表中,具体流程如图4-2所示:图4-24.2任务调度模块首先taskStart()函数根据任务编号和任务列表得到任务控制块,把任务的编号和优先级放存放到OSIDPrioTbl[]和就绪列表中,然后启动任务调度器,根据OSIDPrioTbl[]和就绪列表查找进入就绪态优先级最高的任务,最后调用函数OS_TASK_SW()完成任务切换。任务调度具体流程如图4-3所示:图4-34.3任务通信模块首先,semCreate()函数从空闲的OS_EVENT池中取得一个空闲事件控制块,并完成对其的初步初始化,将其放到事件列表中;然后,当前任务调用函数semTake()时,检查互斥信号量是否可用,如果可用当前任务占用该信号量,否则调用OSEventTaskWait()函数将当前任务从就绪列表移除存放到事件等待列表中;最后,如果占用该互斥信号量任务的任务调用semGive()释放信号量,调用函数OSEventTaskRdy(),查找等待该互斥信号量优先级最高的任务,将其从等待列表移除存放到就绪列表中,等待任务调度。具体数据流程如图4-4所示:图4-45系统具体实现5.1任务创建模块5.1.1任务一个任务通常是一个无限的循环。一个任务看起来像其它C的函数一样,有函数返回类型,有形式参数变量,任务返回类型必须定义为void型,但是任务是绝不会返回的。任务可以在一次执行完毕之后被删除,并不是任务代码被删除,只是内核不会再理会该任务的代码,该任务再也不能运行了。5.1.2任务状态图5-1是RTOS内核控制下的任务状态转换土,在任一给定时刻,任务的状态一定是在这六种状态之一。图5-1僵死状态(OS_STAT_DORMANT)指任务驻留在程序空间中,还没有交给RTOS管理,把任务交给RTOS管理通过函数taskStart()来实现。任务一旦被创建就处于僵死状态,通过taskStart()使任务进入就绪态。任何任务的创建可以是在多任务运行之前,也可以是动态地被一个运行着的任务建立。如果一个任务是被另一个任务建立的,而这个任务的优先级高于建立它的那个任务,则这个刚刚建立的任务将立即得到CPU的控制权。一个任务可以通过taskDelete()返回到僵死状态,也可以通过调用该函数使另一个任务进入僵死状态。正在运行的任务可以通过调用函数taskSleep()使自身主动放弃CPU控制权,休眠一段时间,这个任务进入睡眠态,等待这段时间过去,下一个最高优先级的就绪态任务立即获得CPU的控制权。等待的时间过去以后,由系统服务函数OSTimeTick()使处于睡眠状态的任务进入就绪态。正在运行的任务等待某一事件时要等待,当任务因等待事件被阻塞,下一个优先级最高的任务立即得到CPU的控制权。当等待的事件放生了,阻塞状态最高优先级的任务进入就绪态。事件发生的报告可能来自另一个任务,也可能来自中断服务子程序。正在运行的任务是可以被中断的,除非该任务将中断关了或者RTOS将中断关了。被中断了的任务就进入了中断服务态(ISR)。响应中断时,正在执行的任务被挂起,中断服务子程序控制了CPU的使用权。中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态。在这种情况下,从中断服务子程序返回之前,RTOS要判定被中断的任务是否还是就绪态任务中优先级最高的。如果中断服务子程序使一个优先级更高的任务进入了就绪态,则新进入就绪态的这个优先级更高的任务将得以运行;否则原来被中断了的任务才能继续运行。5.1.3任务控制块为了避免动态内存分配引起的问题,该RTOS内核采用内存静态分配的方式,同时为了减少对内存的需求量引入了回收和复用的机制。任务控制块(OS_TCB)回收使用和任务编号(tid)复用的分配机制。在任务控制块初始化时获得一个空闲的TCB方式如图5-2下:图5-2ptcb=OSTCBFreeList;/*获得空闲的TCB*/OSTCBFreeList=ptcb->OSTCBNext;/*修改空闲TCB链表的指针*/在任务被删除时回收TCB,如图5-3所示:图5-3ptcb->OSTCBNext=OSTCBFreeList;/*回收TCB所占用的资源*/OSTCBFreeList=ptcb; /*修改空闲TCB链表的指针*/为了降低任务列表对内存的需求量,引入了任务编号的复用机制,任务的编号与系统最多运行的任务有关,而与其他的优先级无关,从而减少了RTOS对RAM的需求量。任务编号的复用机制如下所示:ptcb表示任务控制块ptcb=OSTCBFreeList;/*从TCB表中获得空闲的TCB*/任务控制块OS_TCB中的几个成员的算法:OSTCBX =priority&0x07;OSTCBBitX=OSMapTbl[priority&0x07];上述变量主要用于加速任务就绪态的过程或进入等待事件发生状态的过程(避免在运行中去计算这些值)。这些值是在任务创建时算好的,或者是在改变任务优先级时算出的。5.1.4任务就绪表每个任务被赋予不同的优先级,从0级到最低优先级OS_LOWEST_PRIO,包括0和OS_LOWEST_PRIO在内。当系统初始化的时候,最低优先级OS_LOWEST_PRIO总是被赋给空闲任务idletask。注意,最多任务数目OS_MAX_TASK和最低优先级时没有关系的。每个任务的就绪态都放入就绪表中,OSRdyTbl中的相应元素的相应位也置位。就绪表OSRdyTbl[]数组的大小取决于OS_LOWEST_PRIO。当用户的应用程序中的任务数目比较少时,减少OS_LOWEST_PRIO的值可以降低RTOS对RAM的需求量。为了确定下次改哪个优先级的任务运行了,内核调度器总是将OS_LOWEST_PRIO在就绪表中相应就绪表中的相应字节的相应位置置1。如图5-4当优先级0时,OSRdyTbl的第0位置1,当优先级1时,OSRdyTbl的第1位置1,当优先级2时,OSRdyTbl的第2位置1,当优先级3时,OSRdyTbl的第3位置1,当优先级4时,OSRdyTbl的第4位置1,当优先级5时,OSRdyTbl的第5位置1,当优先级6时,OSRdyTbl的第6位置1,当优先级7时,OSRdyTbl的第7位置1,图5-4把任务放入等待列表中,采用位图的方式,将任务放入等待列表。priority表示任务的优先级:OSMapTbl[]的值下标二进制掩码000000001100000010200000100300001000400010000500100000601000000710000000OSRdyTbl [priority>>3] |=OSMapTbl[priority&0x07];5.2任务调度模块5.2.1基于优先级抢占调度当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了或者说是挂起了,那个高优先级的任务立即得到CPU的控制权。如果中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务得到运行。调度流程如图5-5所示:图5-5基于优先级抢占的内核,最高优先级的任务什么时候可以执行,可以得到CPU的控制权是可知的。使用基于优先级的抢占式内核使得任务响应时间得以最优化。基于优先级调度的内核总是让就绪态的高优先级的任务先运行,中断服务程序可以抢占CPU,到中断服务完成时,内核使优先级最高的任务运行,任务响应时间得到了最优化,且是可知的。查找进入就绪态优先级最高的任务的TCB并完成任务前换的步骤如图5-6所示:图5-6第一步:利用就绪表查找处于就绪态的最高优先级;利用任务就绪表和OSUnMapTbl[]查询处于就绪态优先级最高的任务的方法如下:priority表示任务的优先级X=OSUnMapTbl[OSRdyTbl];priority=(INT16U)X;OSUnMapTab[]数组结构如下所示:INT8UconstOSUnMapTbl[256]={0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x00to0x0F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x10to0x1F*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x20to0x2F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x30to0x3F*/6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x40to0x4F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x50to0x5F*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x60to0x6F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x70to0x7F*/7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x80to0x8F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x90to0x9F*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xA0to0xAF*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xB0to0xBF*/6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xC0to0xCF*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xD0to0xDF*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xE0to0xEF*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0/*0xF0to0xFF*/};第二步:查找最高优先级对应的任务的任务控制块,如图5-7所示;图5-7第三步:任务切换保存当前任务的寄存器,把求得的最高优先级的任务切换为运行态,最高优先级得到执行。5.2.2时钟节拍函数时钟节拍是特定的周期性中断,这个中断可以看作是系统心脏的脉动。中断之间的时间间隔取决于不同的应用,一般在10ms到200ms之间,该实时内核的时钟节拍间隔定义为10ms。时钟节拍率越高,系统的额外负担就越大。OSTimeTick()函数的处理流程如图5-8所示:图5-85.3任务间的通信RTOS中定义了OS_EVENT数据结构来维护一个时间控制块的所有信息,也成为事件控制块。除了包括事件的本身的定义,还包括等待该事件任务的列表。代码清单如下所示:typedefstruct{ void*OSEventPtr; /*指向消息队列的指针*/ INT8U OSEventTbl[OS_EVENT_TBL_SIZE];/*等待任务列表*/ INT32UOSEventCnt;/*事件计数器*/ structtask_id*OSTaskIdTbl[OS_LOWEST_PRIO+1];/*等待状态ID块*/}当优先级0时,OSRdyTbl的第0位置1,当优先级1时,OSRdyTbl的第1位置1,当优先级2时,OSEventTbl的第2位置1,当优先级3时,OSEventTbl的第3位置1,当优先级4时,OSEventTbl的第4位置1,当优先级5时,OSEventTbl的第5位置1,当优先级6时,OSEventTbl的第6位置1,当优先级7时,OSEventTbl的第7位置1,图5-9把任务放入等待列表中,采用位图存储的方式,优先级位图存储方式中使任务进入阻塞状态,将任务放入等待列表。利用.OSEventTbl确定优先级在中的位置。priority是任务的优先级,pevent是等待的事件:pevent.OSEventTbl[priority>>3] |=OSMapTbl[priority&0x07];OSMapTbl[]的值下标二进制掩码000000001100000010200000100300001000400010000500100000601000000710000000查找处于等待状态优先级最高的任务并把任务并将其放入就绪表中步骤如图5-10所示:图5-10第一步:查找等待列表中最高优先级;利用OSUnMapTbl[]查找最高优先级的方法如下所示:X=OSUnMapTbl[OSEventTbl];priority=(INT16U)X;第二步:查找最高优先级任务的ID:.OSTaskIdTbl[]数组是以任务的优先级为索引,利用最高优先级可以直接找到最高优先级任务的ID;图5-11第三步:将最高优先级的任务编号从等待列表中删除,并将其放入就绪列表。6系统测试6.1项目一:内核移植到周立功LPC2138测试及RS232串口的实现内容:完成对硬件层的抽象,内核可否正常运行。输入:在主函数中创建任务。输出:通过串口在超级终端显示相关信息。测试方法:在主函数中输出部分信息如printf(“runtask\n”),检查RS232串口驱动是否已经实现。6.2项目二:内核多任务的抢占调度及任务的睡眠机制内容:在主函数中创建两个以上的任务,每个任务赋予不同的优先级,在任务中调用taskSleep使任务主动的睡眠一段时间,观察在超级终端中输出信息。输入:主函数中创建的多任务。输出:超级终端输出的任务信息。测试方法:在主函数中创建两个以上的任务,并在函数中调用taskSleep使任务主动的睡眠一段时间,在创建的任务中输出相应的任务信息。6.3项目三:任务管理测试内容:测试任务管理的实现情况,包括=1\*GB3①在任务中创建任务和启动任务;=2\*GB3②在任务中删除其他任务以及删除自身;=3\*GB3③修改任务的优先级:修改自身的优先级和修改其他任务的优先级;=4\*GB3④任务挂起与恢复:挂起其他任务和挂起自身,恢复挂起的任务;=5\*GB3⑤获得任务的优先级;输入:在任务中创建多任务。输出:超级终端输出的任务信息。测试方法:=1\*GB3①在任务中创建任务(taskCreate)和启动任务(taskStart);=2\*GB3②在任务中删除其他任务以及删除自身(taskDelete());=3\*GB3③修改任务的优先级(taskPrioritySet):修改自身的优先级和修改其他任务的优先级;=4\*GB3④任务挂起与恢复(taskSuspendtaskResume):挂起其他任务和挂起自身,恢复挂起的任务;=5\*GB3⑤获得任务的优先级(taskPriorityGet);6.4项目四:任务间通信测试-互斥信号量内容:互斥信号量实现对资源的互斥访问,并测试优先级反转问题是否解决;输入:主函数中创建多个任务和互斥信号量;输出:超级终端显示的任务信息测试方法:在主函数中创建信号量(semCreate),任务申请得到该互斥型信号量(semTake),同时测试拥有互斥信号量的任务是否可以释放信号量(semGive);7总结和展望经过了两个多月的学习和努力,我终于完成了微实时操作系统设计与实现的毕业设计和毕业论文。从开始选择设计题目到查找相关资料,从设计的逐步完成再到论文文章的结束,每一阶段都有或多或少的问题,但经过查看相关的资料,经过老师和同学们的帮助,原本模糊的概念逐渐清晰,使自己的作品慢慢的完善起来,对自己的大学四年学习生活有了更深刻的认识。因为自身的水平限制,我设计的系统不是很成熟,还有相当多的不足之处,但我也学到了很多的知识。这次毕业设计使我受益匪浅,我感受到做事情只要认真的去做,任何困难都会解决的。从解决困难的过程中我也体会到学习、研究、思考的乐趣,回顾大学四年学习生活此刻感慨颇多,这四年会成为我人生中最宝贵的回忆,因为学校带给我一生的财富,无话不谈的同学,和蔼亲切的老师,怀念我的大学。在以后的工作生活中,我会充分利用所学的一切去奋斗。
AbstractDesignandImplementationofMicro-embeddedRealTimeOperatingSystemTianDewei(DepartmentofComputerScienceandTechnology,DezhouUniversity,Dezhou,Abstract:Withthedevelopmentoftheinternetofthings,embeddedsystemsarebecomingincreasinglyimportantinpeople'sdailylives.Embeddedoperatingsysteminembeddeddevelopmentisalsograduallyattractingmoreandmoredevelopers,ithasbecomethefocusofmanymanufact
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司园区网球场工程协议
- 商业保理合同赔偿
- 玻璃工工程劳务合同
- 户外运动基地山坡地租赁协议
- 海边栈道锌钢栏杆安装协议
- 建筑安全勘察设计施工合同
- 2024年土地资源管理标准化协议模板版B版
- 2024年农药中间体进出口贸易合同范本2篇
- 2024年半股出租车转让合同包括车辆年检及维修保养服务2篇
- 2024年度智能化设备采购合同四3篇
- 2024年危险化学品安全知识竞赛试题及答案
- 初中物理知识点
- 《第13课 数据有关联》参考课件2
- 楼层板施工栓钉焊接
- 勘察设计方案进度计划和保障措施
- 增补材料合同范本
- 古琴音乐文化与鉴赏智慧树知到期末考试答案章节答案2024年广东工业大学
- HYT 083-2005 海草床生态监测技术规程(正式版)
- 普通心理学(山东联盟)智慧树知到期末考试答案章节答案2024年滨州医学院
- 运输方案及应急措施(2篇)
- 渗透测试智慧树知到期末考试答案章节答案2024年江苏大学
评论
0/150
提交评论