嵌入式操作实验报告.doc

上传人:bao****ty 文档编号:132297136 上传时间:2020-05-14 格式:DOC 页数:21 大小:465.50KB
返回 下载 相关 举报
嵌入式操作实验报告.doc_第1页
第1页 / 共21页
嵌入式操作实验报告.doc_第2页
第2页 / 共21页
嵌入式操作实验报告.doc_第3页
第3页 / 共21页
嵌入式操作实验报告.doc_第4页
第4页 / 共21页
嵌入式操作实验报告.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《嵌入式操作实验报告.doc》由会员分享,可在线阅读,更多相关《嵌入式操作实验报告.doc(21页珍藏版)》请在金锄头文库上搜索。

1、嵌入式操作系统实验报告系别: 三系 班级: 12电子(1) 学号:20120310145姓名: 吴 洁 2014.12实验一 嵌入式开发环境的建立一、实验目的1.掌握嵌入式软件开发环境的建立过程;2.初步掌握嵌入式程序的编译和调试过程。二、实验步骤1. 安装集成开发环境LambdaEDU集成开发环境LambdaEDU 的安装文件夹为 LambdaEDU ,其中有一个名为“Setup.exe”的文件,直接双击该文件便可启动安装过程。具体的安装指导请看“LambdaEDU 安装手册.doc”文件。当LambdaEDU 安装完毕之后,我们看到的是一个空的界面,现在就开始一步一步地将我们的实验项目建立

2、并运行起来。2. 建立项目为了我们的实验运行起来,需要建立1 个项目基于x86 虚拟机的标准应用项目。通过点击“文件”、“新建”、“项目”开始根据向导创建一个项目。在随后出现的对话框中选择“Tool/标准应用项目”,点击下一步,开始创建一个标准的可执行的应用程序项目。在随后出现的对话框中填入项目名称“wj1”。点击“下一步”。选择“pc386 uC/OS-II 应用(x86)”作为该项目的应用框架。点击“下一步”。选择“pc386_elf_tra_debug”作为该项目的基本配置。点击“完成”。新创建的项目“wj1”将会被添加到项目列表。src 文件夹下保存了该项目中包含的源文件。ucos2

3、文件夹中包含了移植到x86 虚拟机的全部代码。init.c 文件是基于ucos2和本虚拟机的一个应用程序。在进行ucos2 内核实验中,只需要替换init.c 文件,即可。文件名不限,但是文件名中最好不要使用英文符号和数字以外的其他字符。3. 构建项目第一次构建本项目,在此项目上点击右键,选择“重建BSP 及项目”。即可开始构建。之后弹出的对话框显示了构建的进度。可以点击“在后台运行”,以隐藏该对话框在构建的同时,在右下角的“构建信息”视图输出构建过程中的详细信息。注:“重新构建”将本项目中的全部源代码进行一次完全的编译和连接,花费时间较多。“构建项目”则仅仅将新修改过的源代码进行编译和连接,

4、花费时间最少。“重建BSP 及项目”,不但要完成“重新构建”的全部工作,另外还要编译与该项目有关的的LambdaEDU中内置的部分代码,花费时间最多。但是在项目刚建立后,第一次构建时需要选择“重建BSP 及项目”。以后的构建中选择“重新构建”或“构建项目”即可。另外,在替换了源代码中的文件后,需要选择“重新构建”来完成该项目的构建。4. 配置虚拟机和目标机代理(1) 制作X86启动盘在LambdaEDU 中依次点击“工具”、“Bochs”、“制作虚拟机启动映象”,对启动盘进行一些参数设置后(如下图所示),系统将自动为你生成一个PC 虚拟机的启动盘映像。注意:在设置本IP 地址时,要求该IP 地

5、址与本计算机在同一个子网中,同时要求该IP地址没有被网络上其他计算机使用。(2) 配置虚拟机启动盘制作完成后,选择“虚拟机配置虚拟机”菜单,系统弹出如下对话框:(3) 创建目标机代理配置好虚拟机后,创建目标机代理:点击LambdaEDU 左下方窗口中绿色的十字符号,在弹出的窗口中选择“基于TA 的连接方式”,并点击“下一步”。在弹出的“新目标机连接配置中”的这些参数,应该与之前制作启动盘时设置的参数一致。(4) 调试应用启动虚拟机。虚拟机启动后的画面如下(其中显示的IP 地址创建虚拟机启动盘时填入的IP 地址)中设置的IP 地址):在“目标机管理”窗口中启动目标机代理:选中之前创建的目标机代理

