UCOSII操作系统实验教程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P241,运行结果见 P244图6.3 • 2. 程序运行后,输入9选择例子程序9 • 4.说明使用消息队列实现的功能,为什么 能实现这样的功能,都使用了哪些数据结 构。
• 3.查看代码,说明为什么得到这样的运行 结果 • 4.修改usercode.c中E2_task2函数,要求 其输出值增长速度只有E2_task1的1/2,修 改后重新编译运行 • 5.改变任务的优先级,让E2_task1的优先 级为6, E2_task2的优先级为5,查看运行 结果,说明输出的不同之处,说明原因
3.如果程序中有其他断点,去掉 4.在usercode.c中的 printf(“welcome to embeded system\n”);处设置断点。(设 置断点,在代码处按右键,insert breakpoint) 5.按F5以调试模式运行代码 6.如果有其他断点,去掉,再按F5 7.当到设定的断点处停下时,将VC窗口缩小,调整输出的窗 口使两个窗口同时显示在屏幕上 8.按F10单步执行,查看输出 9. 发现在延时代码循环中无法调试,在printf(“j=%d\n”,j++); 加断点,按F5
• 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P154,运行结果见 P159图4.14 • 2. 程序运行后,输入5选择例子程序5 • 3.重新编译运行,查看结果 • 4.说明使用互斥信号量实现的功能,为什 么能实现这样的功能,都使用了哪些数据 结构。 • 5.说明为什么解决了优先级反转的问题
• 5.自己设计一个使用时间标志组的例子, 编程实现并运行,记录结果。
补充,各个例子的运行结果展示 5
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P159-189 4.5事件标志组
实验12 事件标志组管理实验 • 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P184,运行结果见 P159图4.20 • 2. 程序运行后,输入6选择例子程序6 • 3.重新编译运行,查看结果 • 4.说明使用事件标志组实现的功能,为什 么能实现这样的功能,都使用了哪些数据 结构。
• 5.实现P190,习题7(在usercode.c中编写 三个函数,并修改usercode.h中的声明, 修改main.c,重新编译查看效果)
补充,各个例子的运行结果展示 6
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P191-210 5.1消息邮箱
实验13 消息邮箱管理实验 • 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P208,运行结果见 P210图5.7 • 2. 程序运行后,输入7选择例子程序7 • 3.重新编译运行,查看结果 • 4.说明使用消息邮箱实现的功能,为什么 能实现这样的功能,都使用了哪些数据结 构。
说明
• 各章例子都是通过将μC/OS移植到PC 中,在虚拟的平台下运行μC/OS来得到印 证。所有代码都包含在VC的一个工程中, 打开工程文件就可以看到结构清晰的源代 码。
实验1 跑第一个任务
• 本实验的目的是了解嵌入式实时操作系统μCOS 代码结构,将其跑起来得到直观的认识。 • 实验步骤 • 1.将包含全部实验代码的压缩文件解压缩 • 2.将VC6开发环境打开 • 3.打开ucosexperiment目录下的ucos_vc.dsw • 4.用全部编译(rebuild all)编译程序,运行程 序,根据窗口提示输出,获得感性认识! • 5.根据教材P246页图7.1及7.1.1和7.1.2的内容, 写出文件目录结构的说明,说明嵌入式实时操作 系统μCOS都由哪些部分组成
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P41-43任务控制块的初始化,P5154任务的创建
实验3
任务的创建
• 掌握任务创建的过程 • 步骤 • 1. 去掉前面的断点,找到main.c中 OSTaskCreate(FirstTask, 0, &TaskStk[5][TASK_STK_SIZE-1], 5);函数,设置 断点,并按F5调试运行,运行代码的时候输入 1,在运行到断点时,按F11追进函数内部,再按 F10单步运行,与书上51页进行比较。 • 2。画出该函数运行完成后的就绪表和就绪组,任 务控制块空闲链表和任务链表。
补充,各个例子的运行结果展示 2
下次实验的准备
• 预习《嵌入式实时操作系统μC/OS原理与 实践》P73-80任务的调度为下次试验做准 备
实验7
理解任务堆栈和任务切换
• 1.使用原始代码 • 2.查看在main.c,说明两个用户任务的堆 栈都是什么,堆栈的地址是怎么传递给任 务创建函数的。 • 3.在OS_Sched函数中设置断点。跟踪调 试,说明OS_Sched实现了哪些功能,画 出流程图 • 4.继续调试OS_TASK_SW,根据书章2.1 中对堆栈的描述,论述压栈和退栈的处理 过程。
补充,各个例子的运行结果展示 1
准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P24-40 2.1任务管理的重要数据结 构,为以后的实验做准备
实验2
调试模式跑第一个任务
• 本实验的目的在于学会使用VC的调试模式 运行和调试操作系统。 • 步骤 • 1.在上次实验的基础上不改动代码,打开工 程 • 2.在usercode.c中的 • printf(“wwenku.baidu.comlcome to embeded system\n”);处 设置断点。
• 3.记录所有过程,说明OSTaskCreate都做了哪些 工作,任务FirstTask的任务控制块实体是什么, 在创建结束时其任务控制块的内容又是什么。记 录下来。 • 4.试着自己编写一个带输出的简单的函数,然后 使用OSTaskCreate创建这个函数,修改 MAIN.c,在输入1的时候创建这个函数。自己编 写的函数保存在usercode.c中,并注意在 usercode.h中添加函数声明。修改完成后重新编 译执行。
• 5.实现P230,习题7(在usercode.c中编写 三个函数,并修改usercode.h中的声明, 修改main.c,重新编译查看效果)
补充,各个例子的运行结果展示 7
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P2111-229 5.2消息队列
实验14 消息队列管理实验 • 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P226,运行结果见 P229图5.12 • 2. 程序运行后,输入8选择例子程序8 • 3.重新编译运行,查看结果 • 4.说明使用消息队列实现的功能,为什么 能实现这样的功能,都使用了哪些数据结 构。
嵌入式实时操作系统 μC/OSII实验教程
实验安排
• • • • • • • • • • • • • • • 实验1 实验2 实验3 实验4 实验5 实验6 实验7 实验8 实验9 实验10 实验11 实验12 实验13 实验14 实验15 跑第一个任务 调试模式跑第一个任务 任务的创建 操作系统初始化 让任务阻塞式延时 两个任务交替运行 理解任务堆栈和任务切换 理解多任务的启动 任务的挂起和恢复 信号量管理实验 互斥信号量管理实验 事件标志组管理实验 消息邮箱管理实验 消息队列管理实验 内存管理实验
下次实验的准备
• 预习《嵌入式实时操作系统μC/OS原理与 实践》P83-84多任务的启动为下次试验做 准备
实验8
理解多任务的启动
• 1.使用原始代码 • 2.查看在main.c,在OSStart();处设置断点。 • 3.调试模式运行,跟踪进OSStart,然后单 步运行。参考P83-85分析代码。 • 5.画出OSStart流程图 • 4.说明OSStart的功能,说明多任务启动的 标志是什么
• 6.VC环境下,在工程上点鼠标右键,查看工程的 设计 • 7.打开main.c,编辑使#define Experiment 1,使用 REBUILD ALL 进行编译,找到可执行文件的输出 目录,记录下来 • 8.使用菜单或快捷按钮再次执行编译好的程序。查 看运行结果并记录,查看main.c及usercode.c,分 析main.c及usercode.c代码。 • 9.说明任务堆栈的定义位置,任务在什么时候被创 建,任务在什么时候获得运行。 • 10.自己修改代码,减少延时时间,或将每次加1 改为其他算法,查看效果!
补充,各个例子的运行结果展示 3
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P102-129 • 事件管理的重要数据结构,事件管理程 序,信号量管理
实验10 信号量管理实验
• 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P129,运行结果见 P133图4.9 • 打开原始工程运行代码,输入选项4继续 运行程序 • 2.运行查看结果 • 3.说明使用信号量实现的功能,为什么能 实现这样的功能,都使用了哪些数据结构。
• 2.修改代码,使用阻塞式延时,查看书上95 页3.2.3,修改延时代码
• 3.重新编译,运行。使用任务管理器查看系 统利用率。
• 4.记录实验过程,说明发生这种变化的原理。
• 下次实验前准备:继续看2.1,加深对操作 系统采用的重要数据结构的理解
实验6
两个任务交替运行
• 1.编译运行代码,输入选项2运行程序 • 2.运行查看结果
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P44-50操作系统的初始化
实验4
操作系统初始化
• 步骤 • 1. 找到操作系统初始化函数OSInit,在其中设置 断点,并按F5调试运行,观察OSInit执行的过 程,与书上44页2.3操作系统的初始化进行比较, 记录OSINIT都做了什么工作 • 2。画出OSINIT后的就绪表和就绪组,任务控制 块空闲链表和任务链表(参考书上2.1,2.2,2.3) • 3.记录所有过程,说明OSINIT之后系统的状况
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P95-97任务延时函数OSTimeDly
实验5
• • •
让任务阻塞式延时
掌握操作系统的初始化过程 步骤 1.不改动代码,输入参数1,全速运行,打开WINDOWS任务管理器,查看, 如图
注意
• • • • • • Os_cpu.c中,确定 void OSTaskIdleHook (void) { Sleep(1); } 要改成这样,否则空闲任务也在不同的运 行,看不到系统利用率的变化情况。加上 这一句,将空闲任务的系统利用率降低
• 5.实现P230,习题8(在usercode.c中编写 三个函数,并修改usercode.h中的声明, 修改main.c,重新编译查看效果)
补充,各个例子的运行结果展示 8
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P231-244 内存管理
实验15 内存管理实验
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P67-72任务的挂起和恢复
实验9
任务的挂起和恢复
• 1.编译运行代码,输入选项3继续运行程序 • 2.运行查看结果
• 3.查看代码,说明为什么得到这样的运行 结果 • 4.对任务代码进行修改,得到不同的结果 • 5.改变任务的优先级,查看运行结果,说 明输出的不同之处,说明原因
• 10.在观察窗口watch window输入j, 连续按 F5查看j的变化和屏幕的输出。 • 11.按SHIFT+F5或使用菜单结束调试,记录 • 12说明watch window的作用,尝试在watch window中输入操作系统的重要全局变量, P247表7.1,观察他们的值
下次实验的准备工作
• 4.实现P190,习题6(在usercode.c中编写 三个函数,并修改usercode.h中的声明, 修改main.c,重新编译查看效果)
补充,各个例子的运行结果展示 4
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P134-158 4.4互斥信号量
实验11 互斥信号量管理实验
• 3.查看代码,说明为什么得到这样的运行 结果 • 4.修改usercode.c中E2_task2函数,要求 其输出值增长速度只有E2_task1的1/2,修 改后重新编译运行 • 5.改变任务的优先级,让E2_task1的优先 级为6, E2_task2的优先级为5,查看运行 结果,说明输出的不同之处,说明原因
3.如果程序中有其他断点,去掉 4.在usercode.c中的 printf(“welcome to embeded system\n”);处设置断点。(设 置断点,在代码处按右键,insert breakpoint) 5.按F5以调试模式运行代码 6.如果有其他断点,去掉,再按F5 7.当到设定的断点处停下时,将VC窗口缩小,调整输出的窗 口使两个窗口同时显示在屏幕上 8.按F10单步执行,查看输出 9. 发现在延时代码循环中无法调试,在printf(“j=%d\n”,j++); 加断点,按F5
• 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P154,运行结果见 P159图4.14 • 2. 程序运行后,输入5选择例子程序5 • 3.重新编译运行,查看结果 • 4.说明使用互斥信号量实现的功能,为什 么能实现这样的功能,都使用了哪些数据 结构。 • 5.说明为什么解决了优先级反转的问题
• 5.自己设计一个使用时间标志组的例子, 编程实现并运行,记录结果。
补充,各个例子的运行结果展示 5
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P159-189 4.5事件标志组
实验12 事件标志组管理实验 • 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P184,运行结果见 P159图4.20 • 2. 程序运行后,输入6选择例子程序6 • 3.重新编译运行,查看结果 • 4.说明使用事件标志组实现的功能,为什 么能实现这样的功能,都使用了哪些数据 结构。
• 5.实现P190,习题7(在usercode.c中编写 三个函数,并修改usercode.h中的声明, 修改main.c,重新编译查看效果)
补充,各个例子的运行结果展示 6
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P191-210 5.1消息邮箱
实验13 消息邮箱管理实验 • 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P208,运行结果见 P210图5.7 • 2. 程序运行后,输入7选择例子程序7 • 3.重新编译运行,查看结果 • 4.说明使用消息邮箱实现的功能,为什么 能实现这样的功能,都使用了哪些数据结 构。
说明
• 各章例子都是通过将μC/OS移植到PC 中,在虚拟的平台下运行μC/OS来得到印 证。所有代码都包含在VC的一个工程中, 打开工程文件就可以看到结构清晰的源代 码。
实验1 跑第一个任务
• 本实验的目的是了解嵌入式实时操作系统μCOS 代码结构,将其跑起来得到直观的认识。 • 实验步骤 • 1.将包含全部实验代码的压缩文件解压缩 • 2.将VC6开发环境打开 • 3.打开ucosexperiment目录下的ucos_vc.dsw • 4.用全部编译(rebuild all)编译程序,运行程 序,根据窗口提示输出,获得感性认识! • 5.根据教材P246页图7.1及7.1.1和7.1.2的内容, 写出文件目录结构的说明,说明嵌入式实时操作 系统μCOS都由哪些部分组成
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P41-43任务控制块的初始化,P5154任务的创建
实验3
任务的创建
• 掌握任务创建的过程 • 步骤 • 1. 去掉前面的断点,找到main.c中 OSTaskCreate(FirstTask, 0, &TaskStk[5][TASK_STK_SIZE-1], 5);函数,设置 断点,并按F5调试运行,运行代码的时候输入 1,在运行到断点时,按F11追进函数内部,再按 F10单步运行,与书上51页进行比较。 • 2。画出该函数运行完成后的就绪表和就绪组,任 务控制块空闲链表和任务链表。
补充,各个例子的运行结果展示 2
下次实验的准备
• 预习《嵌入式实时操作系统μC/OS原理与 实践》P73-80任务的调度为下次试验做准 备
实验7
理解任务堆栈和任务切换
• 1.使用原始代码 • 2.查看在main.c,说明两个用户任务的堆 栈都是什么,堆栈的地址是怎么传递给任 务创建函数的。 • 3.在OS_Sched函数中设置断点。跟踪调 试,说明OS_Sched实现了哪些功能,画 出流程图 • 4.继续调试OS_TASK_SW,根据书章2.1 中对堆栈的描述,论述压栈和退栈的处理 过程。
补充,各个例子的运行结果展示 1
准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P24-40 2.1任务管理的重要数据结 构,为以后的实验做准备
实验2
调试模式跑第一个任务
• 本实验的目的在于学会使用VC的调试模式 运行和调试操作系统。 • 步骤 • 1.在上次实验的基础上不改动代码,打开工 程 • 2.在usercode.c中的 • printf(“wwenku.baidu.comlcome to embeded system\n”);处 设置断点。
• 3.记录所有过程,说明OSTaskCreate都做了哪些 工作,任务FirstTask的任务控制块实体是什么, 在创建结束时其任务控制块的内容又是什么。记 录下来。 • 4.试着自己编写一个带输出的简单的函数,然后 使用OSTaskCreate创建这个函数,修改 MAIN.c,在输入1的时候创建这个函数。自己编 写的函数保存在usercode.c中,并注意在 usercode.h中添加函数声明。修改完成后重新编 译执行。
• 5.实现P230,习题7(在usercode.c中编写 三个函数,并修改usercode.h中的声明, 修改main.c,重新编译查看效果)
补充,各个例子的运行结果展示 7
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P2111-229 5.2消息队列
实验14 消息队列管理实验 • 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P226,运行结果见 P229图5.12 • 2. 程序运行后,输入8选择例子程序8 • 3.重新编译运行,查看结果 • 4.说明使用消息队列实现的功能,为什么 能实现这样的功能,都使用了哪些数据结 构。
嵌入式实时操作系统 μC/OSII实验教程
实验安排
• • • • • • • • • • • • • • • 实验1 实验2 实验3 实验4 实验5 实验6 实验7 实验8 实验9 实验10 实验11 实验12 实验13 实验14 实验15 跑第一个任务 调试模式跑第一个任务 任务的创建 操作系统初始化 让任务阻塞式延时 两个任务交替运行 理解任务堆栈和任务切换 理解多任务的启动 任务的挂起和恢复 信号量管理实验 互斥信号量管理实验 事件标志组管理实验 消息邮箱管理实验 消息队列管理实验 内存管理实验
下次实验的准备
• 预习《嵌入式实时操作系统μC/OS原理与 实践》P83-84多任务的启动为下次试验做 准备
实验8
理解多任务的启动
• 1.使用原始代码 • 2.查看在main.c,在OSStart();处设置断点。 • 3.调试模式运行,跟踪进OSStart,然后单 步运行。参考P83-85分析代码。 • 5.画出OSStart流程图 • 4.说明OSStart的功能,说明多任务启动的 标志是什么
• 6.VC环境下,在工程上点鼠标右键,查看工程的 设计 • 7.打开main.c,编辑使#define Experiment 1,使用 REBUILD ALL 进行编译,找到可执行文件的输出 目录,记录下来 • 8.使用菜单或快捷按钮再次执行编译好的程序。查 看运行结果并记录,查看main.c及usercode.c,分 析main.c及usercode.c代码。 • 9.说明任务堆栈的定义位置,任务在什么时候被创 建,任务在什么时候获得运行。 • 10.自己修改代码,减少延时时间,或将每次加1 改为其他算法,查看效果!
补充,各个例子的运行结果展示 3
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P102-129 • 事件管理的重要数据结构,事件管理程 序,信号量管理
实验10 信号量管理实验
• 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P129,运行结果见 P133图4.9 • 打开原始工程运行代码,输入选项4继续 运行程序 • 2.运行查看结果 • 3.说明使用信号量实现的功能,为什么能 实现这样的功能,都使用了哪些数据结构。
• 2.修改代码,使用阻塞式延时,查看书上95 页3.2.3,修改延时代码
• 3.重新编译,运行。使用任务管理器查看系 统利用率。
• 4.记录实验过程,说明发生这种变化的原理。
• 下次实验前准备:继续看2.1,加深对操作 系统采用的重要数据结构的理解
实验6
两个任务交替运行
• 1.编译运行代码,输入选项2运行程序 • 2.运行查看结果
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P44-50操作系统的初始化
实验4
操作系统初始化
• 步骤 • 1. 找到操作系统初始化函数OSInit,在其中设置 断点,并按F5调试运行,观察OSInit执行的过 程,与书上44页2.3操作系统的初始化进行比较, 记录OSINIT都做了什么工作 • 2。画出OSINIT后的就绪表和就绪组,任务控制 块空闲链表和任务链表(参考书上2.1,2.2,2.3) • 3.记录所有过程,说明OSINIT之后系统的状况
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P95-97任务延时函数OSTimeDly
实验5
• • •
让任务阻塞式延时
掌握操作系统的初始化过程 步骤 1.不改动代码,输入参数1,全速运行,打开WINDOWS任务管理器,查看, 如图
注意
• • • • • • Os_cpu.c中,确定 void OSTaskIdleHook (void) { Sleep(1); } 要改成这样,否则空闲任务也在不同的运 行,看不到系统利用率的变化情况。加上 这一句,将空闲任务的系统利用率降低
• 5.实现P230,习题8(在usercode.c中编写 三个函数,并修改usercode.h中的声明, 修改main.c,重新编译查看效果)
补充,各个例子的运行结果展示 8
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P231-244 内存管理
实验15 内存管理实验
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P67-72任务的挂起和恢复
实验9
任务的挂起和恢复
• 1.编译运行代码,输入选项3继续运行程序 • 2.运行查看结果
• 3.查看代码,说明为什么得到这样的运行 结果 • 4.对任务代码进行修改,得到不同的结果 • 5.改变任务的优先级,查看运行结果,说 明输出的不同之处,说明原因
• 10.在观察窗口watch window输入j, 连续按 F5查看j的变化和屏幕的输出。 • 11.按SHIFT+F5或使用菜单结束调试,记录 • 12说明watch window的作用,尝试在watch window中输入操作系统的重要全局变量, P247表7.1,观察他们的值
下次实验的准备工作
• 4.实现P190,习题6(在usercode.c中编写 三个函数,并修改usercode.h中的声明, 修改main.c,重新编译查看效果)
补充,各个例子的运行结果展示 4
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P134-158 4.4互斥信号量
实验11 互斥信号量管理实验