实时操作系统实验指导书京江本科2012版.doc_第1页
实时操作系统实验指导书京江本科2012版.doc_第2页
实时操作系统实验指导书京江本科2012版.doc_第3页
实时操作系统实验指导书京江本科2012版.doc_第4页
实时操作系统实验指导书京江本科2012版.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

实时操作系统实验指导书京江本科版计算机工程系2009-03-0415实时操作系统实验指导书京江本科版实时操作系统实验指导书第一部分 实验系统简介21 C/OS-II概述22 C/OS-II的特点23 C/OS-II主要源代码文件和实验目录介绍34 实验平台的配置45 样例实验5第二部分 基于PC的uCOS-II实验6实验一 任务编程实验6实验二 任务管理实验7实验三 信号量编程实验9实验四 消息编程实验10实验五 邮箱编程实验11参考设计源程序文档13第一部分 实验系统简介1 C/OS-II概述C/OS-II是一个完整的,可移植、固化、剪裁的占先式实时多任务内核。C/OS-II是用ANSI的C语言编写的,包含一小部分汇编语言代码,使之可以提供给不同架构的微处理器使用。至今,从8位到64位,C/OS-II已经在40多种不同架构的微处理器上使用。世界上已经有数千人在各个领域中使用C/OS,这些领域包括:照相机行业、航空业、医疗器械、网络设备、自动提款机以及工业机器人等。C/OS-II和C/OS版本V1.11(C/OS的最终版本)是向上兼容的,且改进了很多。如果应用程序是基于C/OS的,不需要做什么改动就可以在C/OS-II上运行。实验将提供C/OS-II的全部源代码,大约5500行。CPU相关的部分使用的是Intel80x86微处理器的代码,运行在实模式下,C编译器使用大模块方式。C编译器建议使用“Boland C/C+编译器国际版V4.51”,本实验中中使用BC3.1编译器进行编译。C/OS-II是在PC上开发的,因此在PC机运行Windows 95,98,2000,Me,NT和XP上都能运行。实验中提供的例子是在Windows环境下的DOS窗口内运行的。虽然C/OS-II是在PC机上开发和测试的,但是C/OS-II的实际对象是嵌入式系统,并且很容易移植到不同架构的微处理器上。2 C/OS-II的特点1)有源代码: 实验将提供C/OS-II的全部源代码(约5500行)。该源码清晰易读,结构协调,且注解详尽,组织有序;2)可移植性(portable): C/OS-II的源代码绝大部分是用移植性很强的ANSI C写的,与微处理器硬件相关的部分是用汇编语言写的。C/OS-II可以移植到许许多多不同的微处理器上,条件是:该微处理器具有堆栈指针,具有CPU内部寄存器入栈、出栈指令,使用的C编译器必须支持内嵌汇编,或者该C语言可扩展和可链接汇编模块,使得关中断和开中断能在C语言程序中实现;3)可固化(ROMable): C/OS-II是为嵌入式应用而设计的,意味着只要具备合适的系列软件工具(C编译、汇编、链接以及下载/固化)就可以将C/OS-II嵌入到产品中作为产品的一部分;4)可裁减(scalable): 可以只使用C/OS-II中应用程序需要的系统服务。可裁减性是靠条件编译实现的,只需要在用户的应用程序中定义那些C/OS-II中的功能应用程序需要的部分就可以了;5)可剥夺性(preemptive): C/OS-II是完全可剥夺型的实时内核,即C/OS-II总是运行就绪条件下优先级最高的任务;6)多任务: C/OS-II可以管理64个任务,用优先级位图方法实现任务队列管理。赋予每个任务的优先级必须是不相同的,这就是说C/OS-II不支持时间片轮转调度法(该调度法适用于调度优先级平等的任务);7)可确定性: 绝大多数C/OS-II的函数调用和服务的执行时间具有可确定性。也就是说用户能知道C/OS-II的函数调用与服务执行了多长时间。进而可以说,除了函数OSTimeTick()和某些事件标志服务,C/OS-II系统服务的执行时间不依赖于用户应用程序任务数目的多少;8)任务栈: 每个任务都有自己单独的栈。C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求;9)系统服务: C/OS-II提供许多系统服务,比如信号量、互斥信号量、事件标志、消息邮箱、消息队列、时间管理等等;10)中断管理: 中断可以使正在执行的任务暂时挂起。如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可以达255层;11)稳定性和可靠性: C/OS-II的每一种功能、每一个函数以及每一行代码都经过了考验和测试,具有足够的安全性与稳定性,能用于与人性命攸关、安全性条件极为苛刻的系统中。3 C/OS-II主要源代码文件和实验目录介绍当把实验源代码下载到C或D盘的根目录中,此时在相应盘符的根目录中变产生一个实验目录,例如“C:JRTOSEx1”。在该目录中主要包含了C/OS-II主要源代码文件和实验示例文件,目录结构如图1-1所示。 图1-1 实验代码目录结构图一般说来,在图11中的红色框部分的代码不需要随意更改。下面再介绍一下各文件夹下的各个子文件夹里的内容:SOFTWARE相应驱动器根目录下的主目录。与C/OS-II有关的所有文件都在该目录下,在做实验时该目录下的文件(含子目录)一般不需要修改。SOFTWAREBLOCKS该目录下是所有的函数模块构件。在PC机上运行的C/OS-II的实验例子用到的与PC机有关的函数都在该目录下。源文件PC.C和PC.H在SOFTWAREBLOCKSPCBC45目录下。SOFTWARE uCOS-II所有有关C/OS-II的文件都在该目录下。SOFTWARE uCOS-IISOURCE该目录下是C/OS-II中所有与处理器类型无关部分的源代码。这个目录下的一些文件有:OS_CORE.C OS_FLAG.C OS_MBOX.C OS_MEM.C OS_MUTEX.C OS_Q.C OS_SEM.C OS_TASK.C OS_TIME.C uCOS-II.C uCOS-II.HSOFTWARE uCOS-IIIx86LBC45该目录下是C/OS-II中所有与处理器类型相关部分的源代码(也叫移植代码),面向80x86处理器,运行于实模式下,用大模块编译,可用Borland C/C+ V3.1编译器编译。这些移植代码允许用户使用Borland C提供的浮点运算仿真库,并保证函数的可重入性。其中包含:OS_CPU_A.ASM,OS_CPU.H,OS_CPU_C.C。实验目录该目录下包含了实验用的一个实例程序源代码:INCLUDES.H:文件包含的主文件,用于C/OS-II和代码测试;OS_CFG.H::C/OS-II的配置文件,定义使用C/OS-II中的哪些功能,应用程序中有多少个任务等等;实验主程序文件,例如TEST.C,该文件为实验过程中主要需要修改的文件。 注:实验所生成的输出文件都在实验名称目录下。4 实验平台的配置(1)将Borland C 3.1下载,并复制到C盘或D盘根目录中(2)将实验代码下载,并复制到C盘或D盘根目录中,此时在相应盘符的根目录下便产生了一个实验名称目录,例如“C:Ex1”,可以根据实验需要修改该目录名称,同时对该目录下的实验目录,例如“Test”,也可以根据需要修改,但是该目录下除“Test.c”以外的其他文件不能随意修改。(3)启动BORLAND C 3.1,即运行BORLANDCBINBC.EXE,即可进入BC编程环境。将实验名称目录和实验代码目录添加到BC的Directors选项中的Include路径串中,以便系统可以正确定位相关文件。(4)在BC环境中新建或打开一个工程,其中工程中主要包括:SOFTWAREUCOS-IIIX86LBC45OS_CPU_A.ASM,SOFTWAREUCOS-IISOURCEUCOS_II.C,SOFTWAREUCOS-IIIX86LBC45OS_CPU_C.C,SOFTWAREBLOCKSPCBC45PC.C,和实验源代码目录中的实验程序文件,例如Test.C。(5)编译连接便可生成实验可执行文件。5 样例实验 下载下来的实验源代码便是一个实验样例,将该源代码解压到C盘根目录下,同时BC3.1也同样解压到C盘根目录下,此时可以直接用BC打开实验样例目录Ex1下的工程Ex1,进行编译连接便可得到实验可执行文件,实验执行结构如图12所示。图12 样例实验输出第二部分 基于PC的uCOS-II实验实验一A 熟悉实验环境实验目的:l 理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;l 掌握C/OS-II编译环境的使用和配置方法。l 进行简单的程序设计实验要求与思路:1. 对开发环境进行相关配置,使示例代码能够正确编译执行2. 更改示例代码,使示例代码每次显示时能够进行水平移动(左移到边界时开始右移,右移到边界时开移左移)。3. 更改示例代码,实现垂直移动。函数说明:void PC_GetDateTime (char *s);获取YYYY-MM-DD HH:MM:SS格式的时间字串存放在字符串s中,s的长度最少为21字节。void PC_DispStr (INT8U x, INT8U y, INT8U *s, INT8U color);在y行x列以color颜色值显示字串s,注意color由背景色和前景色两种颜色构成。INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli);按时、分、秒、毫秒设置进行延时。void OSTimeDly (INT16U ticks)按ticks值进行延时,1 ticks一般为10ms。INT32U OSTimeGet (void)获取从程序开始运行到当前时间,所经过的ticks值。实验参考输出:实验参考输出如图2-1所示。或图2-1 实验参考输出实验一B 任务编程实验实验目的:l 理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;l 掌握C/OS-II系统的编程方法,包括main函数的书写方法,任务组成、创建、启动和时间函数,主要包括:n OSInit; OSStart; OSTaskCreate; PC_DispStr; PC_GetKey; OSTimeDlyHMSM; OSTimeDly; OSTimeGet等。实验要求与思路:在实验一A的基础上增加两个任务,一个任务使用PC_GetDateTime实现时间的获取,同时利用PC_DispStr实现时间的显示,每秒种更新一次。第二个任务,用OSTimeDly实现500ms的延时,每次延时完成时显示指定字符。按以下顺序循环显示字符:|,/,/-/,,全部显示完成后,下次显示时从第一个字符重新开始。实验二 任务管理实验实验目的:l 理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;l 掌握C/OS-II中任务管理的基本方法(挂起、解挂);l 熟练使用C/OS-II任务管理的基本系统调用。实验要求与思路:为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1和T3三个任务,它们交替运行,如图2-2所示。T0T2T1T0T1T2T1T0 T0 T1 T2 T3 T4 T5 T6 T7 T8 图2-2注意:图中的栅格并不代表严格的时间刻度,而仅仅表现各任务启动和执行的相对先后关系。说明:在系统完成初始化后,可以先创建并启动优先级最低的TaskStart,由它创建其他3个应用任务T0、T1和T2,之后整个系统的运行流程如下:1) 优先级最高的T0开始执行,之后T0挂起自己;2) 然后系统调度选中T1开始执行,之后T1挂起自己;3) 接着系统调度选中T2,之后唤醒T0; 4) 如此循环实现提示:在启动任务中创建三个任务后,应挂起任务1和任务2。 在每个任务恢复其它任务并挂起自己之前,显示当前三个任务的状态,并延时1秒。实验参考输出:实验参考输出如图2-3所示。图23 实验结果输出参考图实验三 信号量编程实验实验目的:l 理解信号量的作用,特别是互斥操作和同步操作;l 掌握利用信号量操作函数实现简单的生产者/消费者问题;l 掌握下列信号量操作函数及其使用方法:n OSSemCreate、OSSemPend、OSSemPost实验要求与思路:1. 利用信号量实现同步操作,Task1每隔2s post消息,表示生产完成,并显示生产完成信息。Task2等待信号量,等待成功后显示消息,重新等待。2. 利用信号量实现互斥操作。Task1和Task2竞争使用Fun函数,Task1 (低优先级)每隔2秒请求一次信号量 ,Task2(高优先级)每隔2.5秒请求一次信号量。Fun函数调用后会延时1秒后返回。实现提示:1) 在调用信号量函数前后,分别显示提示信息。2) 提示信息显示在不同的行上。3) Fun函数中显示延时开始和延时结束信息。实验四 消息编程实验实验目的:l 消息编程方法,主要函数包括:n OSQCreate 创建消息队列n OSQPend 接收消息n OSQPostFront,OSQPost 发送消息实验要求与思路:建议一个能存放4条消息的消息队列,在此基础上创建Task1和Task3,向该消息队列发送消息,而创建任务Task2,从

温馨提示

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

评论

0/150

提交评论