6、项,并点击绿色的按钮:如果计算机与目标机建立连接成功,则原先绿色的按钮会变灰,其旁边红色的按钮会被点亮。在成功完成构建的项目wj1 中的“pc386_elf_tra_debug”上点击鼠标右键,在弹出的菜单中选择“调试”,启动调试器调试生成的程序。第一次进行调试/运行,需要选择目标机,如下图,选择“Default”,点击“确定”,开始向目标机(虚拟机)下载应用程序。调试的界面如下:点击绿色的按钮,全速运行。注意:全速运行后,程序不能够被暂停和停止。三、实验过程中遇到的问题及体会问题:重新构建的时候会出现错误,无法构建完成;Ip地址不正确导致目标机连接不上。体会:学习了一新软件,了解了lambd

7、aedu环境的创建和应用,遇到问题时同学们积极帮忙解决,老师也耐心的讲解,最后得出运行的结果。实验二 任务的基本管理一、 实验目的1. 理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;2. 掌握uC/OS-II 中任务管理的基本方法(创建、启动、挂起、解挂任务);3. 熟练使用uC/OS-II 任务管理的基本系统调用。二、实验原理及程序结构1. 实验设计为了展现任务的各种基本状态及其变迁过程,本实验设计了Task0、Task1 两个任务:任务Task0 不断地挂起自己,再被任务Task1 解挂,两个任务不断地切换执行。通过本实验,读者可以清晰地了解到任务在各个时刻的状态以及状态变迁

8、的原因。2. 运行流程(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、挂起自己(不再被其它任务唤醒),系统切换到当前优先级

9、最高的就绪任务Task0。之后整个系统的运行流程如下:t1 时刻,Task0 开始执行,它运行到t2 时刻挂起自己;t2 时刻,系统调度处于就绪状态的优先级最高任务Task1 执行,它在t3 时刻唤醒Task0,后者由于优先级较高而抢占CPU;Task0 执行到t4 时刻又挂起自己,内核调度Task1 执行;Task1 运行至t5 时刻再度唤醒Task0;3. C/OS-中的任务描述一个任务通常是一个无限的循环 ,由于任务的执行是由操作系统内核调度的,因此任务是绝不会返回的,其返回参数必须定义成void。在C/OS-中,当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU

10、使用权就会被抢占,高优先级任务会立刻得到CPU 的控制权(在系统允许调度和任务切换的前提下)。C/OS-可以管理多达64 个任务,但目前版本的C/OS-有两个任务已经被系统占用了(即空闲任务和统计任务)。必须给每个任务赋以不同的优先级,任务的优先级号就是任务编号(ID),优先级可以从0 到OS_LOWEST_PR10-2。优先级号越低,任务的优先级越高。C/OS-总是运行进入就绪态的优先级最高的任务。4. 源程序说明(1) TaskStart任务TaskStart 任务负责安装操作系统的时钟中断服务例程、初始化操作系统时钟,并创建所有的应用任务:UCOS_CPU_INIT(); /* Inst

11、all uC/OS-IIs clock tick ISR */UCOS_TIMER_START(); /*Timer 初始化*/TaskStartCreateTasks(); /* Create all the application tasks */OSTaskSuspend(OS_PRIO_SELF);具体负责应用任务创建的TaskStartCreateTasks 函数代码如下,它创建了两个应用任务Task0 和Task1:void TaskStartCreateTasks (void)INT8U i;for (i = 0; i N_TASKS; i+) / Create tasksTas

12、kDatai = i; / Each task will display its own informationOSTaskCreate(Task0, (void *)&TaskData0, &TaskStk0TASK_STK_SIZE - 1, 5);OSTaskCreate(Task1, (void *)&TaskData1, &TaskStk1TASK_STK_SIZE - 1, 6);TaskStart 任务完成上述操作后将自己挂起,操作系统将调度当前优先级最高的应用任务Task0 运行。(2) 应用任务应用任务Task0 运行后将自己挂起,之后操作系统就会调度处于就绪状态的优先级最高

13、uC/OS-II 实验指导书- 24 -的任务,具体代码如下:void Task0 (void *pdata)INT8U i;INT8U err;i=*(int *)pdata;for (;)printf(Application tasks switched %d times!nr,+count);printf(TASK_0 IS RUNNING.nr);printf(task_1 is suspended!nr);printf(*nr);err=OSTaskSuspend(5); / suspend itself应用任务Task1 运行后将Task0 唤醒,使其进入到就绪队列中:void T

14、ask1 (void *pdata)INT8U i;INT8U err;i=*(int *)pdata;for (;)OSTimeDly(150);printf(Application tasks switched %d times!nr,+count);printf(task_0 is suspended!nr);printf(TASK_1 IS RUNNING.nr);printf(*nr);OSTimeDly(150);err=OSTaskResume(5); /* resume task0 */三、运行及观察应用输出信息四、本实验中用到的C/OS-相关函数1. OSTaskCreate()建立一个新任务。任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。中断处理程序中不能建立任务。一个任务必须为无限循环结构,且不能有返回点。OSTaskCre

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号