UCOSII操作系统实验教程

合集下载

4、基于uCOS-II操作系统的移植实验

4、基于uCOS-II操作系统的移植实验

实验目的
内核的主要结构。 2.掌握将uC/OS-II 内核移植到ARM7 处 理器上的基本方法。
1.了解uC/OS-II
实验工具
实验平台 ADS1.2 超级终端
实验原理
所谓移植,指的是一个操作系统可以在某
个微处理器或者微控制器上运行。 设计的语言 C:主要开发工具 汇编:读写处理器、寄存器时只能通过汇 编语言来实现

C语言函数


后5个函数为接口函数,可以不加代码
uC/OS-II的启动
void main (void) { OSInit(); // 初始化uC/OS-II
. 通过调用OSTaskCreate()或 OSTaskCreateExt()创建至少一个任务; . OSStart(); //开始多任务调度,永不返回
所涉及到的函数

汇编函数

OSStartHighRdy() OSCtxSw() OSIntCtxSw() OSTickISR()
void void void void void void void *OSTaskStkInit (void (*task)(void *pd),void *pdata, *ptos, INT16U opt) OSTaskCreateHook (OS_TCB *ptcb) OSTaskDelHook (OS_TCB *ptcb) OSTaskSwHook (void) OSTaskStatHook (void) OSTimeTickHook (void)
}
基于uC/OS的应用开发
void YourTask (void *pdata)
{ /* 用户代码 */
OSTaskDel(OS_PRIO_SELF); }

uC_OS-II实验指导书2015 - 8

