《2022年微实时操作系统方案与实现大学方案.docx》由会员分享,可在线阅读,更多相关《2022年微实时操作系统方案与实现大学方案.docx(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用目 录摘要 1 1.1 选题的目的和意义331.2 国内外的讨论现状和趋势1.2.1 ARM 处理器 3 1.2.2 操作系统 5 2 系统设计 7 2.1 可行性分析 7 2.2 需求分析 7 2.3 系统功能设计 8 2.3.1 总体结构 8 2.3.2 RTOS 内核处理流程 8 3 系统开发环境和工具 10 3.1 开发环境 10 3.2 开发工具 10 4 系统具体设计 10 4.1 任务创建模块 11 4.2 任务调度模块 12 4.3 任务通信模块 125 系统具体实现 13 5.1 任务创建模块 13
2、5.1.1 任务 13 5.1.2 任务状态 13 5.1.3 任务掌握块 14 5.1.4 任务就绪表 15 5.2 任务调度模块 17 5.2.1 基于优先级抢占调度 17 5.2.2 时钟节拍函数 18 5.3 任务间的通信 19 6 系统测试 216.1 工程一:内核移植到周立功LPC2138测试及 RS232串口的实现 216.2 工程二:内核多任务的抢占调度及任务的睡眠机制 226.3 工程三:任务治理测试 226.4 工程四:任务间通信测试- 互斥信号量 227 总结和展望 22Abstract24参考文献 25名师归纳总结 - - - - - - -第 1 页,共 24 页精选
3、学习资料 - - - - - - - - - 个人资料整理 仅限学习使用微实时操作系统设计与实现田德伟德州学院运算机系,山东德州 253023 )摘要 :随着物联网的进展,嵌入式系统在人们的生活中的作用日益凸显;嵌入式操作系统在嵌入式开发中也逐步得到了开发人员的关注,如何在保证嵌入式系统的效率的前提下,降低开发成本,成为诸多厂商关注的焦点;该微实时操作系统与现行linux 系统具有相比,具有更高实时性;与 /COS-ii 相比内核更精简、在掌握产品成本中有庞大优势;该系统主要针对低端微处理器平 台,旨在降低开发成本同时提高嵌入式系统对外围设备治理效率;该系统支持八个优先级,每个 优先级可以创建
4、一个任务,任务间同步采纳信号量机制;关键字 :嵌入式实时操作系统, 1.1 选题的目的和意义/COS-ii ,嵌入式系统 1 引言随着微电子技术的快速进展,芯片功能更加强大,微嵌入式实时操作系统必将成 为嵌入式操作系统进展的趋势,这不仅能降低成本,缩小产品体积,仍能增强产品的 牢靠性;同时,软件硬件的紧密结合,嵌入式软件与硬件界线更加模糊,嵌入式软件 经常以硬件形状存在,这种方式可提高实时性,增强可爱护性;1.2 国内外的讨论现状和趋势嵌入式操作系统种类繁多,有资源开销很少的IC 卡操作系统,也有功能较强的网络运算机操作系统;这些嵌入式操作系统从功能到性能各具特色,为各种硬件环境 及应用供应了
5、相应的支持和服务;目前市场上共有几十种操作系统,有多任务系统,也有单任务系统;有实时系统 系统,也有分时系统;总之,不同厂商推出的操作系统或多或少都有差异,但很多嵌 入式操作系统一般具有如下一些内容和功能:系统核心、窗口图形系统、文件系统、设备驱动程序和网络协议等;嵌入式操作系统系统将有以下方向趋势:1. 随着微电子技术的快速进展,芯片功能更加强大,嵌入式实时操作系统必将成为嵌入式操作系统的进展趋势,这不仅能 降低成本,缩小产品体积,仍能增强产品的牢靠性;同时,软件硬件的紧密结合,嵌 入式软件与硬件界线更加模糊,嵌入式软件经常以硬件形状存在,这种方式可提高实 时性,增强可爱护性; 2. 嵌入式
6、操作系统会与嵌入应用软件协同进展;嵌入式系统中 的重要角色包括嵌入式应用软件,嵌入式系统应用领域千差万别,只有充分重视应用名师归纳总结 - - - - - - -第 2 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用软件的进展,才能满意丰富多彩的应用要求;1.2.1 ARM 处理器ARMAdvanced RISC Machines )是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的 RISC 处理器、相关技术及软件;技术具有性能高、成 本低和能耗小的特点;适用于多种领域,比如嵌入掌握、消费 / 训练类多媒体、 DSP和移动式应用等;A
7、RM 处理器共有 7 种运行模式:用户模式 user ,use ) 正常程序执行模式 快速中断模式 fiq )用于高速数据传输和通道处理 外部中断模式 irq )用于通常的中断处理 治理模式 sve ) 操作系统使用的一种爱护模式 数据拜访终止模式 abt )用于虚拟储备及储备爱护 未定义指令终止模式 und )用于支持通过软件方针硬件的协处理器 系统模式 sys )用于运行特权级的操作系统任务除了用户模式之外的6 种处理器模式称为特权模式privileged modes );在这些模式下,程序可以拜访全部的系统资源,也可以任意的进行处理器模式切换;除 系统模式外,其他 5 种特权模式又称为反
8、常模式;处理器模式可以通过软件掌握进行切换,也可以通过外部中断或反常处理过程进 行切换;大多数的用户程序运行在用户模式下;这时,应用程序不能够拜访一些受操 作系统爱护的系统资源,应用程序也不能直接进行处理器模式的切换;当需要进行处 理器模式切换时,应用程序可以产生反常处理,在反常处理过程中进行处理器处理器 模式的切换;这种体系结构可以使系统掌握整个系统的资源;当应用程序发生反常中断时,处理器进入相应的反常模式;在每一种反常模式中都有一组寄存器,供相应的反常处理程序使用,这样就可以保证在进入反常模式时,拥护模式下的寄存器 储存了程序运行状态)不被破坏;系统模式并不是通过反常过 程进入的,它和用户
9、模式具有完全一样的寄存器;但是系统模式属于特权模式,可以 拜访全部的系统资源,也可以直接进行处理器模式切换;它主要供操作系统任务使 用;通常操作系统的任务需要拜访全部的系统资源,同时该任务仍旧使用拥护模式的 寄存组,而不是使用反常模式下相应的寄存器组,这样可以保证当反常中断发生时任 务状态不被破坏;ARM 处理器含有 37 个寄存器,这些寄存器包括以下两类寄存器;1 )31 个通用寄存器:包括程序计数器PC 等,这些寄存器都是32位寄存器;名师归纳总结 - - - - - - -第 3 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用操作系统的工作方
10、式是:用户将作业交给系统操作员,系统操作员将很多用户的作业组成一批作业,之后输入到运算机中,在系统中形名师归纳总结 - - - - - - -第 4 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用成一个自动转接的连续的作业流,然后启动操作系统,系统自动、依次执行每个作业,最终由操作员将作业结果交给用户;批处理操作系统的特点是:多道和成批处理;2. 分时操作系统分时Time Sharing操作系统的工作方式是:一台主机连接了如干个终端,每个终端有一个用户在使用;用户交互式地向系统提出命令恳求,系统接受每个用户的 命令,采纳时间片轮转方式处理服务恳求,
11、并通过交互方式在终端上向用户显示结果;用户依据上步结果发出下道命;分时操作系统将CPU 的时间划分成如干个片段,称为时间片;操作系统以时间片为单位,轮番为每个终端用户服务;每个用户轮 流使用一个时间片而使每个用户并不感到有别的用户存在;分时系统具有多路性、交 互性、 “ 独占”性和准时性的特点;多路性指,伺时有多个用户使用一台运算机,宏观 上看是多个人同时使用一个 CPU,微观上是多个人在不同时刻轮番使用 CPU;交互 ; “独占 ”性是指,用户依据系统响应结果进一步提出新恳求 用户直接干预每一步 性是指,用户感觉不到运算机为其他人服务,就像整个系统为他所独占;准时性指,系统对用户提出的恳求准
12、时响应;它支持位于不同终端的多个用户同时使用一台运算 机,彼此独立互不干扰,用户感到似乎一台运算机全为他所用;常见的通用操作系统是分时系统与批处理系统的结合;其原就是:分时优先,批处理在后; “ 前台” 响应需频繁交互的作业,如终端的要求;“后台 ”处理时间性要求 不强的作业;3. 实时操作系统实时操作系统 RealTimeOperatingSystem, RTOS 是指使运算机能准时响应外部大事的恳求在规定的严格时间内完成对该大事的处理,并掌握全部实时设备和 实时任务和谐一样地工作的操作系统;实时操作系统要追求的目标是:对外部恳求在 严格时间范畴内做出反应,有高牢靠性和完整性;其主要特点是资
13、源的安排和调度首 先要考虑实时性然后才是效率;此外,实时操作系统应有较强的容错才能;4. 网络操作系统 网络操作系统是基于运算机网络的,是在各种运算机操作系统上按网络体系结构协议标准开发的软件,包括网络治理、通信、安全、资源共享和各种网络应用;其目 标是相互通信及资源共享;在其支持下,网络中的各台运算机能相互通信和共享资 源;其主要特点是与网络的硬件相结合来完成网络的通信任务;5. 分布式操作系统名师归纳总结 - - - - - - -第 5 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用它是为分布运算系统配置的操作系统;大量的运算机通过网络被连结
14、在一起,可以 获 得 极 高 的 运 算 能 力 及 广 泛 的 数 据 共 享 ; 这 种 系 统 被 称 作 分 布 式 系 统DistributedSystem ;它在资源治理,通信掌握和操作系统的结构等方面都与其他操作系统有较大的区分;由于分布运算机系统的资源分布于系统的不同运算机上,操作系统对用户的资源需求不能像一般的操作系统那样等待有资源时直接安排的简洁 做法而是要在系统的各台运算机上搜寻,找到所需资源后才可进行安排;对于有些资 源,如具有多个副本的文件,仍必需考虑一样性;所谓一样性是指如干个用户对同一 个文件所同时读出的数据是一样的;为了保证一样性,操作系统须掌握文件的读、写、操
15、作,使得多个用户可同时读一个文件,而任一时刻最多只能有一个用户在修改 文件;分布操作系统的通信功能类似于网络操作系统;由于分布运算机系统不像网络 分布得很广,同时分布操作系统仍要支持并行处理,因此它供应的通信机制和网络操 作系统供应的有所不同,它要求通信速度高;分布操作系统的结构也不同于其他操作 系统,它分布于系统的各台运算机上,能并行地处理用户的各种需求,有较强的容错 才能;2 系统设计2.1 可行性分析1)技术可行性:依据开发人员供应的系统函数接口、实时性及实现系统的各 项条件,从技术的角度讨论实现系统的可行性;2)经济可行性:经济可行性是可行性讨论的重要组成部分,它用于评估基于 运算机系
16、统的经济合理性,给出系统开发的成本论证;本系统是为保险公司信息治理 而做的系统,装上该应用系统后即可使用,在系统移植方面简洁,对硬件设备的要求 进一步降低,节省了不必要的支出,所带来的效益大于系统的开发成本,在经济上完 全可行;函数从闲暇 TCB 池取得闲暇的TCB,并依据用户 分 配 堆 栈 的 大 小 确 定 任 务 堆 栈 的 栈 顶 指 针 , 调 用 任 务 堆 栈 初 始 化 函 数名师归纳总结 OSTaskStkInit对任务堆栈进行初始化,返回任务堆栈的栈顶指针;然后调用函第 10 页,共 24 页数 OSTCBInit完成对任务掌握块的初始化工作;最终把任务掌握块存放任务就绪
17、列表中,具体流程如图4-2 所示:- - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用任务堆栈 初始化任务堆栈 栈顶指针闲暇 TCB池闲暇 TCB任务掌握块闲暇TCB任务列表初始化任务 编号图 4-2 4.2 任务调度模块第一 taskStart函数依据任务编号和任务列表得到任务掌握块,把任务的编号和优先级放存放到 OSIDPrioTbl 和就绪列表中,然后启动任务调度器,依据OSIDPrioTbl 和就绪列表查找进入就绪态优先级最高的任务,最终调用函数OS_TASK_SW 完成任务切换;任务调度具体流程如图 4-3 所示:任务编号任务列表任务
18、掌握块taskStart任务掌握块OSTCBRdyTbl优先级储备任务优先级列表任务进入多任务调度列表任务掌握块OS_Sched任务优先级多任务调度器OS_TASK_SW任务切换启动任务图 4-3 4.3 任务通信模块第一, semCreate函数从闲暇的OS_EVENT池中取得一个闲暇大事掌握块,并完成对其的初步初始化,将其放到大事列表中;然后,当前任务调用函数名师归纳总结 semTake时,检查互斥信号量是否可用,假如可用当前任务占用该信号量,否就第 11 页,共 24 页调用OSEventTaskWait函数将当前任务从就绪列表移除存放到大事等待列表- - - - - - -精选学习资料
19、 - - - - - - - - - 个人资料整理 仅限学习使用中;最终,假如占用该互斥信号量任务的任务调用 semGive 释放信号量,调用函数 OSEventTaskRdy,查找等待该互斥信号量优先级最高的任务,将其从等待列表移除存放到就绪列表中,等待任务调度;具体数据流程如图 4-4 所示:任务 编号闲暇OS_EVENT池OS_EVENT大事掌握块大事编号大事列表初始化任务 编号OS_EVENT大事等待列表任务编号掌握块互斥信号量任务 编号图 4-4 5 系统具体实现5.1 任务创建模块5.1.1 任务一个任务通常是一个无限的循环;一个任务看起来像其它voidC 的函数一样,有函数返回类
20、型,有形式参数变量,任务返回类型必需定义为型,但是任务是绝不会返回的;任务可以在一次执行完毕之后被删除,并不是任务代码被删除,只是内核不会再理睬该任务的代码,该任务再也不能运行了;5.1.2 任务状态图 5-1 是 RTOS 内核掌握下的任务状态转换土,在任一给定时刻,任务的状态肯定是在这六种状态之一;名师归纳总结 - - - - - - -第 12 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用堵塞态semTaketaskDelete僵死taskCreatesemGive就绪态OS_TASK_W运行态时钟中断中断服务态状态taskDelete任务
21、被抢占OSIntExittaskSleepOSTimeTicktaskDelete睡眠态图 5-1 僵死状态 来实现;任务一旦被创建就处于僵死状态,通过 taskStart 使任务进入就绪态;任何任务的创建可以是在多任务运行之前,也可以是动态地被一个运行着的任务建立;假如一个任务是被另一个任务建立的,而这个任务的优先级高于建立它的那个任务,就这个刚刚建立的任务将立刻得到CPU 的掌握权;一个任务可以通过taskDelete返回到僵死状态,也可以通过调用该函数使另一个任务进入僵死状态;正在运行的任务可以通过调用函数taskSleep使自身主动舍弃CPU 掌握权,休眠一段时间,这个任务进入睡眠态,
22、等待这段时间过去,下一个最高优先级的就绪态 任 务 立 即 获 得 CPU 的 控 制 权 ; 等 待 的 时 间 过 去 以 后 , 由 系 统 服 务 函 数OSTimeTick 使处于睡眠状态的任务进入就绪态;正在运行的任务等待某一大事时要等待,当任务因等待大事被堵塞,下一个优先级最高的任务立刻得到CPU 的掌握权;当等待的大事放生了,堵塞状态最高优先级的任务进入就绪态;大事发生的报告可能来自另一个任务,也可能来自中断服务子程 序;正在运行的任务是可以被中断的,除非该任务将中断关了或者 RTOS 将中断关了;被中断了的任务就进入了中断服务态ISR );响应中断时,正在执行的任务被挂起,中
23、断服务子程序掌握了 CPU 的使用权;中断服务子程序可能会报告一个或多 个大事的发生,而使一个或多个任务进入就绪态;在这种情形下,从中断服务子程序返回之前, RTOS 要判定被中断的任务是否仍是就绪态任务中优先级最高的;假如中 断服务子程序使一个优先级更高的任务进入了就绪态,就新进入就绪态的这个优先级更高的任务将得以运行;否就原先被中断了的任务才能连续运行;5.1.3 任务掌握块为了防止动态内存安排引起的问题,该RTOS 内核采纳内存静态安排的方式,名师归纳总结 - - - - - - -第 13 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用同时
24、为了削减对内存的需求量引入了回收和复用的机制;任务掌握块 OS_TCB )回收使用和任务编号 OSTCBNext; /* 修改闲暇 TCB 链表的指针 */在任务被删除时回收 ptcbOSTCBNextTCB ,如图 5-3 所示:OSTCBFreeListOSTCBTbl0OSTCBTbl1OSTCBTbl2OSTCBTblOS_MAX_TASK0OSTCBNextOSTCBNextOSTCBNextOSTCBNext图 5-3 ptcb-OSTCBNext = OSTCBFreeList; /*回收 TCB所占用的资源 */OSTCBFreeList = ptcb; /* 修改闲暇 TCB
25、链表的指针 */ 为了降低任务列表对内存的需求量,引入了任务编号的复用机制,任务的编号与 系统最多运行的任务有关,而与其他的优先级无关,从而削减了 RTOS 对 RAM 的需求量;任务编号的复用机制如下所示:ptcb 表示任务掌握块ptcb = OSTCBFreeList; /* 从 TCB表中获得闲暇的 TCB*/任务掌握块 OS_TCB中的几个成员的算法 : OSTCBX = priority&0x07;OSTCBBitX = OSMapTblpriority&0x07;上述变量主要用于加速任务就绪态的过程或进入等待大事发生状态的过程 3 个人资料整理仅限学习使用6 01000000 ;7
26、 10000000 |= OSMapTblpriority & 0x075.2 任务调度模块 5.2.1 基于优先级抢占调度 当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的 CPU 使用权就被剥夺了或者说是挂起了,那个高优先级的任务立刻得到 CPU 的掌握 权;假如中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的 任务被挂起,优先级高的那个任务得到运行;调度流程如图 5-5 所示:图 5-5 基于优先级抢占的内核,最高优先级的任务什么时候可以执行,可以得到 CPU 的掌握权是可知的;使用基于优先级的抢占式内核使得任务响应时间得以最优化;基于优先级调度的内核
27、总是让就绪态的高优先级的任务先运行,中断服务程序可以抢占 CPU,到中断服务完成时,内核使优先级最高的任务运行,任务响应时间得到了最 优化,且是可知的;查找进入就绪态优先级最高的任务的TCB并完成任务前换的步骤如图任5-6 所示:查找就绪态查找最高优先最高优先优先级级的TCB以最高优先级为最高优先级优先级位图储备就绪列表最高优先级务索引TCB列表TCB切换名师归纳总结 OSRdyTblOSTCBRdyTbl( 3 )第 16 页,共 24 页( 2 )( 1 )- - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用图 5-6 第一步:利用就绪表查
28、找处于就绪态的最高优先级;利用任务就绪表和 OSUnMapTbl 查询处于就绪态优先级最高的任务的方法如下: priority 表示任务的优先级X= OSUnMapTblOSRdyTbl ;priority = INT16UX;OSUnMapTab 数组结构如下所示:INT8U const OSUnMapTbl256 = 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x00 to 0x0F */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x10 to 0x1F */ 5, 0
29、, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x20 to 0x2F */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x30 to 0x3F */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x40 to 0x4F */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x50 to 0x5F */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x60 to 0x6F */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x70 to 0x7F */ 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x80 to 0x8F */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x90 to 0x9F */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1,
限制150内