《2022年实验报告——嵌入式实时操作系统实验 .pdf》由会员分享,可在线阅读,更多相关《2022年实验报告——嵌入式实时操作系统实验 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 专 业 实 验 报 告实验名称嵌入式实时操作系统实验实验时间2010-06-05到 2010-06-20学生姓名丁代荣学号20091213012 指导老师王韬实验进度安排:第一次实验2010-06-05(第 13 周日 ) 下午 3:00-6:00 分组一 (晚上 7:00-10:00 分组二 );实验内容为1.调试多任务创建程序理解多任务调度算法。2.任务间通信:调试提供的参考程序,改写为客户机服务器模型3.任务间同步:调试提供的参考程序,改写为单向同步,考虑同步丢失的现象,将二进制信号量换为计数式信号量观察程序执行结果。第二次实验2010-06-06(第 14 周六 ) 晚上 7:00
2、-10:00 分组一 (周日晚上7:00-10:00 分组二 );实验内容为1.多任务间互斥操作,理解互斥信号量的使用,以及优先级翻转现象及优先级继承算法。2.嵌入式系统的开发流程:基于ppc860(或者 s3c4510 实验板 )和 VxWorks 的嵌入式系统软件开发流程第三次实验2010-06-19(第 15 周周六)晚上7:00-10:00 分组一 (周日晚上7:00-10:00 分组二 );实验内容为1.中断服务程序及中断控制器初始例程设计:理解ISR 的设计约束,以及中断控制器的初始化,调试提供的参考实验例程2.定时器驱动程序设计:掌握看门狗定时器的使用方法,理解辅助时钟定时器的工
3、作原理,掌握驱动程序设计方法及应用程序中使用定时器的方法第四次实验2010-06-20(第 16 周周六)晚上7:00-10:00 分组一 (周日晚上7:00-10:00 分组二 );实验内容为:1.IO 设备驱动程序设计:2.嵌入式系统交叉编译-makefile 文件的编写与使用3.嵌入式系统的交叉调试-browser,windsh,debuger 工具使用第五次实验最后一次实验(评定成绩)2010-06-20(第 16 周周日)晚上7:00-10:00 分组二一检查前几次实验,重点检查以下实验1.嵌入式系统开发流程2.嵌入式系统交叉编译makefile 文件编写综合实验课题二综合实验题目(
4、任选一个)1.编写程序,实现以下功能系统包含三个任务,一个初始化任务(tInitTask) , 一个生产者任务(tSendTask),一个消费者任务(tReceiveTask); 要求 tSendTaskt 与 ReceiveTask 之间使用消息队列传递数据;要求 tInitTask 能设置 tSendTask和 tReceiveTask 的优先级,要求 tInitTask 能设置传递消息的数量和消息队列的大小。2.编写程序,实现以下功能要求系统具有两个任务,两个任务之间使用二进制信号和计数式信号量实现同步当在 windSh 下执行 semTest b 使用二进制信号量实现任务之间的同步执行
5、 semTest c 使用计数式信号量实现任务之间的同步3.编写程序,实现以下功能使用二进制信号量实现辅助时钟定时器服务程序与任务之间的同步;当按下 R2 按钮 (irq5 中断按钮 )时,停止定时器工作。4.编写程序,实现以下功能精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 5 页2 当执行 timerTestStart w 时,使用看门狗定时器实现信息的周期打印当执行 timerTestStart a 时,使用辅助时钟实现信息的周期打印当执行 timerTestStop w 时,停止看门定时器当执行 timerTestStop a
6、 时,停止辅助时钟5.编写程序,实现以下功能系统有两个任务tTaskA,tTaskB;当 tTaskA 执行时点亮发光二极管LED3 ,当 tTaskB 执行时点亮发光二极管LED4 ;当按下 R2,熄灭 LED3 与 LED4,并删除掉tTaskA 与 tTaskB 6.编写程序,实现以下功能系统有两个任务,tClientTask 和 tServerTask;它们之间使用消息队列实现任务间的通信,tClientTask 发送消息 (函数名, 如 add 和参数 ),tServerTask 接收消息,在服务器任务上执行函数(如实现加法运算),将执行的结果通过另一个消息队列返回给tClientT
7、ask任务, tClientTask 打印结果。7.编写程序,实现以下功能编写辅助时钟驱动程序(1 分钟中断一次),每隔一分钟点亮一次发光二极管,点量发光二极管要求用字符型IO 设备驱动程序实现(如使用 ioctl 函数,或者write 函数 )。8.编写程序实现以下功能:系统有两个任务,分别为tTaskA 和 tTaskB:当 tTaskA 执行时,发光二极管LED3 点亮 5 秒,当 tTaskB 执行时,发光二极管LED4 点亮 5 秒;点亮发光二极管均使用设备驱动程序(如使用 ioctl 函数,或者write 函数),时间 5s 使用 taskDelay 函数实现,要求独占访问发光二极
8、管(使用互斥信号量实现)。9.编写程序实现以下功能:要求系统中有三个任务,tTaskA 和 tTaskB,以及tTaskC,要求实现独立型同步或关联型同步;(可使用二进制信号量或者事件机制) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 5 页3 实验报告主题部分一实验目的1.熟悉任务创建使用与删除,2.掌握中断的使用,理解中断服务程序,中断向量等概念,3.掌握 led 的初始化和点亮方法。二实验内容选择综合实验5:编写程序,实现以下功能系统有两个任务tTaskA,tTaskB;当 tTaskA 执行时点亮发光二极管LED3 ,当 t
9、TaskB 执行时点亮发光二极管LED4 ;当按下 R2,熄灭 LED3 与 LED4,并删除掉tTaskA 与 tTaskB 三实验步骤1.连接好开发板,创建bootable 工程,生成vxWorks 映像文件,2.创建 downloadable 工程,3.添加源文件,编译、下载并调试应用程序,4.启动 WindShell, 在-提示符下,输入应用程序中的函数,观察开发板上LED 的点亮情况,按下R2 键后观察中断服务程序执行的结果。四实验源程序/*头文件 */ #include vxWorks.h #include stdio.h #include taskLib.h #include v
10、xWorks.h #include intLib.h #include logLib.h #include stdlib.h #include iv.h #include drv/multi/ppc860siu.h #include drv/intrctl/ppc860Intr.h #include kernelLib.h /*全局变量 */ int taskIdA; int taskIdB; /*函数声明 */ void taskcreat(void); void taskOne(void); void taskTwo(void); void ledInit(void); void Test
11、Isr(void); /*创建任务TaskA TaskB*/ void taskcreat(void) printf(nnnnn); /*Spawn the two tasks*/ 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 5 页4 if(taskIdA=taskSpawn(taskA,100,0 x100,20000,(FUNCPTR)taskOne,0,0,0,0,0,0,0,0,0,0)=ERROR) printf(taskSpawn taskA failedn); if(taskIdB=taskSpawn(taskB,10
12、0,0 x100,20000,(FUNCPTR)taskTwo,0,0,0,0,0,0,0,0,0,0)=ERROR) printf(taskSpawn taskB failedn); /*Taskone*/ void taskOne(void) while(1) *PBDAT(vxImmrGet() &= 0 xfffffcff; *PBDAT(vxImmrGet() |= 0 x00000200; /*Tasktwo*/ void taskTwo(void) while(1) *PBDA T(vxImmrGet() &= 0 xfffffcff; *PBDA T(vxImmrGet() |
13、= 0 x00000100; /*LED 初始化LedInit*/ void ledInit(void) *PBODR(vxImmrGet() &= 0 xfcff; *PBPAR(vxImmrGet() &= 0 xfffffcff; *PBDIR(vxImmrGet() |= 0 x00000300; /*中断服务程序*/ void TestIsr(void) *SIPEND(vxImmrGet() |=0 x00200000; /*?*/ taskSuspend(taskIdA); taskSuspend(taskIdB); taskDelete(taskIdA); taskDelete
14、(taskIdB); *PBDA T(vxImmrGet() &= 0 xfffffcff; logMsg(Interrupt is OK n,0,0,0,0,0,0); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 5 页5 /*主函数 Vx_main*/ void vx_main(void) printf(this is ISR test programn); KernelTimeSlice(5*sysClkRatGet(); ledInit(); taskcreat(); *SIEL(vxImmrGet() |=0 x00200
15、000; intConnect(IV_IRQ5, (VOIDFUNCPTR)TestIsr, 0); intEnable(IV_IRQ5); 五实验结果在 Winshell 下输入 -vx_main 后开发板上的LED3 、LED4 交替点亮,每次一个LED 点亮 5 秒,当按下R2 后两个 LED 熄灭。六分析及总结1、交替点亮发光二极管我们采用的相同优先级任务的轮循执行机制,具体操作可设置TaskA 和 TaskB 的优先级相同,在此都设置为100,在主函数里面我们加入KernelTimeSlice(5*sysClkRatGet();设置时间片为5 秒2、实验过程中,修改过三处才运行出结果,第一、把任务删除时,先挂起再删除;第二、初始化LED,初始化可写成一个函数在主函数里调用即可;第三、时间片设置,这个不能忘,否则只有一个任务执行。3、通过实验使我对嵌入式的学习提高到了实践的高度,相信这一定对后续的学习研究有很大的促进作用。教师签名:年月日考查成绩 (5 级计分 ) 学分0.5 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 5 页