ucOS-II实验说明 下载本文

例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( ) ,然后运行并查看运行结果。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例3-2 设计一个有3个任务的应用程序Test。这三个任务分别是:MyTask, YouTask和InterTask。其中任务InterTask是在时钟节拍中断服务程序中用钩子函数OSTimeTickHook( )中断了10 000次时使用一个信号变量InterKey激活的。运行并分析由中断服务程序激活任务的工作特点。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例3-3 本实验应用程序的任务使用了延时函数OSTimeDly( )进行延时。在任务MyTask中

还调用了函数OSTimeDlyResume(prio)取消了任务YouTask的延时。为了观察任务YouTask的延时时间变化,在钩子函数OSTimeTickHook( )输出了任务YouTask在延时时间到时的时钟节拍数。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例3-4 设计一个应用程序,在任务中调用函数OSTimeGet( )获得并显示系统的时钟节拍数OSTime。当任务运行10s时,调用函数OSTimeSet( )将OSTime设置为10。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例4-1 本实验是模拟两个任务使用信号量进行通信实现对同一共享资源的访问。在实验的应用程序中有两个用户任务:MyTask和YouTask。这两个任务都要访问同一个共享资源s,但YouTask访问s需要的时间更长一些(本例中使用了一个循环来模拟访问时间)。而MyTask访问s的时间要短一些,这样就不可避免地出现了在任务YouTask访问s期间,任务MyTask也来访问s,从而出现了干扰。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例4-2 本实验是模拟两个任务通过一个全局变量来解决冲突问题。在应用程序中定义了一个全局变量ac_key来作为信号量,并根据该信号量的状态来访问共享资源s,并解决冲突问题。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例4-3 本实验是模拟利用简单消息邮箱进行通信的例子。例程中有两个任务:MyTask和YouTask。由于任务YouTask要向任务MyTask发送消息,因此定义了一个全局的指针变量msg_p作为邮箱来传递消息的指针。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例4-4 实验一个程序使用事件控制块描述信号量。其中一个函数Fun( )和两个任务(任务MyTask( )与任务YouTask( ))。应用程序中的两个任务都可以调用函数Fun( ),但不能同时调用。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例4-5 实验一个应用程序,这个应用程序中有一个函数Fun( ),如果想使任务MyTask( )必须经过任务YouTask( )允许才能调用这个函数一次,试写出这两个任务的示意性代码。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例4-6 任务优先级反转的实验。本示例程序中是一个使用信号量实现独占式访问共享资源而出现了任务优先级发转的应用程序示例。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例4-7 在例4-6的应用程序中,把使用的信号量改成互斥性信号量,然后运行该程序并观察其运行结果。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例4-8 设计一个应用程序,该程序有两个任务MyTask( )与YouTask( )。在任务MyTask中用一个变量Times记录任务MyTask的运行次数,并将其作为消息用邮箱Str_Box发给任务YouTask且由任务YouTask显示出来。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例4-9 实验一个应用消息队列进行通信的应用程序,运行该程序并观察其运行结果。

例5-1 设计一个有三个任务的应用程序,这三个任务分别叫做MyTask、YouTask和HerTask。要求用一个信号量来控制学习MyTask的运行,即任务YouTask发送一个信号,任务HerTask发送一个信号,当这两个任务都发了信号之后,MyTask才能运行。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例5-2 把例5-1中任务MyTask调用的请求信号量集函数OSFlagPen()改成无等待请求函数OSFlagAccept( ),运行该程序后,观察运行结果并与例5-2应用程序的运行结果进行比较。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例5-3 修改例5-2应用程序,使任务MyTask可以根据信号的不同状态实现不同的功能。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例6-1 建立一个含有50个内存块并且每块的长度为64字节的内存分区。学习实验代码,分析实现过程,观测实验结果,并写出实验报告。

例6-2 在例6-1的基础上写成任务MyTask请求一个内存块的代码。学习实验代码,分析实现过程,观测实验结果,并写出实验报告