实时操作系统实验指导书京江本科版Word格式文档下载.docx
- 文档编号:20920794
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:11
- 大小:114.38KB
实时操作系统实验指导书京江本科版Word格式文档下载.docx
《实时操作系统实验指导书京江本科版Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实时操作系统实验指导书京江本科版Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
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编译器建议使用“BolandC/C++编译器国际版V4.51”,本实验中中使用BC3.1编译器进行编译。
C/OS-II是在PC上开发的,因此在PC机运行Windows95,98,2000,Me,NT和XP上都能运行。
实验中提供的例子是在Windows环境下的DOS窗口内运行的。
虽然µ
C/OS-II是在PC机上开发和测试的,但是µ
C/OS-II的实际对象是嵌入式系统,并且很容易移植到不同架构的微处理器上。
C/OS-II的特点
1)有源代码:
实验将提供µ
C/OS-II的全部源代码(约5500行)。
该源码清晰易读,结构协调,且注解详尽,组织有序;
2)可移植性(portable):
µ
C/OS-II的源代码绝大部分是用移植性很强的ANSIC写的,与微处理器硬件相关的部分是用汇编语言写的。
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的每一种功能、每一个函数以及每一行代码都经过了考验和测试,具有足够的安全性与稳定性,能用于与人性命攸关、安全性条件极为苛刻的系统中。
C/OS-II主要源代码文件和实验目录介绍
当把实验源代码下载到C或D盘的根目录中,此时在相应盘符的根目录中变产生一个实验目录,例如“C:
\JRTOS\Ex1”。
在该目录中主要包含了µ
C/OS-II主要源代码文件和实验示例文件,目录结构如图1-1所示。
图1-1实验代码目录结构图
一般说来,在图1-1中的红色框部分的代码不需要随意更改。
下面再介绍一下各文件夹下的各个子文件夹里的内容:
\SOFTWARE
相应驱动器根目录下的主目录。
与µ
C/OS-II有关的所有文件都在该目录下,在做实验时该目录下的文件(含子目录)一般不需要修改。
\SOFTWARE\BLOCKS
该目录下是所有的函数模块构件。
在PC机上运行的µ
C/OS-II的实验例子用到的与PC机有关的函数都在该目录下。
源文件PC.C和PC.H在\SOFTWARE\BLOCKS\PC\BC45目录下。
\SOFTWARE\uCOS-II
所有有关µ
C/OS-II的文件都在该目录下。
\SOFTWARE\uCOS-II\SOURCE
该目录下是µ
C/OS-II中所有与处理器类型无关部分的源代码。
这个目录下的一些文件有:
OS_CORE.COS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_Q.COS_SEM.COS_TASK.COS_TIME.CuCOS-II.CuCOS-II.H
\SOFTWARE\uCOS-II\Ix86L\BC45
C/OS-II中所有与处理器类型相关部分的源代码(也叫移植代码),面向80x86处理器,运行于实模式下,用大模块编译,可用BorlandC/C++V3.1编译器编译。
这些移植代码允许用户使用BorlandC提供的浮点运算仿真库,并保证函数的可重入性。
其中包含:
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)将BorlandC3.1下载,并复制到C盘或D盘根目录中
(2)将实验代码下载,并复制到C盘或D盘根目录中,此时在相应盘符的根目录下便产生了一个实验名称目录,例如“C:
\Ex1”,可以根据实验需要修改该目录名称,同时对该目录下的实验目录,例如“Test”,也可以根据需要修改,但是该目录下除“Test.c”以外的其他文件不能随意修改。
(3)启动BORLANDC3.1,即运行BORLANDC\BIN\BC.EXE,即可进入BC编程环境。
将实验名称目录和实验代码目录添加到BC的Directors选项中的Include路径串中,以便系统可以正确定位相关文件。
(4)在BC环境中新建或打开一个工程,其中工程中主要包括:
SOFTWARE\UCOS-II\IX86L\BC45\OS_CPU_A.ASM,
SOFTWARE\UCOS-II\SOURCE\UCOS_II.C,
SOFTWARE\UCOS-II\IX86L\BC45\OS_CPU_C.C,
SOFTWARE\BLOCKS\PC\BC45\PC.C,
和实验源代码目录中的实验程序文件,例如Test.C。
(5)编译连接便可生成实验可执行文件。
5样例实验
下载下来的实验源代码便是一个实验样例,将该源代码解压到C盘根目录下,同时BC3.1也同样解压到C盘根目录下,此时可以直接用BC打开实验样例目录Ex1下的工程Ex1,进行编译连接便可得到实验可执行文件,实验执行结构如图1-2所示。
图1-2样例实验输出
第二部分基于PC的uCOS-II实验
实验一A熟悉实验环境
实验目的:
●理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;
●掌握µ
C/OS-II编译环境的使用和配置方法。
●进行简单的程序设计
实验要求与思路:
1.对开发环境进行相关配置,使示例代码能够正确编译执行
2.更改示例代码,使示例代码每次显示时能够进行水平移动(左移到边界时开始右移,右移到边界时开移左移)。
3.更改示例代码,实现垂直移动。
函数说明:
voidPC_GetDateTime(char*s);
获取"
YYYY-MM-DDHH:
MM:
SS"
格式的时间字串存放在字符串s中,s的长度最少为21字节。
voidPC_DispStr(INT8Ux,INT8Uy,INT8U*s,INT8Ucolor);
在y行x列以color颜色值显示字串s,注意color由背景色和前景色两种颜色构成。
INT8UOSTimeDlyHMSM(INT8Uhours,INT8Uminutes,INT8Useconds,INT16Umilli);
按时、分、秒、毫秒设置进行延时。
voidOSTimeDly(INT16Uticks)
按ticks值进行延时,1ticks一般为10ms。
INT32UOSTimeGet(void)
获取从程序开始运行到当前时间,所经过的ticks值。
实验参考输出:
实验参考输出如图2-1所示。
或
图2-1实验参考输出
实验一B任务编程实验
C/OS-II系统的编程方法,包括main函数的书写方法,任务组成、创建、启动和时间函数,主要包括:
⏹OSInit;
OSStart;
OSTaskCreate;
PC_DispStr;
PC_GetKey;
OSTimeDlyHMSM;
OSTimeDly;
OSTimeGet等。
在实验一A的基础上增加两个任务,
一个任务使用PC_GetDateTime实现时间的获取,同时利用PC_DispStr实现时间的显示,每秒种更新一次。
第二个任务,用OSTimeDly实现500ms的延时,每次延时完成时显示指定字符。
按以下顺序循环显示字符:
’|’,’/’,/-/,’\’,全部显示完成后,下次显示时从第一个字符重新开始。
实验二任务管理实验
C/OS-II中任务管理的基本方法(挂起、解挂);
●熟练使用µ
C/OS-II任务管理的基本系统调用。
为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1和T3三个任务,它们交替运行,如图2-2所示。
T0T1T2T3T4T5T6T7T8
图2-2
注意:
图中的栅格并不代表严格的时间刻度,而仅仅表现各任务启动和执行的相对先后关系。
说明:
在系统完成初始化后,可以先创建并启动优先级最低的TaskStart,由它创建其他3个应用任务T0、T1和T2,之后整个系统的运行流程如下:
1)优先级最高的T0开始执行,之后T0挂起自己;
2)然后系统调度选中T1开始执行,之后T1挂起自己;
3)接着系统调度选中T2,之后唤醒T0;
4)如此循环
实现提示:
在启动任务中创建三个任务后,应挂起任务1和任务2。
在每个任务恢复其它任务并挂起自己之前,显示当前三个任务的状态,并延时1秒。
实验参考输出如图2-3所示。
图2-3实验结果输出参考图
实验三信号量编程实验
●理解信号量的作用,特别是互斥操作和同步操作;
●掌握利用信号量操作函数实现简单的生产者/消费者问题;
●掌握下列信号量操作函数及其使用方法:
⏹OSSemCreate、OSSemPend、OSSemPost
1.利用信号量实现同步操作,Task1每隔2spost消息,表示生产完成,并显示生产完成信息。
Task2等待信号量,等待成功后显示消息,重新等待。
2.利用信号量实现互斥操作。
Task1和Task2竞争使用Fun函数,Task1(低优先级)每隔2秒请求一次信号量,Task2(高优先级)每隔2.5秒请求一次信号量。
Fun函数调用后会延时1秒后返回。
1)在调用信号量函数前后,分别显示提示信息。
2)提示信息显示在不同的行上。
3)Fun函数中显示延时开始和延时结束信息。
实验四消息编程实验
●消息编程方法,主要函数包括:
⏹OSQCreate创建消息队列
⏹OSQPend接收消息
⏹OSQPostFront,OSQPost发送消息
建议一个能存放4条消息的消息队列,在此基础上创建Task1和Task3,向该消息队列发送消息,而创建任务Task2,从消息队列中获取消息。
考虑消息队列满和空的情况。
(设Task3使用OSQPost,Task1使用OSQPostFront)
Task1,采用OSQPostFront方式,连续在队列中放置6个数据(不延时),当队列满时输出提示信息并延时1分钟。
Task2,每隔1秒从队列中取得一个数据。
如果队列空则延时1分钟
Task3,每隔3秒以OSQPost方式向队列发送数据.如果队列满,则延时1分钟.
实验参考输出如图2-6所示。
图2-6实验参考输出
实验五邮箱编程实验
●了解邮箱编程原理,熟悉下列函数的使用。
⏹OSMboxCreate创建邮箱
⏹OSMboxPost发送邮件
⏹OSMboxPend接收邮件
创建一个邮箱,在此基础上创建一个任务负责往邮箱发送消息,而创建两个任务接收邮箱消息,考虑邮箱空和满的情况
TASK1以每秒一次的速度将发送次数转换为字串发送给TASK2,每发送一次发送次数增加1。
TASK2接收到字串后显示。
实验参考输出如图2-7所示。
图2-7实验参考输出
附件:
实验报告格式要求
对每个实验,都需要写出实验报告,格式如下:
实验名称
实验目的与要求
实验设计:
设计思路(文字描述),模块(任务)划分图,每个模块的主要实现方法伪代码描述
实验结果:
运行结果界面
总结
封面页主要内容:
实时操作系统课程实验报告,专业,学号,名称,完成时间
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实时 操作系统 实验 指导书 本科