嵌入式μCOS-II实验报告模板
- 格式:docx
- 大小:15.15 KB
- 文档页数:5
上海市浦东新区浦东软件园郭守敬路498号1206室邮件: supports@电话: 86-21-50271068 1目录实验一 µC/OS-II移植 (3)1 实验目的 (3)2实验基础 (3)3准备事项 (3)4实验原理 (3)5程序编译与下载 (13)6实验思考 (15)实验二任务管理实验 (16)1实验目的 (16)2实验基础 (16)3准备事项 (16)4实验原理 (16)5实验内容 (20)6实验思考 (22)实验三同步和进程通信实验 (24)1实验目的 (24)2实验基础 (24)3准备事项 (24)4实验原理 (24)5实验内容 (28)6实验思考 (31)实验四优先级逆转实验 (32)1实验目的 (32)2实验基础 (32)3准备事项 (32)4实验原理 (32)5实验内容 (34)6实验思考 (40)实验五实时中断实验 (41)1实验目的 (41)2实验基础 (41)3准备事项 (41)4实验原理 (41)5实验内容 (46)6实验思考 (49)实验六任务抖动实验 (50)1实验目的 (50)2实验基础 (50)上海市浦东新区浦东软件园郭守敬路498号1206室邮件: supports@电话: 86-21-50271068 23准备事项 (50)4实验原理 (50)5实验内容 (53)6实验思考 (57)实验七钟点构件实验 (58)1实验目的 (58)2实验基础 (58)3准备事项 (58)4实验原理 (58)5实验内容 (62)6实验思考 (65)实验八串行通信构件实验 (66)1实验目的 (66)2实验基础 (66)3准备事项 (66)4实验原理 (66)5实验内容 (69)6实验思考 (72)实验九 TIMER构件实验 (73)1实验目的 (73)2实验基础 (73)3准备事项 (73)4实验原理 (73)5实验内容 (76)6实验思考 (80)上海市浦东新区浦东软件园郭守敬路498号1206室邮件: supports@电话: 86-21-50271068 3实验一µC/OS-II移植1 实验目的1、掌握移植的概念、方法和步骤2、掌握ARM体系结构3、掌握μC/OS-II软件和硬件体系结构4、学习ARM指令集和ARM处理器硬件特征5、学习μC/OS-II移植条件和在ARM上的移植方法2实验基础1、建立移植概念。
嵌入式实验报告本次实验我们使用了一款基于ARM Cortex-M3处理器的开发板,开发板上运行的是嵌入式操作系统UCOS-II。
我们通过这个实验了解了嵌入式系统的工作流程,以及如何使用开发板进行程序编程和调试。
实验内容分为两个部分:第一个部分是编写一个简单的LED 闪烁的程序,第二个部分则是使用串口通信,将开发板和PC机进行连接,并通过PC机上的终端程序,实现与开发板之间的通信。
第一部分:LED闪烁程序在这个部分,我们首先学习了如何配置开发板上的GPIO(Generic Input/Output)接口,以控制LED的亮灭。
然后,我们编写了一个简单的程序,将LED的亮度不断地切换,使其看起来像在闪烁。
通过这个实验,我们学会了如何使用开发板上的寄存器,设置和读取相关的控制寄存器信息。
在程序编写的过程中,我们还学习了如何进行代码调试,以及如何使用JLink等开发工具对程序进行下载和烧录。
第二部分:串口通信在这个部分,我们使用了开发板上的UART(Universal Asynchronous Receiver/Transmitter)接口,将开发板和PC机进行连接。
之后,我们在PC机上安装了一个终端程序(TeraTerm),通过串口发送数据到开发板上,并将开发板返回的数据显示在终端窗口中。
通过这个实验,我们学习了如何使用UART接口进行数据的收发。
我们还学习了UCOS-II操作系统下的信号量使用方法,以及在多任务环境下,如何实现任务间的通信和同步。
总结在这个实验中,我们对嵌入式开发的基础知识进行了全面深入的了解,并通过实践的方式完成了两项实际应用场景的设计和实现。
我们大大提高了自己的嵌入式开发技能,同时也体验到了从开发到调试、测试、验证的整个流程,对我们日后的开发工作具有非常重要的启示意义。
实验报告课程名称: ______________ 嵌入式系统_____________ 学院:___________________ 信息工程_______________ 专业:_________________ 电子信息工程 ____________ 班级:____________________________________________ 学生姓名: ________________________________________ 学号:____________________________________________ 指导教师: ________________________________________ 开课时间: _________________ 学年第一学期实验名称:IO 接口(跑马灯)实验时间: 11.16 实验成绩:一、实验目的1. 掌握STM32F4基本10 口的使用。
2. 使用STM32F4O 口的推挽输出功能,利用GPI0_Set 函数来设置完成对10 口 的配置。
3. 控制STM32F4勺I0 口输出,实现控制 ALIENTEK 探索者STM32F 卅发板上的 两个LED实现一个类似跑马灯的效果。
二、实验原理本次实验的关键在于如何控制 STM32F4勺IO 口输出。
IO 主要由:MODEFOTYPE 、OSPEEDRPUPDRODR IDR 、AFRHffi AFRL 等 8个寄存器的控制,并且本次实验主要 用到IO 口的推挽输出功能,利用 GPIO_Set 函数来设置,即可完成对IO 口的配置。
所以可以通过了开发板上的两个 LED 灯来实现一个类似跑马灯的效果。
三、实验资源实验器材:探索者STM32F 开发板 硬件资源:1. DS0(连接在 PF9)2.DS1(连接在 PF10)四、实验内容及步骤1. 硬件设计2.软件设计(1) 新建TEST 工程,在该工程文件夹下面新建一个 HARDWARt 件夹,用来存储 以后与硬件相关的代码。
嵌入式实时操作系统uCOS-II(中文版)第一章:范例在这一章里将提供三个范例来说明如何使用µC/OS-II。
笔者之所以在本书一开始就写这一章是为了让读者尽快开始使用µC/OS-II。
在开始讲述这些例子之前,笔者想先说明一些在这本书里的约定。
这些例子曾经用Borland C/C++ 编译器(V3.1)编译过,用选择项产生Intel/AMD80186处理器(大模式下编译)的代码。
这些代码实际上是在Intel Pentium II PC (300MHz)上运行和测试过,Intel Pentium II PC可以看成是特别快的80186。
笔者选择PC做为目标系统是由于以下几个原因:首先也是最为重要的,以PC做为目标系统比起以其他嵌入式环境,如评估板,仿真器等,更容易进行代码的测试,不用不断地烧写EPROM,不断地向EPROM仿真器中下载程序等等。
用户只需要简单地编译、链接和执行。
其次,使用Borland C/C++产生的80186的目标代码(实模式,在大模式下编译)与所有Intel、AMD、Cyrix公司的80x86 CPU兼容。
1.00 安装µC/OS-II本书附带一张软盘包括了所有我们讨论的源代码。
是假定读者在80x86,Pentium,或者Pentium-II处理器上运行DOS或Windows95。
至少需要5Mb硬盘空间来安装uC/OS-II。
请按照以下步骤安装:1.进入到DOS(或在Windows 95下打开DOS窗口)并且指定C:为默认驱动器。
2.将磁盘插入到A:驱动器。
3.键入 A:INSTALL 【drive】注意『drive』是读者想要将µC/OS-II安装的目标磁盘的盘符。
INSTALL.BAT 是一个DOS的批处理文件,位于磁盘的根目录下。
它会自动在读者指定的目标驱动器中建立\SOFTWARE目录并且将uCOS-II.EXE文件从A:驱动器复制到\SOFTWARE并且运行。
嵌⼊式实验报告_俄罗斯⽅块实验报告俄罗斯⽅块实验报告班级电⼦班学号******* 姓名**实验名称俄罗斯⽅块⼀、设计⽬标和要求:1、实现多个模块的驱动:液晶、按键、定时器等。
综合多个模块的协调运⾏。
2、设计游戏运⾏的⾏为仲裁引擎,合理设计前景和背景的相对关系。
3、通过ucos2操作系统,合理实现多任务的协调运⾏。
4、完成考核要求:①在液晶上画出欢迎界⾯。
②开启定时器,定时刷新页⾯。
③俄罗斯⽅块满⾏时消⾏,并计数。
④当⽅块叠加到页⾯顶时,结束游戏。
⼆、实验环境:硬件:PC机、嵌⼊式系统实验箱,串⼝线。
软件: windows,编译器三、设计思路和实现步骤、内容:1、设计思路:俄罗斯⽅块游戏软件基于ARM的Windowns CE平台进⾏写操作,利⽤PXA270RP实验箱模拟仿真器,利⽤evc编程来具体实现,在实验箱的触摸屏上进⾏游戏。
⾸先对俄罗斯⽅块的设计和功能需求进⾏详细的了解和分析,如下图1是俄罗斯⽅块总体设计功能图。
开始结束设计消⾏设计转换设计俄罗斯⽅块游戏设计游戏计积分等级设计系统帮助说明操作设计界⾯分布设计⽅块设计游戏帮助系统说明图1 俄罗斯⽅块总体设计功能图(1)游戏界⾯设计:分别是游戏显⽰界⾯,下⼀个⽅块下落界⾯,积分和等级记录界⾯,开始结束暂停按钮,⽅块形态位置变化操作按钮。
(2)操作设计:①游戏开始结束暂停操作设计:在游戏界⾯上有开始、结束、暂停按钮,⽤⿏标操作,选择是否要进⼊游戏。
②⽅块形状转换操作:良好的⽅块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、⽥字形、7字形、反7形、T 字型),各个⽅块要能实现它的变形,统⼀设为逆时针变形。
如下图2所⽰为俄罗斯⽅块定位点设置表。
当⽅块下落时,可通过键盘⽅向键(上、下、左、右键)对该⽅块进⾏向上(变形),向下(加速)、向左、向右移动。
俄罗斯⽅块定位点设置,以⿊⾊点为(0,0)坐标状态类型 1 2 3 44567图2 俄罗斯⽅块⽅块形状图③消⾏操作设计:当⽅块落到游戏界⾯最底部并且铺满最后⼀⾏,就能消去所在这⼀⾏,积分增加100分,⽽积分增加到⼀定数值时,玩家等级增加。
嵌入式系统实验报告文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]大连理工大学本科实验报告课程名称:嵌入式系统实验学院(系):电子信息与电气工程学部专业:自动化班级: 0804学号:学生姓名:何韬2011年 11月 18日大连理工大学实验报告学院(系):电信专业:自动化班级: 0804 姓名:何韬学号:组: ___实验时间: 2011-11-12 实验室: d108 实验台:指导教师签字:成绩:实验二ARM的串行口实验一、实验目的和要求见预习报告二、实验原理和内容见预习报告三、主要仪器设备硬件:ARM嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC机Pentium100 以上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP 、ARM SDT 或集成开发环境、仿真器驱动程序、超级终端通讯程序。
四、实验步骤见预习报告五、核心代码在主函数中实现将从串口0接收到的数据发送到串口0()int main(void){char c1[1];char err;ARMTargetInit(); 通过调用OSTaskCreate()或OSTaskCreateExt()创建至少一个任务;.OSStart(); /ucos-ii/" /* uC/OS interface */#include "../ucos-ii/add/"#include "../inc/"#include "../inc/sys/"#include "../src/gui/"#include <>#include <>#pragma import(__use_no_semihosting_swi) .\n");.\n");.\n");于task2 挂起时间为3 秒,所以在task2 挂起期间task1 能执行两次,而当第三次时由于task1 与task2 同时处于就绪态,由优先级次序,还是先执行task1 在执行task2.然后就这样周而复始的循环下去。
μCOS嵌入式操作系统实验指导书说明《嵌入式系统及应用实验指导书》包含:嵌入式开发板的硬件结构与u-boot基本命令、uClinux的多任务机制及其编程、uClinux的内存管理机制及其编程、在51单片机上移植μC/OS-II和在ARM7单片机上移植μC/OS-II 实验指导,适合电子与信息类专业的学生学习使用。
目录实验一嵌入式开发板的硬件结构与U-BOOT基本命令 (1)实验二UCLINUX的多任务机制及其编程 (6)实验三UCLINUX的内存管理机制及其编程 (9)实验四在51单片机上移植ΜC/OS-II (17)实验五在ARM7单片机上移植ΜC/OS-II (21)实验一嵌入式开发板的硬件结构与u-boot基本命令一、实验目的1、能够使用Embest IDE for ARM集成开发环境及ARM软件模拟器;2、通过实验掌握u-boot基本命令。
二、实验原理Bootloader代码是器件复位后进入操作系统前执行的一段代码,通过该代码初始化处理器各寄存器和片上外设,建立存储器映射图以及初始化堆栈,从而为操作系统提供基本的运行环境。
由于Bootloader与CPU和开发板配置有关,不可能有通用的Bootloader,因此需要根据具体情况进行移植。
嵌入式系统U-boot是当前流行、功能强大的Bootloader。
U-Boot用于多种嵌入式CPU的Bootloader程序,U-Boot支持ARM、PowerPC等多种架构的处理器,也支持Linux、NetBSD和Vx—Works等操作系统。
这里采用U—Boot 的版本为U-boot-1.1.6。
(1)U-Boot目录结构U-Boot目录结构如下:board是一些与现有开发板有关的文件,比如makefile和u-boot.1ds等都与具体开发板的硬件和地址分配有关;common 是与体系结构无关的文件,可实现各种命令的C文件;cpu是CPU相关文件,其子目录都是以U-boot支持的CPU命名,比如子目录arm920t,mips,s3e44bO 和nios等,每个特定的子目录都包括cpu.c,interrupt.C和start.s;doc是说明文档;drivers是通用设备驱动程序,比如:各种网卡、支持CFI的Flash 和USB总线等;fs是支持文件系统的文件,U—Boot可支持cramfs,fat,fdos,jffs2等文件;net是与网络有关的代码,比如:BOOTP协议、TFTP协议和NFS文件系统的实现;lib_arm是与ARM体系结构相关的代码;tools 是创建S-Record的格式文件和U-Boot images的工具。
3.1 多任务编程实验
3.1.1 实验目的
1. 本实验的目的是让学生了解uC/OS-II中怎样创建一个任务以及了解uC/OS-II的多任
务调度机制。
3.1.2 实验内容
1. 在Eg1的基础上新建一个任务;
2. 在该任务函数中打印提示信息。
3.1.3 预备知识
1. C语言的基础知识;
2. 程序调试的基础知识和方法。
3.1.4 实验设备
1. 硬件:JXARM9-2410教学实验箱、PC机;
2. 软件:PC机操作系统 Windows 98(2000、XP) + ADT IDE集成开发环境。
3.1.5 实验步骤
本章将以Eg1为基础,在其上添加一个任务。
1. 打开Eg1工程
打开examples/ucos工作区,并设置Eg1工程为活动工程。
然后打开App目录下的eg1.C 文件。
2. 声明任务栈
在eg1.c文件中声明任务堆栈,下面代码中黑体字表示的为新添加的代码:
/* task stack */
OS_STK StackLED[STACKSIZE]= {0, };
OS_STK StackSEG[STACKSIZE]= {0, };
OS_STK StackTEST[STACKSIZE]= {0, };
任务栈以全局变量的方式静态分配,然后在创建任务时使用。
3. 添加任务ID
/* task name string */
char IdLED = '1';
char IdSEG = '2';
char IdTEST = '3';
4. 任务函数声明
/* task entry function */
void TaskLED(void *Id);
void TaskSEG(void *Id);
void TaskTEST(void *Id);
5. 任务函数实现
在TaskSEG函数后添加如下函数:
/*
* Task entry function.
* this task blink the seg every 200 ticks
* that is 1s.
*/
void TaskTEST(void *Id)
{
uHALr_printf("Task3() called\n");
for (;;)
{
OSSchedLock();
uHALr_printf("Task%c() turned\n", *(char *)Id);
User_SEG_Blink();
OSSchedUnlock();
OSTimeDly(100);
}
}
在该函数中实现数码管显示,由于在TaskSEG中也进行了数码管显示,因此,请先将TaskSEG中的数码管显示功能关闭,以更好地看到效果,修改后的TaskSEG函数如下:void TaskSEG(void *Id)
{
uHALr_printf("Task2() called\n");
for (;;)
{
OSSchedLock();
uHALr_printf("Task%c() turned\n", *(char *)Id);
// User_SEG_Blink();
OSSchedUnlock();
OSTimeDly(100);
}
}
6. 创建任务
然后在Main函数中创建任务,添加TaskTEST的创建代码,如下所示:
/*
* create the tasks in uC/OS and assign increasing
* priorities to them so that Task3 at the end of
* the pipeline has the highest priority.
*/
OSTaskCreate(TaskLED, (void *)&IdLED, (OS_STK *)&StackLED[STACKSIZE - 1], 5);
/* Create seg blink tasks */
OSTaskCreate(TaskSEG, (void *)&IdSEG, (OS_STK *)&StackSEG[STACKSIZE - 1], 13);
/* Create test tasks */
OSTaskCreate(TaskTEST, (void *)&IdTEST, (OS_STK *)&StackTEST[STACKSIZE - 1], 15);
7. 编译
选择“Build”->“Rebuild All”功能编译工程,如果出现错误,修改代码,然后重新编译,直到成功。
8. 下载、调试
将该程序下载到JXARM9-2410教学系统中调试,并观察结果,原来在TaskSEG中进行数码管闪烁的功能转移到TaskTEST中。
如果将串口0连接到PC,在超级终端中还可以看到显示。
9. 修改
TaskTEST的优先级在所创建的任务中为最低,根据uC/OS-II的多任务调度策略,总是保证优先级最高的任务先执行,因此,高优先级的任务如果不主动让出CPU(在此程序中调用OSTimeDly将让出其参数中指定个数时钟节拍的CPU资源)资源,则更低优先级的任务将
无法获得CPU资源,在此程序中,如果将TaskSEG的OSTimeDly函数注释掉,那么TaskTEST 将无法获得执行,数码管也不会闪烁,修改后的TaskSEG函数如下:
void TaskSEG(void *Id)
{
uHALr_printf("Task2() called\n");
for (;;)
{
OSSchedLock();
uHALr_printf("Task%c() turned\n", *(char *)Id);
// User_SEG_Blink();
OSSchedUnlock();
// OSTimeDly(100);
}
}
观察实验结果。
如果将TaskTEST的任务优先级修改为比TaskSEG更高的话,TaskTEST将重新获得执行权,数码管将闪烁,如下所示:
/*
* create the tasks in uC/OS and assign increasing
* priorities to them so that Task3 at the end of
* the pipeline has the highest priority.
*/
OSTaskCreate(TaskLED, (void *)&IdLED, (OS_STK *)&StackLED[STACKSIZE - 1], 5);
/* Create seg blink tasks */
OSTaskCreate(TaskSEG, (void *)&IdSEG, (OS_STK *)&StackSEG[STACKSIZE - 1], 13);
/* Create test tasks */
OSTaskCreate(TaskTEST, (void *)&IdTEST, (OS_STK *)&StackTEST[STACKSIZE - 1], 12);。