uC_OS-II实验指导书2015 - 8
default: printf("时间:%d,任务TTaskMessageSen发消息失败,错误号:%d\n",OSTimeGet(),err);
} OSQQuery(myQ,&myQData); printf("时间:%d,当前队列中消息数量:%d\n",OSTimeGet(),myQData.OSNMsgs); } }
实验 8 µC/OS-II 任务间通信设计
1 实验目的
掌握嵌入式实时操作系统µC/OS-II 中信号量、消息邮箱、消息队列机制的基本原理和使用方法。
2 实验内容
数据类型定义如下: typedef unsigned char BOOLEAN; typedef unsigned charpedef unsigned short INT16U; typedef signed short INT16S; typedef unsigned long INT32U; typedef signed long INT32S; typedef unsigned short OS_STK; 任务控制块的结构定义如下: typedef struct os_tcb {
if (myMBox==(OS_EVENT *)0) /*检查邮箱是否存在*/ {
2
printf("时间:%d,任务TaskMessageRec判定邮箱不存在!\n",OSTimeGet()); OSTaskDel(OS_PRIO_SELF); /*不成功则删除本任务*/ return; }
while(1) {
prcount=(INT32U * )OSMboxPend(myMBox,0,perr); /*请求消息,如果消息不存在就阻塞*/ if (*perr==OS_ERR_NONE) printf("时间:%d,任务TaskMessageRec接收消息为%d\n",OSTimeGet(),*prcount); else printf("时间:%d,任务TaskMessageRec等待异常结束,错误号:%d\n",*perr);

uC_OS-II实验指导书2015 - 2

uC_OS-II实验指导书2015 - 2

实验2任务就绪表
1实验目的
掌握任务就绪表及任务就绪组的结构及二者之间的关系,系统需要一个就绪登记表,它登记系统中所有处于就绪状态的任务,这个就绪表就是一个位图,系统中的每个任务都在这个位图中占据一个二进制位,该位的状态(1或0)就表示任务是否处于就绪状态。

为了便于对就绪表的查找,系统又定义了一个数据类型为INT8U的变量OSRdyGrp,并使该变量的每一位都对应于OSRdyTbl[]的一个任务组,如果任务组中有就绪任务,则在变量OSRdyGrp里把该任务组所对应的位置1。

理解基于优先级调度的嵌入式实时操作系统的实现策略。

2实验内容
变量定义如下:
INT8U OSRdyGrp=0;
INT8U OSRdyTbl[8]={0};
INT8U OSMapTbl[8]={1,2,4,8,16,32,64,128};
INT8U OSUnMapTbl[256]={0};
INT8U x,y,OSPrioHighRdy,prio;
(1)编程对OSUnMapTbl数组进行初始化;
(2)输入多个任务的优先级prio,修改OSRdyGrp、OSRdyTbl的值并输出;
(3)根据OSRdyGrp、OSRdyTbl的值,求最高优先级任务的优先级OSPrioHighRdy并输出;
3实验代码(要求有注释)
4实验结果(截图)
5心得体会(不少于200字)
1。

uC_OS-II实验指导书

uC_OS-II实验指导书
3.1 µC/OS-II 概述............................................................................................................................. 5 3.2 µC/OS-II 的特点......................................................................................................................... 6 3.3 µC/OS-II 主要源代码文件介绍.................................................................................................7 4 LambdaTOOL 集成开发环境简介....................................................................................................... 7 5 µC/OS-II 实验内容简介........................................................................................................................ 8 5.1 任务管理实验............................................................................................................................ 8 5.2 优先级反转实验........................................................................................................................ 8 5.3 优先级继承实验........................................................................................................................ 9 5.4 哲学家就餐实验........................................................................................................................ 9 5.5 内存管理实验............................................................................................................................ 9 5.6 时钟中断实验............................................................................................................................ 9 5.7 消息队列实验............................................................................................................................ 9 6 预备实验:嵌入式开发环境的建立................................................................................................... 9 6.1 目的............................................................................................................................................ 9 6.2 实验步骤及说明...................................................................................................................... 10

UCOS实验(第二版)

UCOS实验(第二版)
第二章 µC/GUI的移植.................................................................................................................35
2.1 实现方法与步骤..................................................................................................................36
1.1 安装µC/OS-II
本书附带一张光盘包括了所有我们讨论的源代码。读者应当具备 80x86,Pentium,或 者 Pentium-II 处理器的 PC 机,并且运行 DOS 或 Windows95 操作系统。至少需要 5Mb 硬盘 空间来安装µC/OS-II。请按照以下步骤安装:
插入附带光盘,打开µC/OS-II 安装文件,将其中文件复制到目标目录下。 注意:为了在µC/OS 使用中不会更改过多内容,建议使用 C:\,D:\,或 E:\作 为目标目录。 在安装之前请一定阅读一下 READ ME 文件。完成时,用户的目标目录下应该有以下子 目录:
----- 1 ---
嵌入式系统教学平台实验教材
运行 TO.EXE,必须将 TO.TBL 复制到根目录下。
\SOFTWARE\uCOS-II
与µC/OS-II 相关的文件都放在这个目录下。
\SOFTWARE\uCOS-II\EX1_x86L
这个目录里包括例 1 的源代码,可以在 DOS(或 Windows 95 下的 DOS 窗口)下运行。
第三部分 实验部分.......................................................................................................................41

ucos-ii嵌入式操作系统_实验3 任务的创建

ucos-ii嵌入式操作系统_实验3  任务的创建

实验 3 任务的创建、挂起与恢复课程名称:嵌入式操作系统 B1、实验目的理解任务管理的基本原理,了解任务的各个基本状态及其转换过程;掌握µC/OS-II 中任务管理的基本方法(创建、启动、挂起、恢复任务);熟练使用µC/OS-II 任务管理的基本系统调用。

理解任务的创建、挂起与恢复的原理及功能,掌握任务创建、挂起与恢复的实现过程。

2、实验内容(1)设计 Task0、Task1 两个任务:任务 Task0 不断地挂起自己,再被任务 Task1 解挂,两个任务不断地切换执行,并输出两个任务在各个时刻的状态。

Task0 的主要功能是显示 Task1 的状态,Task1 的主要功能是显示 Task0 的状态。

整个应用的运行流程如图 1 所示,其描述如下:在 main 函数创建起始任务 TaskStart,其优先级为 0。

TaskStart 任务主要完成创建 2 个应用任务 Task0、Task1,并挂起自己(不再被其它任务唤醒)。

之后整个系统的运行流程如下:t1 时刻,Task0 开始执行,它运行到 t2 时刻挂起自己;t2 时刻,系统调度处于就绪状态的优先级最高任务 Task1 执行,它在 t3 时刻唤醒 Task0,后者由于优先级较高而抢占 CPU;Task0 执行到 t4 时刻又挂起自己,内核调度 Task1执行;Task1 运行至 t5 时刻再度唤醒 Task0;注意:图中的栅格并不代表严格的时间刻度,而仅仅表现各任务启动和执行的相对先后关系。

(2)设计 MyTask、YouTask、KeyTask 三个任务:MyTask 任务输出 M;YouTask 任务输出 Y,并输出 MyTask 任务的状态;KeyTask 任务从键盘接收字符 Y 或 N,当接收 Y 时挂起 MyTask 任务,当接收 N 时恢复 MyTask 任务。

(3)设计 KeyTask 任务,当从键盘输入+号时动态创建任务,最多可以创建 10 个任务,这 10个任务都执行一个函数 MyTask,要求优先级是(PRIO_BASE+0,1,2,3,4,5,6,7,8,9),还要向不同的任务传递不同的参数(0,1,2,3,4,5,6,7,8,9)给 MyTask 函数,优先级为(PRIO_BASE+0,1,2,3,4,5,6,7,8,9)的任务分别输出数字(0,1,2,3,4,5,6,7,8,9)。

实验10_SOPC_UCOSII操作系统OK

实验10_SOPC_UCOSII操作系统OK
实验要完成如下任务:
(1)在EDS中创建或更新应用工程,创建一个看门狗应用,启动看门狗后, 有“喂狗”操作,持续翻转LED状态,无喂狗操作,系统复位;
(2)在EDS中新建uC/OS-II模板应用工程,在其模板的基础上,建立一个 4任务线程并下载验证。
1.1 系统框架
Altera FPGA
JTAG 接口 时钟 振荡器
注释.除软件代码 外,后续4任务操 作系统,实验步 骤同上,后续步 骤略。注意阅读 注释,加深对操 作系统理解。
操作系统 总头文件 全局变量
任务堆栈, 存储变量 数据。
任务优先级, 数值越小,优 先级越高
任务内必须 为无限循环
操作系统延时函数, 延时1秒,此1秒内, 执行其他任务。
按下低位键,改变 LED值,再按此键 无效。
位后能否继续运行本设计。 JTAG链选择也报错。解决方法是停止JTAG
ห้องสมุดไป่ตู้
UART,然后执行相关操作。
4.使用NIOS II Software Build Tools For Eclipse 开发µC/OS-II操作系统并调试。
(1)在EDS中,新建µC/OS-II 工程。
1.在原EDS工程文件导 航窗口中,选中工程 库文件,右键, 【Close Project】, 关闭原软件工程。关 闭效果如图所示。
uC/OS-II是NIOS II支持的一个完整的、可移植的、固化和裁 剪的先占式实时多任务内核(Kernel),NIOS II对其完整支持。
uC/OS-II可提供如下服务:
1、任务管理 2、事件标志 3、消息传递
4、内存管理 5、信号量 6、时间管理
在应用程序中,用户可以方便的使用这些系统后调用来实现 目标功能。

实验10_SOPC_UCOSII操作系统OK

实验10_SOPC_UCOSII操作系统OK

实验10_SOPC_UCOSII操作系统OK引言:在嵌入式系统中,操作系统是一种软件模块,它的目标是有效地管理系统的资源,并为应用程序提供一个良好的运行环境。

本实验将介绍SOPC_UCOSII操作系统,通过实践来学习如何在其上运行应用程序。

本实验分为以下几个部分:1.SOPC_UCOSII操作系统的介绍2.实验环境搭建3.实验步骤详解4.实验总结与展望一、SOPC_UCOSII操作系统的介绍SOPC(System on Programmable Chip,可编程芯片系统)是一种集成电路系统设计方法,它是将处理器、外设、总线和存储空间等硬件资源集成在一颗可编程逻辑器件(如FPGA)中的理念。

SOPC_UCOSII操作系统是基于SOPC架构设计的一种实时嵌入式操作系统。

UCOSII(MicroC/OS-II,Micro Controller Operating System-II)是美国Micrium公司开发的一款商业操作系统,经过多年的发展与优化,已经成为嵌入式系统领域最受欢迎的操作系统之一二、实验环境搭建1. 使用Altera的Quartus II软件进行FPGA设计和编译。

2.使用FPGA硬件平台开发板进行实验,如DE1-SoC开发板。

3. 使用Altera提供的示例设计进行实验。

三、实验步骤详解2. 使用Quartus II软件创建一个新的工程,选择目标FPGA芯片型号,并进行必要的设置。

3.导入SOPC_UCOSII的示例设计,该设计包含了处理器、外设、总线和存储空间等硬件资源的配置。

4. 编译工程,生成SOPC_UCOSII的.bit文件。

6. 使用终端仿真软件(如SecureCRT),通过串口连接到FPGA开发板。

7.启动FPGA开发板,并观察SOPC_UCOSII的运行情况。

8.在SOPC_UCOSII上运行应用程序,观察其输出结果和运行状态。

四、实验总结与展望通过本实验,我们学习了SOPC_UCOSII操作系统的搭建和运行方式,并在其上成功运行了应用程序。

UCOSII实验1-任务调度

UCOSII实验1-任务调度

UCOSII实验1-任务调度 ·UCOSII 是⼀个可以基于 ROM 运⾏的、可裁减的、抢占式、实时多任务内核,具有⾼度可移植性,特别适合于微处理器和控制器。

·为了提供最好的移植性能, UCOSII 最⼤程度上使⽤ ANSI C 语⾔进⾏开发,并且已经移植到近 40 多种处理器体系上,涵盖了从 8 位到 64 位各种 CPU(包括 DSP)。

·UCOSII 具有执⾏效率⾼、占⽤空间⼩、实时性能优良和可扩展性强等特点,最⼩内核可编译⾄ 2KB 。

UCOSII 已经移植到了⼏乎所有知名的 CPU 上。

UCOSII体系结构图:UCOSII 的移植,我们只需要修改: os_cpu.h、 os_cpu_a.asm 和 os_cpu.c等三个⽂件即可: ① os_cpu.h,进⾏数据类型的定义,以及处理器相关代码和⼏个函数原型; ② os_cpu_a.asm,是移植过程中需要汇编完成的⼀些函数,主要就是任务切换函数; ③ os_cpu.c,定义⼀些⽤户 HOOK 函数。

图中定时器的作⽤是为 UCOSII 提供系统时钟节拍,实现任务切换和任务延时等功能。

这个时钟节拍由 OS_TICKS_PER_SEC(在os_cfg.h 中定义)设置,⼀般我们设置 UCOSII 的系统时钟节拍为 1ms~100ms,具体根据你所⽤处理器和使⽤需要来设置。

对于STM32的单⽚机⼀般⽤其 SYSTICK 定时器来为 UCOSII 提供时钟节拍。

UCOSII的任务优先级 · UCOSII 保留了最⾼ 4 个优先级和最低 4 个优先级的总共 8 个任务,⽤于拓展使⽤; · UCOSII ⼀般只占⽤了最低 2 个优先级,分别⽤于空闲任务(倒数第⼀)和统计任务(倒数第⼆),所以剩下给我们使⽤的任务最多可达 255-2=253 个(V2.91)。

任务 · 所谓的任务,其实就是⼀个死循环函数,该函数实现⼀定的功能,⼀个⼯程可以有很多这样的任务(最多 255 个), UCOSII 对这些任务进⾏调度管理,让这些任务可以并发⼯作(注意不是同时⼯作!!,并发只是各任务轮流占⽤ CPU,⽽不是同时占⽤,任何时候还是只有 1 个任务能够占⽤ CPU),这就是 UCOSII 最基本的功能。

uCOS-II操作系统简介及实验

uCOS-II操作系统简介及实验
进入临界段: 进入临界段:OS_ENTER_CRITICAL() 退出临界段:OS_EXIT_CRITICAL()。 退出临界段: 。

这两个宏的定义取决于所用的微处理器, 这两个宏的定义取决于所用的微处理器,每种微 处理器都有自己的OS_CPU.H文件。 文件。 处理器都有自己的 文件
uC/OS-II操作系统 uC/OS-II操作系统
uC/OS-II操作系统 uC/OS-II操作系统
1.2 uC/OS-II特点 特点
• 1、uC/OS-II内核具有很强的可移植性。 内核具有很强的可移植性。 、 内核具有很强的可移植性 • 2、具有可抢占的实时多任务调度功能。 、具有可抢占的实时多任务调度功能。 • 3、提供了许多系统服务,如信号量、消 、提供了许多系统服务,如信号量、 •
任务状态
• • • • • •
休眠态 - OSTaskCreate()或OSTaskCreateExt() 或 就绪态 等待态,就绪态 就绪态,运行态 等待态 就绪态 运行态 - OSTaskDel() - 休眠态 就绪态 - OSStart() - 运行态 运行态 - OSTimeDly()或OSTimeDlyHMSM() , 或 OSSemPend(),OSMboxPend(),或OSQPend() , , 等待态 等待态 - OSTimeTick() -就绪态 就绪态 空闲任务 - OSTaskIdle()
uC/OS-II操作系统 uC/OS-II操作系统
任务调度
• μC/OS-Ⅱ总是运行进入就绪态任务中优 μC/OS先级最高的那一个。 先级最高的那一个。确定哪个任务优先 级最高, 级最高,下面该哪个任务运行了的工作 是由调度器(Scheduler)完成的。 是由调度器(Scheduler)完成的。

嵌入式操作系统μCOS-II实验ok

嵌入式操作系统μCOS-II实验ok

7.2.2实验设备
硬件:Embest S3CEV40实验平台, Embest ARM标准/增强型仿真器套件, PC机。 软件:Embest IDE 2003集成开发环境, Windows 98/2000/NT/XP。
7.2.3实验内容
编写程序创建三个任务,分别完成八 段数码管的循环显示,LED指示灯的 闪烁和从串行口发送数据功能。
cosii移植条件715实验操作步骤1基本的配置和定义2移植oscpuaasm汇编代码文件3移植oscpucc标准c代码文件72cosii应用实验721实验目的722实验设备723实验内容724实验原理725实验操作步骤721实验目的通过实验掌握cosii的启动流程
第七章 嵌入式操作系统μCOS-II实验
7.1.4实验原理
μC/OS-II文件体系
实验原理
μC/OS-II移植条件
1. 2. 3. 4. 5. 处理器的C编译器能产生可重入代码 用C语言就可以打开和关闭中断。 处理器支持中断并且能产生定时中断。 处理器支持容纳一定量数据的硬件堆栈。 处理器有将堆栈指针和其他CPU寄存器读出 和存储到堆栈或内存中的指令。
7.1 μC/OS-II 移植实验 7.2 μC/OS-II 应用实验
7.1 μC/OS-II 移植实验 7.1.1实验目的 7.1.2实验设备 7.1.3实验内容 7.1.4实验原理 7.1.5实验操作步骤
7.1.1实验目的
了解μC/OS-II移植条件和内核基本结构。 掌握将μC/OS-II内核移植到ARM7处理器 上的方法和步骤。
7.1.5实验操作步骤
1、基本的配置和定义 2、移植 OS_CPU_A.ASM汇编代码文件 3、移植 OS_CPU_C.C标准C代码文件

实验二 uCOS-II在windows下的移植

实验二 uCOS-II在windows下的移植

实验二uCOS-II在windows下的移植
一:实验目的:
1.掌握uCOS-II在windows下的移植。

二:实验内容:
完成实验环境搭建,并且将uCOS-II移植到d盘下。

三:实验步骤:
1.可以将该工程所需的五个文件:OS_CPU_A.ASM,OS_CPU_C.C,PC.C,TEST.C,Ucos_II.C
放到一个独立的文件夹中,添加的时候便于添加。

2.按照实验一的步骤建立工程
添加所需要的文件:
3.若是将工程建到同software文件夹同一磁盘,但并未如之前一样放到“software\uCOS-II\EX1_x86L\BC45\source\”路径下,在编译运行时会提醒:“unable to open includes.h”和“unable to open os_cfg.h”,解决方法如下:
方法一:将#include “includes.h”改为
“#include “..\SOFTWARE\uCOS-II\EX1_x86L\BC45\SOURCE\includes.h””
将#include “os_cfg.h”改为
“#include “..\SOFTWARE\uCOS-II\EX1_x86L\BC45\SOURCE\os_cfg.h””
方法二:将“..\SOFTWARE\uCOS-II\EX1_x86L\BC45\SOURCE\”路径下的“includes.h”和“os_cfg.h”复制到工程所在的目录之下。

3.运行程序:。

第7章uCOS-II操作系统实验

第7章uCOS-II操作系统实验

第7章uCOS-II操作系统实验第7章μC/OS-II操作系统实验7.1 实验目的掌握μC/OS-II操作系统的基本使用方法。

掌握μC/OS-II操作系统中时钟节拍的概念和方法。

掌握μC/OS-II操作系统的任务管理的机制。

掌握μC/OS-II操作系统的任务之间进行通讯的方法。

掌握使用标准库函数和μC/OS-II操作系统编写多任务程序的设计方法。

7.2 实验内容(1)设计具有串口通信功能的多任务程序●每个任务在运行时向上位机串口输出“Taskx is running”,x 为任务号;●至少创建除启动任务外的3个任务;●任务1和任务2根据延时运行,运行1次任务1之后运行2次任务2;●任务1运行5次后删除任务1;●任务2运行10次后,通过挂起和恢复方式,任务2执行3次后执行一次任务3。

(2)设计基于邮箱消息的多任务程序●每个任务在运行时向上位机串口输出“Taskx is running”,x 为任务号;●至少创建除启动任务外的2个任务;●任务1根据延时运行;●任务2由串口命令运行(一个任意字符运行一次)或定时器触发运行(邮箱消息方式);●发挥:能够基于ucos-II设计一个显示任务,显示动画。

7.3 实验步骤(1)设计具有串口通信功能的多任务程序。

设计多任务方案、分析功能、设计流程图、确定变量功能和作用域、编写程序、调试代码、记录实验结果。

(2)设计基于邮箱消息的多任务程序。

设计多任务方案、设计通讯方案、分析功能、设计流程图、确定变量功能和作用域、编写程序、调试代码、记录实验结果。

7.4 实验结果附设计方案、流程图、程序的执行结果7.5 实验总结总结实验经验、总结中断服务程序的编写方法、分析程序中的缺陷及改进的方法。

7.6多任务例程Main.c的代码#include#define STACK_SIZE 128static OS_STK MyTask1Stack[STACK_SIZE];static OS_STK MyTask2Stack[STACK_SIZE];static OS_STK StartTaskStack[STACK_SIZE];#define MYTASK1_PRIO 10#define MYTASK2_PRIO 15#define STARTTASK_PRIO 8void MyTask1(void* p_arg);void MyTask2(void* p_arg);void StartTask(void* p_arg);void GPIO_Conf(void);int main(void){OSInit();OSTaskCreate(StartTask,(void*)0,(OS_STK*)&StartTaskStack[S TACK_SIZE-1],STARTTASK_P RIO);OSStart();void GPIO_Conf(){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE );GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOF,&GPIO_InitStructure);GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7);}void StartTask(void* p_arg){GPIO_Conf();SysTick_Config(SystemCoreClock/1000);OSTaskCreate(MyTask1,(void*)0,(OS_STK*)&MyTask1Stack[STACK_SIZE-1],MYTASK1_PRIO);OSTaskCreate(MyTask2,(void*)0,(OS_STK*)&MyTask2Stack[STACK_SIZE-1],MYTASK2_PRIO);OSTaskDel(OS_PRIO_SELF);}void MyTask1(void* p_arg){while(1){GPIO_WriteBit(GPIOF,GPIO_Pin_6,(BitAction)(1-GPIO_ReadInputDataBit(GPIOF,GPIO_ Pin_6)));OSTimeDly(1000);}void MyTask2(void* p_arg){while(1){GPIO_WriteBit(GPIOF,GPIO_Pin_7,(BitAction)(1-GPIO_ReadInputDataBit(GPIOF,GPIO_ Pin_7)));OSTimeDly(100);}}。

UCOSII操作系统实验教程

UCOSII操作系统实验教程

下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P67-72任务的挂起和恢复
实验9
任务的挂起和恢复
• 1.编译运行代码,输入选项3继续运行程序 • 2.运行查看结果
• 3.查看代码,说明为什么得到这样的运行 结果 • 4.对任务代码进行修改,得到不同的结果 • 5.改变任务的优先级,查看运行结果,说 明输出的不同之处,说明原因
补充,各个例子的运行结果展示 3
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P102-129 • 事件管理的重要数据结构,事件管理程 序,信号量管理
实验10 信号量管理实验
• 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P129,运行结果见 P133图4.9 • 打开原始工程运行代码,输入选项4继续 运行程序 • 2.运行查看结果 • 3.说明使用信号量实现的功能,为什么能 实现这样的功能,都使用了哪些数据结构。
补充,各个例子的运行结果展示 1
准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P24-40 2.1任务管理的重要数据结 构,为以后的实验做准备
实验2
调试模式跑第一个任务
• 本实验的目的在于学会使用VC的调试模式 运行和调试操作系统。 • 步骤 • 1.在上次实验的基础上不改动代码,打开工 程 • 2.在usercode.c中的 • printf(“welcome to embeded system\n”);处 设置断点。
• 阅读《嵌入式实时操作系统μ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 uCOS-II操作系统实验

2 uCOS-II操作系统实验

uC/OS-II操作系统
实验视频
• 点击此处观看视频 • 如果不能正确观看,请点击此处 • 本实验使用简易JTAG接口,在程序中必
须选择ARM9Simple ,如果使用标准 JTAG接口,请选择ARM9Lpt
uC/OS-II操作系统
2.6 uC/OS-II软件定时器编程实验
uC/OS-II操作系统
uC/OS-II操作系统
实验视频
• 点击此处观看视频 • 如果不能正确观看,请点击此处 • 本实验使用简易JTAG接口,在程序中必
须选择ARM9Simple ,如果使用标准 JTAG接口,请选择ARM9Lpt
uC/OS-II操作系统
2.11 uC/OS-II俄罗斯方块游戏设计
uC/OS-II操作系统
uC/OS-II操作系统
2.1 uC/OS-II移植实验
uC/OS-II操作系统
实验效果
• 如果实验运行正确,实验箱上最右边的 •

数码管将依次从0到F显示数据,同时四 个跑马灯由亮变灭或者由灭变亮 跑马灯闪烁和数码管显示分别在两个不 同的任务中进行 在DNW中有相应的显示
uC/OS-II操作系统
实验效果
• 采集实验箱的AIN0和AIN1两个通道的模 •
拟量,并转换成为数字以曲线的方式显 示在LCD上 通过旋动AIN0和AIN1旋钮可以改变输入 模拟的值,LCD上显示将发生变化 编译这些应用之前,必须先编译uc-gui库 工程

uC/OS-II操作系统
实验视频
• 点击此处观看视频 • 如果不能正确观看,请点击此处 • 本实验使用简易JTAG接口,在程序中必
须选择ARM9Simple ,如果使用标准 JTAG接口,请选择ARM9Lpt

大作业-ucosII实时操作系统

大作业-ucosII实时操作系统

第11章基于NIOS的μC/OS-II实验11.0 实验简介z实验说明本实验项目使用Quartus II、SOPC Builder、Nios II EDS从零开始构建一个能够在DE2-70实验平台上运行的μC/OS-II操作系统的Nios II系统。

初学者可以借此范例熟悉Quartus II、SOPC Builder、Nios II EDS的使用,并且了解基于FPGA的嵌入式系统开发流程。

z资料来源因特网网页:国立台湾大学王胜德教授关于软硬件协同设计的实验指导。

实验名:Altera SPOC Lab 1-uC/OS-II主页:.tw/jenny/homepage/sdwang_codesign2008/index.html其网站上只公开了这一网页:名称是Lab1z实验环境Quartus II 8.1 + Nios II EDS 8.1 + DE2-70 (Cyclone II EP2C70F896C6N)z本实验系统结构图图11-1给出了本实验十(NIOS + UCOS-II)的系统结构图。

图11-1 NIOS + UCOS-II实验的系统结构图从图11-1中可以看到FPGA芯片上有NiosII软核处理器、Avalon交换结构(片上总线)、JTAG调试模块、LED并行输出接口、并行输入开关接口、SDRAM控制器和片上存储器。

外部输入器件采用SW[17:0]。

外部输出器件采用LEDG[7:0]。

最后的实验結果希望在μC/OS-II下实现多任务执行(多任务执行),并且LEDG[17:0]能透过软件被SW[17:0]控制。

z本实验特色实验者从零开始建立一个基于Nios II的μC/OS-II应用实验系统(也可以认为是一个Nios II+μC/OS-II的应用框架)具有以下一些作用。

1. 读者可以借助SOPC Builder工具自行对Nios II软核处理器进行配置。

2. 很多范例都是纯硬件的Verilog 代码,需要自行从零开始建立Nios II系统,不能够直接使用Altera或友晶科技公司已经建立好的Nios II系统。

实验一 uCOS-II环境搭建

实验一 uCOS-II环境搭建

实验一实验环境搭建一:实验目的:1.安装Borland c++。

2.完成实验环境搭建。

3.学会建立工程。

二:实验内容:1.安装Borland C++:注意:安装到c盘中2.安装TASM 5.0注意:安装到C盘根目录下。

3.配置环境变量。

找到变量名为“path”的项,在“变量值”中,填写“C:\TASM\BIN”。

4.搭建开发环境。

(1).新建一个工程在新建工程界面中进行设置。

在 Project Path and Name 中设置为“C:\software\uCOS-II\EX1_x86L\BC45\source\test.ide”。

在Target Type 中选择“Application[.exe]”。

在 Platform 中选择“DOS(Standard)”。

在 Target Model 中选择“Large”。

其他选择都为默认。

(默认是将uC/OS 放在 C 盘根目录下的,放在别的盘符下自己进行修改。

)设置完成后,点击“OK”(2)新建的工程会包含一个默认的“.cpp”文件。

(3)删除默认的test.cpp。

(4)添加新文件:依次添加以下文件:(1)“C:\software\uCOS-II\EX1_x86L\BC45\SOURCE”里的“test.c”文件。

(2)在“C:\software\uCOS-II\Ix86L\BC45”中,在 List Files of Type中选择“All file(*.*)”。

然后在选“os_cpu_a.asm”和“os_cpu_c.c”(3)在“C:\software\uCOS-II\SOURCE”中,选择“ucos_ii.c”文件(4)在“C:\software\BLOCKS\PC\BC45”中,选择“pc.c”文件(5).在project->build all,如果出现如下情况:就这个!这个文件在“C:\BC45\BIN”文件夹中(也就是开发环境的目录下),把它拷贝到“C:\software\uCOS-II\EX1_x86L\BC45\SOURCE”目录下(也就是我们工程目录下) 然后重新点击:project->build all。

实验七 ucOS-II综合实验-机器人综合例程实验新

实验七 ucOS-II综合实验-机器人综合例程实验新

实验七ucos-II 综合实验—机器人综合控制实例一.实验目的1.掌握如何运行ucos-II 嵌入式操作系统。

2.掌握开发一个基于ucos-II的嵌入式系统应用实例。

3.掌握控制移动机器人电机转速的控制方法。

二.实验环境1.TEB-CM5000嵌入式单片机实验系统2.MDK4.7嵌入式软件开发环境三.实验内容1.熟悉TEB-CM5000嵌入式单片机实验系统上的电机控制电路和码盘数据采集电路等。

图1 电机转速控制和检测电路其中MD+和MD-控制电机转动,构成了H桥直流电机驱动电路,当MD+=1,MD-=0时,电机正转;当MD+=0,MD-=1时,电机反转。

PT1为电机转速测量电路,通过读取PT1上的脉冲从而计算出电机的转动速度。

按钮电路如下:图2 按钮电路其中使用按键1(找到合适的按键就行)控制电机的转动方向,按键2(找到合适的按键就行)控制电机的速度,设定为两个级别:快和慢。

初始时,电机停转;当按键2第一次按下时,电机速度慢;当按键2第二次按下时,电机速度快。

图3 串口通信电路电机转动的测量速度和方向,每当发生速度切换时,通过串口向电脑发送方向和具体的速度值。

2.实验箱多余接口方便同学实验连接需要。

图4 ARM部分扩展接口3. 参考”ucosii_mailbox4labbox”的ucosii邮箱通信程序,完成整个程序设计和开发。

4. 实验结束后,结合书中的综合实例,表述一个智能机器人小车的轮速是怎么来进行测量和控制的。

四.实验要求1.根据实际情况完成其中的部分任务即可,鼓励完成所有内容。

2.学习书籍有关ucosii综合开发的代码,结合参考例程,开发实验要求的内容,并根据实验箱实际的连接电路,编译和下载代码到实验箱,观察结果;在实验报告中说明其运行的结果。

3.通过开发此部分实验内容,能够衍生考虑到控制一个机器人小车的过程。

五.实验提交要求1.按照实验模板完成实验报告,其中包括实验要求的所有内容。

2.提交电子版报告,撰写程序流程图,并且提交程序主要代码。

实验八 uCOS-II的互斥信号量

实验八 uCOS-II的互斥信号量

实验八uCOS的互斥信号量一:实验目的:1.理解互斥型信号量。

2.学会使用互斥型信号量实现对共享资源的独占式处理。

3.解决任务在使用独占式资源出现的优先级反转问题。

二:实验内容:完成教材5-7实验,使用互斥型信号量实现对共享资源的独占式处理。

实验中要求要创建互斥型信号量,请求互斥型信号量,发送互斥型信号量,删除互斥型信号量。

三:程序代码:#include "includes.h"#define TASK_STK_SIZE 512OS_STK StartTaskStk[TASK_STK_SIZE];OS_STK MyTaskStk[TASK_STK_SIZE];OS_STK YouTaskStk[TASK_STK_SIZE];OS_STK HerTaskStk[TASK_STK_SIZE];INT16S key;char *s1="MyTask running--yangkun";char *s2="YouTask running--yangkun";char *s3="HerTask running--yangkun";char *s4="MyTask pend_Semp";char *s5="HerTask pend_Semp";INT8U err;INT8U y=0;INT32U Times=0;OS_EVENT *Semp;void StartTask(void *pdata);void MyTask(void *pdata);void YouTask(void *pdata);void HerTask(void *pdata);void main (void){OSInit();PC_DOSSaveReturn();PC_VectSet(uCOS, OSCtxSw);Semp=OSMutexCreate(1,&err);OSTaskCreate(StartTask,(void*)0,&StartTaskStk[TASK_STK_SIZE - 1], 0);OSStart();}void StartTask (void *pdata){#if OS_CRITICAL_METHOD == 3OS_CPU_SR cpu_sr;#endifpdata = pdata;OS_ENTER_CRITICAL();PC_VectSet(0x08, OSTickISR);PC_SetTickRate(OS_TICKS_PER_SEC);OS_EXIT_CRITICAL();OSStatInit();OSTaskCreate(MyTask,(void*)0,&MyTaskStk[TASK_STK_SIZE - 1], 3);OSTaskCreate(YouTask,(void*)0,&YouTaskStk[TASK_STK_SIZE - 1], 4);OSTaskCreate(HerTask,(void*)0,&HerTaskStk[TASK_STK_SIZE - 1], 5);for (;;){if (PC_GetKey(&key) == TRUE) {if (key == 0x1B) {PC_DOSReturn();}}OSTimeDlyHMSM(0, 0, 3, 0);}}void MyTask(void *pdata){#if OS_CRITICAL_METHOD==3OS_CPU_SR cpu_sr;#endifpdata=pdata;for(;;){OSTimeDlyHMSM(0,0,0,200);{PC_DispStr(10,++y,s4,DISP_BGND_BLACK+DISP_FGND_WHITE);OSMutexPend(Semp,0,&err);PC_DispStr(10,++y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);}OSTimeDlyHMSM(0,0,0,200);}}void YouTask(void *pdata){#if OS_CRITICAL_METHOD==3OS_CPU_SR cpu_sr;#endifpdata=pdata;for(;;){PC_DispStr(10,++y,s2,DISP_BGND_BLACK+DISP_FGND_WHITE);OSTimeDlyHMSM(0,0,0,300);}}void HerTask(void *pdata){#if OS_CRITICAL_METHOD==3OS_CPU_SR cpu_sr;#endifpdata=pdata;for(;;){PC_DispStr(10,++y,s5,DISP_BGND_BLACK+DISP_FGND_WHITE);OSMutexPend(Semp,0,&err);PC_DispStr(10,++y,s3,DISP_BGND_BLACK+DISP_FGND_WHITE);for(Times;Times<20000000;Times++){OS_Sched();}PC_DispStr(20,++y,"***************",DISP_BGND_BLACK+DISP_FGND_WHITE);OSMutexPost(Semp);OSTimeDlyHMSM(0,0,1,0);}}四:实验结果:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P95-97任务延时函数OSTimeDly
实验5
• • •
让任务阻塞式延时
掌握操作系统的初始化过程 步骤 1.不改动代码,输入参数1,全速运行,打开WINDOWS任务管理器,查看, 如图
注意
• • • • • • Os_cpu.c中,确定 void OSTaskIdleHook (void) { Sleep(1); } 要改成这样,否则空闲任务也在不同的运 行,看不到系统利用率的变化情况。加上 这一句,将空闲任务的系统利用率降低
• 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.说明使用消息邮箱实现的功能,为什么 能实现这样的功能,都使用了哪些数据结 构。
补充,各个例子的运行结果展示 1
准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P24-40 2.1任务管理的重要数据结 构,为以后的实验做准备
实验2
调试模式跑第一个任务
• 本实验的目的在于学会使用VC的调试模式 运行和调试操作系统。 • 步骤 • 1.在上次实验的基础上不改动代码,打开工 程 • 2.在usercode.c中的 • printf(“welcome to embeded system\n”);处 设置断点。
• 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 跑第一个任务 调试模式跑第一个任务 任务的创建 操作系统初始化 让任务阻塞式延时 两个任务交替运行 理解任务堆栈和任务切换 理解多任务的启动 任务的挂起和恢复 信号量管理实验 互斥信号量管理实验 事件标志组管理实验 消息邮箱管理实验 消息队列管理实验 内存管理实验
• 10.在观察窗口watch window输入j, 连续按 F5查看j的变化和屏幕的输出。 • 11.按SHIFT+F5或使用菜单结束调试,记录 • 12说明watch window的作用,尝试在watch window中输入操作系统的重要全局变量, P247表7.1,观察他们的值
下次实验的准备工作
• 2.修改代码,使用阻塞式延时,查看书上95 页3.2.3,修改延时代码
• 3.重新编译,运行。使用任务管理器查看系 统利用率。
• 4.记录实验过程,说明发生这种变化的原理。
• 下次实验前准备:继续看2.1,加深对操作 系统采用的重要数据结构的理解
实验6
两个任务交替运行
• 1.编译运行代码,输入选项2运行程序 • 2.运行查看结果
Hale Waihona Puke • 3.查看代码,说明为什么得到这样的运行 结果 • 4.修改usercode.c中E2_task2函数,要求 其输出值增长速度只有E2_task1的1/2,修 改后重新编译运行 • 5.改变任务的优先级,让E2_task1的优先 级为6, E2_task2的优先级为5,查看运行 结果,说明输出的不同之处,说明原因
补充,各个例子的运行结果展示 2
下次实验的准备
• 预习《嵌入式实时操作系统μC/OS原理与 实践》P73-80任务的调度为下次试验做准 备
实验7
理解任务堆栈和任务切换
• 1.使用原始代码 • 2.查看在main.c,说明两个用户任务的堆 栈都是什么,堆栈的地址是怎么传递给任 务创建函数的。 • 3.在OS_Sched函数中设置断点。跟踪调 试,说明OS_Sched实现了哪些功能,画 出流程图 • 4.继续调试OS_TASK_SW,根据书章2.1 中对堆栈的描述,论述压栈和退栈的处理 过程。
• 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P154,运行结果见 P159图4.14 • 2. 程序运行后,输入5选择例子程序5 • 3.重新编译运行,查看结果 • 4.说明使用互斥信号量实现的功能,为什 么能实现这样的功能,都使用了哪些数据 结构。 • 5.说明为什么解决了优先级反转的问题
• 5.实现P230,习题8(在usercode.c中编写 三个函数,并修改usercode.h中的声明, 修改main.c,重新编译查看效果)
补充,各个例子的运行结果展示 8
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P231-244 内存管理
实验15 内存管理实验
• 6.VC环境下,在工程上点鼠标右键,查看工程的 设计 • 7.打开main.c,编辑使#define Experiment 1,使用 REBUILD ALL 进行编译,找到可执行文件的输出 目录,记录下来 • 8.使用菜单或快捷按钮再次执行编译好的程序。查 看运行结果并记录,查看main.c及usercode.c,分 析main.c及usercode.c代码。 • 9.说明任务堆栈的定义位置,任务在什么时候被创 建,任务在什么时候获得运行。 • 10.自己修改代码,减少延时时间,或将每次加1 改为其他算法,查看效果!
• 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P241,运行结果见 P244图6.3 • 2. 程序运行后,输入9选择例子程序9 • 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都由哪些部分组成
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
下次实验的准备
• 预习《嵌入式实时操作系统μC/OS原理与 实践》P83-84多任务的启动为下次试验做 准备
实验8
理解多任务的启动
• 1.使用原始代码 • 2.查看在main.c,在OSStart();处设置断点。 • 3.调试模式运行,跟踪进OSStart,然后单 步运行。参考P83-85分析代码。 • 5.画出OSStart流程图 • 4.说明OSStart的功能,说明多任务启动的 标志是什么
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P67-72任务的挂起和恢复
实验9
任务的挂起和恢复
• 1.编译运行代码,输入选项3继续运行程序 • 2.运行查看结果
• 3.查看代码,说明为什么得到这样的运行 结果 • 4.对任务代码进行修改,得到不同的结果 • 5.改变任务的优先级,查看运行结果,说 明输出的不同之处,说明原因
补充,各个例子的运行结果展示 3
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P102-129 • 事件管理的重要数据结构,事件管理程 序,信号量管理
实验10 信号量管理实验
• 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P129,运行结果见 P133图4.9 • 打开原始工程运行代码,输入选项4继续 运行程序 • 2.运行查看结果 • 3.说明使用信号量实现的功能,为什么能 实现这样的功能,都使用了哪些数据结构。
• 5.自己设计一个使用时间标志组的例子, 编程实现并运行,记录结果。
补充,各个例子的运行结果展示 5
下次实验的准备工作
• 阅读《嵌入式实时操作系统μC/OS原理与 实践》P159-189 4.5事件标志组
实验12 事件标志组管理实验 • 1.例子程序说明见《嵌入式实时操作系统 μC/OS原理与实践》 P184,运行结果见 P159图4.20 • 2. 程序运行后,输入6选择例子程序6 • 3.重新编译运行,查看结果 • 4.说明使用事件标志组实现的功能,为什 么能实现这样的功能,都使用了哪些数据 结构。
相关文档
最新文档