(HGSM)UCOS-II实验报告截图
- 格式:doc
- 大小:639.50 KB
- 文档页数:7
实验2任务就绪表
1实验目的
掌握任务就绪表及任务就绪组的结构及二者之间的关系,系统需要一个就绪登记表,它登记系统中所有处于就绪状态的任务,这个就绪表就是一个位图,系统中的每个任务都在这个位图中占据一个二进制位,该位的状态(1或0)就表示任务是否处于就绪状态。
为了便于对就绪表的查找,系统又定义了一个数据类型为INT8U的变量OSRdyGrp,并使该变量的每一位都对应于OSRdyTbl[]的一个任务组,如果任务组中有就绪任务,则在变量OSRdyGrp里把该任务组所对应的位置1。
理解基于优先级调度的嵌入式实时操作系统的实现策略。
2实验内容
变量定义如下:
INT8U OSRdyGrp=0;
INT8U OSRdyTbl[8]={0};
INT8U OSMapTbl[8]={1,2,4,8,16,32,64,128};
INT8U OSUnMapTbl[256]={0};
INT8U x,y,OSPrioHighRdy,prio;
(1)编程对OSUnMapTbl数组进行初始化;
(2)输入多个任务的优先级prio,修改OSRdyGrp、OSRdyTbl的值并输出;
(3)根据OSRdyGrp、OSRdyTbl的值,求最高优先级任务的优先级OSPrioHighRdy并输出;
3实验代码(要求有注释)
4实验结果(截图)
5心得体会(不少于200字)
1。
例2-6 设计一个只有一个任务MyTask的应用程序,当程序运行后,任务MyTask的工作就是每秒在显示器上面显示一个字符“M”。
学习实验代码,分析实现过程,观测实验结果,并写出实验报告。
例2-7 在例2-6应用程序的任务MyTask中再创建一个任务YouTask,当程序运行后,任务MyTask的工作在显示器上面显示一个字符“M”;而任务YouTask则是在显示器上显示字符“Y”。
学习实验代码,分析实现过程,观测实验结果,并写出实验报告。
例2-8 修改例2-7应用程序的任务YouTask。
要求任务YouTask运行20次后,挂起任务MyTask;任务YouTask运行40次后,恢复任务MyTask。
学习实验代码,分析实现过程,观测实验结果,并写出实验报告。
例2-9 改造例2-7的任务MyTask,当任务MyTask运行10次时,用函数OSSchedLock( )对调度器进行加锁;而当任务MyTask运行到第80次时,再用函数OSSchedUnlock( )对调度器进行解锁,并运行该程序。
学习实验代码,分析实现过程,观测实验结果,并写出实验报告。
例2-10 修改例2-7的应用程序,使任务MyTask能删除任务YouTask。
学习实验代码,分析实现过程,观测实验结果,并写出实验报告。
例2-11 建立一个起始任务TaskStart,由它再建立4个任务Task1、Task2、Task3和TaskClk 来完成如下任务:●由Task2和Task3各自来完成一个动画显示任务:在屏幕上依次输出字符“|”、“\”、“-”、“/”,而产生一个向左转动和一个向右的动画标志;●由TaskClk来获取系统时间并显示;●由Task1来初始化屏幕,创建其他4个任务和检查所有5个任务的任务堆栈使用情况并显示出来。
学习实验代码,分析实现过程,观测实验结果,并写出实验报告。
例3-1 在例2-6应用程序的基础上,在OS_CPU_C文件中按如下代码定义函数OSTimeTickHook( ) ,然后运行并查看运行结果。
北航ARM9实验报告:实验3uCOS-II实验北航 ARM9 实验报告:实验 3uCOSII 实验一、实验目的本次实验的主要目的是深入了解和掌握 uCOSII 实时操作系统在ARM9 平台上的移植和应用。
通过实际操作,熟悉 uCOSII 的任务管理、内存管理、中断处理等核心机制,提高对实时操作系统的理解和应用能力,为后续的嵌入式系统开发打下坚实的基础。
二、实验环境1、硬件环境:ARM9 开发板、PC 机。
2、软件环境:Keil MDK 集成开发环境、uCOSII 源代码。
三、实验原理uCOSII 是一个可裁剪、可剥夺型的多任务实时内核,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。
其基本原理包括任务管理、任务调度、时间管理、内存管理和中断管理等。
任务管理:uCOSII 中的任务是一个独立的执行流,每个任务都有自己的堆栈空间和任务控制块(TCB)。
任务可以处于就绪、运行、等待、挂起等状态。
任务调度:采用基于优先级的抢占式调度算法,始终让优先级最高的就绪任务运行。
时间管理:通过系统时钟节拍来实现任务的延时和定时功能。
内存管理:提供了简单的内存分区管理和内存块管理机制。
中断管理:支持中断嵌套,在中断服务程序中可以进行任务切换。
四、实验步骤1、建立工程在 Keil MDK 中创建一个新的工程,选择对应的 ARM9 芯片型号,并配置相关的编译选项。
2、导入 uCOSII 源代码将 uCOSII 的源代码导入到工程中,并对相关的文件进行配置,如设置任务堆栈大小、系统时钟节拍频率等。
3、编写任务函数根据实验要求,编写多个任务函数,每个任务实现不同的功能。
4、创建任务在主函数中使用 uCOSII 提供的 API 函数创建任务,并设置任务的优先级。
5、启动操作系统调用 uCOSII 的启动函数,使操作系统开始运行,进行任务调度。
6、调试与测试通过单步调试、查看变量值和输出信息等方式,对系统的运行情况进行调试和测试,确保任务的执行符合预期。
第五十九章UCOSII实验2-信号量和邮箱上一章,我们学习了如何使用UCOSII,学习了UCOSII的任务调度,但是并没有用到任务间的同步与通信,本章我们将学习两个最基本的任务间通讯方式:信号量和邮箱。
本章分为如下几个部分:59.1 UCOSII信号量和邮箱简介59.2 硬件设计59.3 软件设计59.4 下载验证59.1 UCOSII信号量和邮箱简介系统中的多个任务在运行时,经常需要互相无冲突地访问同一个共享资源,或者需要互相支持和依赖,甚至有时还要互相加以必要的限制和制约,才保证任务的顺利运行。
因此,操作系统必须具有对任务的运行进行协调的能力,从而使任务之间可以无冲突、流畅地同步运行,而不致导致灾难性的后果。
例如,任务A和任务B共享一台打印机,如果系统已经把打印机分配给了任务A,则任务B因不能获得打印机的使用权而应该处于等待状态,只有当任务A把打印机释放后,系统才能唤醒任务B使其获得打印机的使用权。
如果这两个任务不这样做,那么会造成极大的混乱。
任务间的同步依赖于任务间的通信。
在UCOSII中,是使用信号量、邮箱(消息邮箱)和消息队列这些被称作事件的中间环节来实现任务之间的通信的。
本章,我们仅介绍信号量和邮箱,消息队列将会在下一章介绍。
事件两个任务通过事件进行通讯的示意图如图59.1.1所示:图59.1.1 两个任务使用事件进行通信的示意图在图59.1.1中任务1是发信方,任务2是收信方。
任务1负责把信息发送到事件上,这项操作叫做发送事件。
任务2通过读取事件操作对事件进行查询:如果有信息则读取,否则等待。
读事件操作叫做请求事件。
为了把描述事件的数据结构统一起来,UCOSII使用叫做事件控制块(ECB)的数据结构来描述诸如信号量、邮箱(消息邮箱)和消息队列这些事件。
事件控制块中包含包括等待任务表在内的所有有关事件的数据,事件控制块结构体定义如下:typedef struct{INT8U OSEventType; //事件的类型INT16U OSEventCnt; //信号量计数器void *OSEventPtr; //消息或消息队列的指针INT8U OSEventGrp; //等待事件的任务组INT8U OSEventTbl[OS_EVENT_TBL_SIZE];//任务等待表#if OS_EVENT_NAME_EN > 0uINT8U *OSEventName; //事件名#endif} OS_EVENT;信号量信号量是一类事件。
嵌入式实时操作系统实验报告1实验名称:uC/OS-II任务间通讯和同步实验姓名:班级:信科10-4班学号:uC/OS-II任务间通讯和同步实验一、实验目的1、掌握uC/OS-II操作系统下使用信号量解决任务之间的同步问题;2、掌握uC/OS-II操作系统下任务间通讯的方法。
二、实验内容1、使用信号量实现任务间同步(Eg2工程)2、使用邮箱实现任务之间的通讯(Eg3工程)三、基础知识uC/OS-II任务之间的通讯与同步方式1、利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来关闭中断和打开中断2、利用函数OSSchedLock()和OSSchekUnlock()对µC/OS-II中的任务调度函数上锁和开锁3、信号量4、邮箱5、队列uC/OS-II中使用信号量进行任务之间同步1、通过调用OSSemCreate()建立信号量2、通过调用OSSemPost()函数发送一个信号量3、通过调用OSSemPend()函数等待一个信号量OSSemCreate1、Sem1 = OSSemCreate(0);2、参数为信号量的初始计数值赋值。
该初始值为0到65,535之间的一个数。
3、如果信号量是用来表示一个或者多个事件的发生,那么该信号量的初始值应设为0。
4、如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为1(例如,把它当作二值信号量使用)。
5、如果该信号量是用来表示允许任务访问n个相同的资源,那么该初始值显然应该是n,并把该信号量作为一个可计数的信号量使用。
OSSemPost和OSSemPend1、如果信号量当前是可用的(信号量的计数值大于0),将信号量的计数值减1,然后函数将“无错”错误代码返回给它的调用函数。
如果信号量的计数值为0,而OSSemPend()函数又不是由中断服务子程序调用的,则调用OSSemPend()函数的任务要进入睡眠状态,等待另一个任务(或者中断服务子程序)发出该信号量。
班级学号姓名实验日期预备实验嵌入式开发环境的建立实验一、实验目的1.掌握嵌入式软件开发环境的建立过程;2.初步掌握嵌入式程序的编译和调试过程。
二、实验内容建立嵌入式开发环境;编译和调试嵌入式程序。
三、实验原理、程序结构实验设计了 Task0 、Task1 两个任务:任务 Task0 不断地挂起自己,再被任务 Task1 解挂,两个任务不断地切换执行。
(1)系统经历一系列的初始化过程后进入 boot_card() 函数,在其中调用 ucBsp_init() 进行板级初始化后,调用 main() 函数;(2)main() 函数调用 OSInit() 函数对 uC/OS-II 内核进行初始化,调用 OSTaskCreate 创建起始任务 TaskStart ;(3)main() 函数调用函数 OSStart() 启动 uC/OS-II 内核的运行,开始多任务的调度,执行当前优先级最高的就绪任务 TaskStart ;(4)TaskStart 完成如下工作:a、安装时钟中断并初始化时钟,创建 2 个应用任务;b、挂起自己(不再被其它任务唤醒),系统切换到当前优先级最高的就绪任务Task0 。
四、实验步骤及操作过程1.安装集成开发环境 LambdaEDU集成开发环境 LambdaEDU 的安装文件夹为 LambdaEDU ,其中有一个名为“Setup.exe ”的文件,直接双击该文件便可启动安装过程。
具体的安装指导请看“LambdaEDU 安装手安装手册册 .doc ”文件。
当 LambdaEDU 安装完毕之后,我们看到的是一个空的界面,现在就开始一步一步地将我们的实验项目建立并运行起来。
2.建立项目为了我们的实验运行起来,需要建立 1 个项目基于 x86 虚拟机的标准应用项目。
通过点击“文件”、“新建”、“项目”开始根据向导创建一个项目。
在随后出现的对话框中选择“Tool/ 标准应用项目”,点击下一步,开始创建一个标准的可执行的应用程序项目。
嵌入式实时操作系统实验报告多任务的创建及运行系别计算机与电子系专业班级电子0901班学生姓名高傲指导教师黄向宇提交日期 2012 年 4 月 1 日一、实验目的1.熟悉并掌握基于uC/OS-II的开发工具、工程管理工具2.了解uC/OS-II的文件结构、文件之间的依赖关系。
3.掌握创建多任务的方法及对任务进行相关操作的技巧。
二、实验内容1.建立并熟悉Borland C 编译及调试环境2.使用课本配套光盘中的例程运行并修改,观察多任务的运行状态,尝试对其中的任务进行挂起并恢复、删除及查询等操作,观察运行结果.3.完成课后练习题,P92页13-17题,至少完成其中任意两题。
三、实验原理1.编译环境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的集成开发环境内,并且可以通过一个简单的主屏幕使用这些功能。
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile 就像一个Shell脚本一样,其中也可以执行操作系统的命令。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux 下GNU的make。
实验1《任务的创建、删除、挂起、恢复》实验学时: 2 实验地点:二综x203 实验日期:2013/12/13一、实验目的1.实验环境的建立2.任务的接口函数的应用二、实验内容1.设计一个只有一个任务Task1,当程序运行后任务的工作就是每秒在显示器上显示一个字符“M”。
2.在任务Task1中在创建一个任务Task2 。
当程序运行后,任务Task1的工作在显示器上显示一个字符“M”;Task2 则是在显示器上显示字符“Y”。
3. 要求任务Task2运行20次后,挂起任务Task1;任务Task2运行40次后,恢复任务Task1。
4. 当任务Task1运行5次时,用函数OSSchedLock()对调度器进行加锁;而当任务Task1运行到第10次时,再用函数OSSchedUnlock()对调度器进行解锁,并运行该程序。
5. 使任务Task1能删除任务Task2。
三、实验方法包括实验方法、原理、技术、方案等。
四、实验步骤1.将BC45文件夹拷贝到C分区根目录下。
2.将software文件夹拷贝到任意分区根目录下。
3. 分别完成实验1、2、3、4、5五、实验结果1. DOS窗口每秒显示一个字符“M”。
每行显示10个“M”字符,行与行的间隔是一行。
按ESC键程序退出2. DOS窗口交替显示字符"M"和“Y”,每隔一秒显示一次。
每行显示10个字符,行与行之间的间隔是一行。
按ESC键程序退出3.DOS窗口开始交替显示字符"M"和“Y”,显示20次以后,Task1挂起,只显示“Y”,当Task2运行40次以后,Task1恢复,然后开始Task1,Task2交替运行。
4.DOS窗口开始交题显示字符"M"和“Y”,显示5次以后,Task1将任务调度器上锁,此时只有“M”打印,当Task1运行10次后,Task1,Task2开始交替运行。
5.DOS窗口开始交替显示字符“M”和“Y”,显示10次后,只显示“Y”六、实验结论对实验数据和结果进行分析描述,给出实验取得的成果和结论。