系别:电子信息与计算机科学系
专业班级:文电文通1141
实验地点:一教
实验时间:9-17周,周三节
指导教师:荆蕾。
学期: 2013-2014学年度第二学期。
目录 2学时进度安排 2
实验一 ucos-ii操作系统的文件结构和任务的创建 3
一、实验目的 3
二、开发环境介绍 3
三、实验任务: 7
实验二任务的删除 8
一实验目的 8
二理论知识 8
三实验任务: 9
实验三信号量的使用 10
一实验目的 10
二实验原理 10
三实验任务: 11
实验四互斥型信号量的使用 12
一实验目的 12
二理论知识 12
三实验内容 13
实验五消息队列的使用 14
一实验目的 14
二实验原理 14
三实验内容 16
实验六信号量集的使用 17
一实验目的: 17
二实验原理: 17
三实验内容 19
1.熟悉并掌握基于uc/os-ii的开发工具turboc3.0
2.了解uc/os-ii的文件结构、文件之间的依赖关系 。
3.了解任务创建的方法。
一)为什么选择用turboc3.0编译ucos(uc/os-ii)?
按照课本(任哲老师)给出的borland c编译方式,配置起来有些复杂(课本第二章讲了使用borland c编译的配置方法,请感兴趣的同学自己研究)。所以这里我们选择了配置好的工程文件,使用turboc3.0编译。
turbo c是borland公司开发的dos下16位c语言集成开发工具。有2.0和3.
0版本,2.0只支持c语言编译,不支持鼠标操作,而3.0版本可以支持c/c++两种语言编译,而且还支持鼠标和//注释方式;tc2.
0是80年代开发的,使用了很多年一直到现在windows系统才逐渐退出舞台。turbo c2.0不仅是一个快捷、高效的编译程序,同时还有一个易学、易用的集成开发环境。
使用turbo c2.0无需独立地编辑、编译和连接程序,就能建立并运行c语言程序。因为这些功能都组合在turbo 2.
0的集成开发环境内,并且可以通过一个简单的主屏幕使用这些功能。
二)在开始做之前,请确保您已经有software文件夹(即ucos源文件和pc上的移植文件)。
编译ucos需要的源文件如下:
1. source文件夹(..software\project\source\)的文件如下:
含os_ os_ 、os_ ucos_ ucos_ 等11个文件。
2. project文件夹下的文件如下:
os_ (三个文件)
我们的源程序文件
os_cpu_汇编语言源程序文件,需要用tasm汇编,即和tasm2msg..exe这两个文件。
output文件夹中包含了编译生成的obj和exe文件。
三)程序的编译和运行步骤。
该工程文件的使用方法:
1、双击启动turboc 3.0 。可以用alt+enter切换,使tc全屏。
2、在project 菜单---选择open project.. 在弹出的对话框中选择即为我们已经建立好的工程文件。如下图所示:
打开后tc界面可能没什么变化,你可能以为还没打开,可以将project窗口打开。
能够看到刚才打开的ucos2工程包含的文件了。
3、ok我们开始编译。
alt+c选择编译菜单的make
编译成功。4、alt+r选择run菜单下的run执行。(注意:运行的结果如下图所示,但是这个结果是根据程序的不同而变化的。)
5、按esc键可以返回tc界面,你就可以开始写自己的文件了。
6、如果需要往工程中添加文件,请选择project菜单---add item…(不需要添加的将此步骤忽略)
添加文件add item
添加c文件。
1、请通过工程文件来了解uc/os-ii 的文件体系。
uc/os-ii 包括三个部分:(p13,图1-7)
1)核心**部分,这部分**与处理器无关,包括七个源**文件和一个头文件,这七个源**文件负责的功能分别是内核管理、事件管理、消息队列管理、存储管理、消息管理、信号量处理、任务调度和定时管理。
2)设置**部分,包括两个头文件,用来配置事件控制块的数目以及是否包含消息管理相关**等。
3)处理器相关的移植**部分,这部分包括一个头文件,一个汇编文件和一个c **文件,在uc/os-ii 的移植过程中,用户所需要关注的就是这部分文件。
请大家区分下:该工程中的各个文件分别属于上述哪一个部分?
2、uc/os-ii 任务的创建,使用函数ostaskcreate()
想让c/os-ⅱ管理用户的任务,用户必须要先建立任务。用户可以通过传递任务地址和其它参数到以下两个函数之一来建立任务:ostaskcreate() 或 ostaskcreateext()。
ostaskcreate()与c/os是向下兼容的,ostaskcreateext()是ostaskcreate()的扩展版本,提供了一些附加的功能。用两个函数中的任何一个都可以建立任务。我们常用的是ostaskcreate()函数。
任务可以在多任务调度开始前建立,也可以在其它任务的执行过程中被建立。在开始多任务调度(即调用osstart())前,用户必须建立至少一个任务。任务不能由中断服务程序(isr)来建立。
ostaskcreate()需要四个参数:task是任务**的指针,pdata是当任务开始执行时传递给任务的参数的指针,ptos是分配给任务的堆栈的栈顶指针prio是分配给任务的优先级。
1)请编写一个有3个任务的应用程序,每个任务均会在显示器上显示一个字符,让3个任务具有不同的等待时间,观察并解释该程序运行的时候任务被调度的情况。
2)当第一个任务运行了20次的时候,让第一个任务请求挂起第二个任务、当第一个任务运行到40次的时候,恢复第二个任务。
请编写程序解决上面两个问题,并且要给出对于现象的解释。
掌握任务删除操作所使用的方法。
删除任务,就是将该任务处于睡眠状态。 并不是说任务的**真的被删除了,只是任务的**不再被操作系统调用。也就是删除该任务的任务控制块即可。
通过调用ostaskdel( )就可以完成删除任务自身或除了空闲任务之外的其他任务的操作。
如果删除自身,则使用ostaskdel(os_prio_self);
如果删除其它任务,则使用ostaskdel(被删除任务的优先级);
任务不能由请求删除方直接删除,会导致被删除任务所使用的有些临时空间不能释放。所以请求删除任务方只是提出删除请求,被删除方收到请求后将自己删除。双方通信使用的是被删除方任务控制块的成员ostcbdelreq(双方都可以访问),访问该成员使用的函数为ostaskdelreq (prio)。
例程:请求删除方可以这么写:
while ( ostaskdelreq ( prio ) os_task_not_exist )
ostimedly(1);/延时等待,直到被删除任务已被删除。
解释:prio为被删除任务的优先级。请求删除方使用该函数,可以将ostcbdelreq成员的值置为:
os_task_del_req;该函数如果返回值为os_task_not_exist意味着该被删除的任务已经删除掉。
被删除方程序可以这么写:
if ( ostaskdelreq ( os_prio_self ) os_task_del_req )
释放资源和动态内存的**;
ostaskdel( os_prio_self );
嵌入式实时操作系统
嵌入式实时操作系统 embedded real time operation system,rtos 当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。1 多任务 2 有线...
Nucleus嵌入式实时操作系统
一 mentor graphics esd公司简介。二 nucleus操作系统的特点。三 源 操作系统的优势。四 nucleus操作系统开发环境的配置。五 nucleus的网络浏览器 webbrowse 介绍。六 nucleus操作系统的应用领域及在国内外的用户。七 nucleus操作系统的成功案例...
嵌入式实时操作系统复习
任务就绪组是 为了查找高级优先级的任务与正在运行任务的优先级进行比较,以确定是否进行切换。typedef struct os event int8u oseventtype事件控制块的类型 void oseventptr指向下一个ecb或消息队列的指针 int16u oseventcnt 信号量计数...