μCOS-II移植实验
嵌入式μcosii内核实验四哲学家就餐问题的实现
操作系统配置
#define OS_LOWEST_PRIO
7
/*任务优先级不能够不小于7*/
#define OS_SEM_EN
1
/*是否允许使用信号量功能*/
#define OS_MAX_EVENTS
5
/*最多能够有5个事件*/
#define OS_TICKS_PER_SEC 200 /*设置每秒之内旳时钟节拍数目*/
本试验中所用到旳µC/OS-II有关函数
□ OSTaskCreateExt () : 创建一种任务 □ OSSemCreate() :建立并初始化一种信号量 □ OSSemPend() :申请信号量 □ OSSemPost() :释放信号量 □ OSTimeDly():将一种任务延时若干个时钟节拍
操作系统配置
#define OS_TASK_CREATE_EN
1
/*允许使用OSTaskCreate()*/
#define OS_TASK_STAT_EN
0
/* 禁止统计任务*/
#define OS_MAX_TASKS
6
/*最多能够创建6个任务*/
ห้องสมุดไป่ตู้
#define OS_TASK_CREATE_EXT_EN 1 /*是否允许使用OSTaskCreateExt()*/
源程序阐明
TaskStart负责:
□安装时钟中断服务例程
–ucos_x86_idt_set_handler(0x20,(void *)OSTickISR,0x8e00);
□初始化操作系统时钟
–ucos_timer_init();
□创建信号量
–fork[i] = OSSemCreate(1);
五、ucos-II的移植-智能嵌入技术开发与实践-佟国香-清华大学出版社
11
Intel/AMD 80186 Motorola 68HC11
\SOFTWARE\uCOS-II\Ix86S \OS_CPU.H \OS_CPU_A.ASM \OS_CPU_C.C \SOFTWARE\uCOS-II\Ix86L \OS_CPU.H \OS_CPU_A.ASM \OS_CPU_C.C \SOFTWARE\uCOS-II\68HC11 \OS_CPU.H \OS_CPU_A.ASM \OS_CPU_C.C
➢ uC/OS-II的全部源代码量大约是6000-7000行,一共有15 个文件。将 uC/OS-II 移植到ARM处理器上,需要完成的工 作也非常简单,只需要修改三个和ARM体系结构相关的文件 ,代码量大约是500行。
14
移植工作
如果处理器和编译器满足了μC/OS-Ⅱ的要求,并 且已经有了必要工具。移植工作包括以下几个内容: (1)用#define设置一些常量的值(OS_CPU.H) (2)声明10个数据类型(OS_CPU.H) (3)用#define声明三个宏(OS_CPU.H) (4)用C语言编写六个简单的函数(OS_CPU_C.C) (5)编写四个汇编语言函数(OS_CPU_A.ASM)
7
处理器支持硬件堆栈
COS-II进行任务调度的时候,会把当前任 务的CPU寄存器存放到此任务的堆栈中,然后, 再从另一个任务的堆栈中恢复原来的工作寄存器 ,继续运行另一个任务。所以,寄存器的入栈和 出栈是COS-II多任务调度的基础。
处理器中有专门的指令处理堆栈,可以灵活 的使用堆栈。
μCOS-II-下-LwIP-协议栈的移植和测试
1、引言为了实现嵌入式系统终端连入互联网,而有必要为其引入了网络功能。
μC/OS II 是一个源代码开放的实时操作系统,但是它只是一个实时的任务调度及通信内核,并没有集成TCP/IP 通信协议,为了实现网络功能,需要在μC/OS II 移植一个轻量级的TCP/IP 通信协议LwIP。
本文主要论述μC/OS II 下通信协议LwIP 的移植以及测试。
2、LwIP 简介LwIP ( light weight IP)是瑞士计算机科学院的Adam Dunkels 等开发的一套开放TCP/IP 协议栈源代码。
LwIP 既可以移植到操作系统上,又可以在无操作系统的情况下独立运行。
LwIP 实现的重点是在保持TCP/IP 协议主要功能的基础上减少对RAM 的占用,这使LwIP 适合在低端嵌入式系统中使用。
其主要特点如下:(1)支持多网络接口下IP 转发;(2)支持ICMP 协议;(3)包括试验性扩展的UDP;(4)包括简单的拥塞控制,RTT 估算和快速恢复和快速转发的TCP;(5)提供专门的内部回调接口(Raw API)用于提高应用程序性能;(6)可选择的Berkeley 接口API;3、LwIP 协议栈移植到μC/OS II 操作系统的具体实现3.1 嵌入式系统结构和LwIP 接口整个嵌入式系统的结构如图 1 所示,由ARM 微处理器、网卡、网络设备驱动、μC/OSII 操作系统、LwIP 协议栈和应用程序组成。
图 1 嵌入式系统结构图LwIP 在设计时为了适应不同的操作系统,并没有在代码中使用和某个特定的操作系统相关的系统调用和数据结构,而是在LwIP 和操作系统之间提供了一个接口层(sys_arch interface),该接口主要实现的功能包括数据类型的定义、存储模式的选择、任务间的同步、时间和内存的管理等。
因此,完成LwIP 在μC/OS II 移植,我们就是要通过修改这个接口层来实现。
同时,还要根据自己所要实现的具体目的,可以对LwIP 协议栈进行一定的裁减。
μCOS-II在ARM920T上的移植
SIC &T H LG CNE E N OY E C0 .
匝圆
l COS I AR 2 T上 的 移 植 a -I 在 M9 0
吴 迪 Biblioteka ( 州大学 电子 信息 学院 江 苏苏 州 2 0 0) 苏 1 0 5
摘 要 : c o —I是 一 个 完 整 的 固 化 剪 裁 的抢 占 式 实 时 多任 务 内核 。 今 , 8 到 6 位 ,“c o —I 已 经 在 超 过 4 种 不 同 架 构 的 /s I 至 从 位 4 /s I 0 微 处 理 器 上 运 行 。 界 上 已 有 数 千 人 在 各 个 领 域 中 使 用 c os I 这 些 领 域 包 括 航 空 业 , 端 音 响 医 疗 器 械 , 子 乐 器 , 动 机 控 世 / -I , 高 电 发 制 、 络 设 备 、 速 公 路 电话 系 统 以 及 工 业 机 器 人 等 。 文 介 绍 了该 操 作 系统 在 AR 0 CP 网 高 本 M9 T U ̄ 的 移 植 。 2 关 键 词 : c o -I / s I 移 植 AR M 中 图 分 类 号 : P 1 T 3 6 文 献标 识 码 : A 文 章 编 号 : 7 -3 9 ( 0 0 1 () 0 9 2 I 2 7 l2 1 ) c一0 0 —0 6 0
对 于 PC机 , 开 机 后 的初 始化 处 理 器 其 配 置 、 件 初始 化 等操 作是 由BI 硬 OS( sc Ba i I p t / t u S se 完 成 的 , 对干嵌 nu Ou p t y tm) 但
系统 。 后 由 操作 系统 接 管 整 个 系 统 , 行 然 进 进程管理、 内存 管 理 、 盘 管 理 和 各 个外 设 磁
嵌入式操作系统μCoS-Ⅱ的移植
2 I S Ⅱ的 移 植 分 析  ̄ CO -
2. 移 植 概 述 1
Байду номын сангаас
1 C 一 oS Ⅱ简 介
/ O 一  ̄ S Ⅱ是 一 个 基 于 优 先 级 的抢 占式 实 时 多 C
所谓 移植 , 就是 使一 个实 时 内核能 在其 他 的微 处理 器或 微控 制器 上运 行 。为 了方便 移植 , 大部 分
任务 操作 系统 , 它包含 了实时 内核 、 任务 管理 、 间 时
C S Ⅱ是 用 C语 言编写 的 , O一 但与 硬 件 有关 的 代码
仍需要 用 汇 便 语 言 编 写 。t O — 在 设 计 之 初 已  ̄ SI C I
管理 、 信号 量 、 内存管 理等 , 用 于 8位 1 可 6位 和 3 2
维普资讯
第2 卷 第1 3 期
金 陵 科 技 学 院 学 报
Vo12 N o. . 3. 1
27 月 0 年3 0
JU N LO N IGIS I E O R A F LN T1 T 里 J I N =
Q
Ma.2 0 r ,0 7
随着 现代化 技术 的发 展 , 入式 系统 的应用 范 嵌 围越来 越广 泛 , 于嵌 入式 技术 的产 品从尖 端 复杂 基
自己 的 需 要 对 C S Ⅱ进 行 裁 剪 。t O —I 代 O  ̄ S I源 C
码 公开 , 部分 是 用 A IC编 写 的 , 有 与 处 理 大 NS 只
T ePo tn fEmb d e e ai gS se p h ri go e d d Op r tn y tm  ̄ COS Ⅱ -
GAO iyig Cu — n
( hnd n e i e nl y C egu 109 C i ) C egu i rt o T c o g, hnd 05 , h a U v sy f h o 6 n
嵌入式μCOS-II内核实验四(哲学家就餐问题的实现)
目录
• 引言 • 哲学家就餐问题概述 • μcos-ii内核任务管理 • 哲学家就餐问题的μcos-ii实现 • 实验结果与分析 • 总结与展望
01
引言
嵌入式系统与μcos-ii内核简介
嵌入式系统
是一种专用的计算机系统,主要用于控制、监视或帮助操作 机器设备。它通常具有实时性、可靠性和低功耗等特点,广 泛应用于工业控制、智能家居、医疗设备等领域。
任务优先级与调度
任务优先级
在μcos-ii内核中,每个任务都有自己 的优先级。优先级高的任务会优先获 得CPU的使用权。
任务调度
μcos-ii内核使用基于优先级的抢占式任务 调度算法。当一个高优先级的任务就绪时, 内核会立即抢占当前正在运行的任务,并切 换到高优先级的任务上运行。
任务同步与通信
任务同步
解决方案的分类与比较
解决方案分类
解决哲学家就餐问题的方案可以分为两类:静态方案和动态方案。静态方案在 系统启动时分配固定的资源,而动态方案则在运行时动态地分配资源。
解决方案比较
静态方案实现简单,但可能导致死锁或饥饿问题。动态方案可以更好地解决这 些问题,但实现起来较为复杂,需要更多的系统资源和时间。在实际应用中, 需要根据具体需求和系统限制选择合适的解决方案。
05
实验结果与分析
实验环境与配置
01
硬件平台
ARM Cortex-M4微控制器 (具体型号为
STM32F407ZGT6)
02
开发环境
Keil uVision5
03
04
实验任务
实现基于μcos-ii内核的多任务 切换
配置参数
任务优先级、任务堆栈大小、 任务状态等
基于X86体系μCOS-Ⅱ在VC6.0下的移植
I t e VC + 6 0 c mp l n i n n a e n x 6 c mp tr ami gt r vd e c i ga d la i g I ot h + . o i e vr me tb s d o 8 o u e . i n p o i et a hn n e r n e o o n
DS O 下面那么容易, 直接通过一个 函数调用就能够 修改中断。wno s下要修 改 中断涉及 到驱 动程 i w d 序, 这样就加大了移植的困难度与复杂度 。因此 , 考 虑到本 移植 只是 为 了教 学 和 学 习 , 并没 有 应 用 到对
Ab t a t T e o ii a CO —I e a l s ae c mp ld o o ln / + , ih i n tfmi a sr c : h r n lt S g x I x mp e r o i n B r d C C + wh c s o a l r e a i frmo tla n r ,S h y h v o a a tt t e c mp l n i n n eo e la i g C o s e r e s O t e a e t d p h o i e v r me tb fr e r n OS—I. a e n o e o n I B sd o
第 5期 21年 1 0 1 O月
微
处
理
机
N . o5
uCOSII在cortexM3上的移植方法和步骤
void void
OS_CPU_SysTickInit(void); OS_CPU_SysTickClkFreq(void);
3. 修改 OS_CPU_C.C: 将以下代码注释掉:
4. 修改 OS_CPU_A.ASM: 由于编译器的原因,将“PUBLIC”关键词改为”EXPORT”. 并将原来的: RESG CODE: CODE:NOROOT(2) 修改为:
二、 建立存放目录:
在选定的逻辑盘上新建一个文件夹,如: LED,在 LED 文件夹下面新建下面 5 个文件夹, 如下图所示:
这些文件夹存放内容分配如下: 1. BSP: 主要用来存放板级支撑程序,如:功能模块初始化程序,端口初始化程序等。 2. Libraries: 用来存放 Stm32 官方库函数文件,这些库文件可以从官方网站下载得到, 本文中使用的版本是 3.5 版,进入 Ligraries 后可以看到下面两个文件夹:
3. Project: 存放工程文件,包括输出文件,列表文件等,具体存放内容再后面会有进 一步的介绍。 4. uCOS-II: 存放操作系统文件, 将前面讲到的文件夹 Ports 和 Sourec 连内容一起复制 到此文件下面,如下图所示:
2 / 12
5. User:存放用户源程序文件。
三、 创建工程:
1. 打开 Keil MDK,新建一个名为”LED”的工程,将工程文件存放在 LEDProject 文件下 面,控制器选 STM32F103RB。 2. 按下图建立 Project Target,Groups。
3 / 12
3. 在相应的 Groups 下面添加或者新建源程序文件和头文件:
4 / 12
ห้องสมุดไป่ตู้
uC_OS-II实验指导书
第8章 移植ucosII
开发工具的要求
C编译器要能够产生可重入代码 编译器要能够产生可重入代码 C编译器还要支持汇编语言程序 编译器还要支持汇编语言程序 C编译器还必须提供一个机制来从 中打开和关闭中断 编译器还必须提供一个机制来从C中打开和关闭中断 编译器还必须提供一个机制来从
有些编译器允许用户在C源代码中插入汇编语言来实现该功能 有些编译器允许用户在 源代码中插入汇编语言来实现该功能 有些编译器可以直接从C中允许和禁止中断 有些编译器可以直接从 中允许和禁止中断
OSStartHighRdy()
在系统启动时, 在系统启动时,运行系统当前最高优先 级的任务
void OSStartHighRdy (void) { 调用用户定义的OSTaskSwHook(); 调用用户定义的 OSRunning = TRUE; 得到要恢复运行任务的堆栈指针; 得到要恢复运行任务的堆栈指针 Stack pointer = OSTCBHighRdy->OSTCBStkPtr; 从新任务堆栈中恢复处理器的所有寄存器; 从新任务堆栈中恢复处理器的所有寄存器 执行中断返回指令; 执行中断返回指令 }
void OSTickISR(void) { 保存处理器寄存器; 保存处理器寄存器 调用OSIntEnter()或者直接将 OSIntNesting加1; 调用 或者直接将 加 if(OSIntNesting==1) { OSTCBCur->OSTCBStkPtr=stack Pointer; } 给产生中断的设备清中断; 给产生中断的设备清中断 重新允许中断(可选) 重新允许中断(可选); 调用OSTimeTick(); 调用 调用OSIntExit(); 调用 恢复处理器寄存器; 恢复处理器寄存器 执行中断返回指令; 执行中断返回指令 }
可移植的ucOS-II C源程序代码规范
*/
6
可移植的µcOS-II
C 源程序代码规范
Use trailing comments as much as possible.
As much as possible, always start the trailing comment on the same column. If the code goes beyond the selected column, place the comment on the line just above while still starting at the same column. As much as possible, line up the terminating comment charaters. Using trailing comments allows the code to be visually separate from the code.
*/
一个完整的程序文件是一个包含可执行语句文件,而头文件则不是。这两种文件看起
来很相像,如下所示。一个程序文件将包含部分或全部以下内容。
执行文件的布局: File heading Revision history
(文件头) (版本更新纪录)
4
#include
(包含文件)
#define constants (常量定义)
}
} else {
ClkMin++;
}
} else {
ClkSec++;
}
ቤተ መጻሕፍቲ ባይዱ
}
不要将单句注释分隔成多行。
从来也不要这样做:
/* This type of comment can lead to confusion especially when describing a function like ClkUpdateTime (). The function looks like actual code! */
uCOS-II在51单片机上的移植
功能
处理临界段方式选择 堆栈增长方向 进入临界区 退出临界区 就绪态最高优先级任务运行 任务级任务切换 中断级任务切换 时钟节拍 任务堆栈初始化
表7-1 需要修改的关键函数和宏定义
6
7.1.6 INCLUDES.H
* * * * * * 文件名 : INCLUDES.H * 作者 : Jean J. Labrosse ****************************************************************************/
9
7.1.8 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()
临界代码的概念。 uC/OS-II定义的两个宏。
{ OS_ENTER_CRITICAL(); /* µC/OS-II 临界代码段 */ OS_EXIT_CRITICAL(); }
#define OS_ENTER_CRITICAL() EA=0 #define OS_EXIT_CRITICAL() EA=1 #define OS_ENTER_CRITICAL() \
例如,任务A和任务B都要调用函数Swap(), 而该函数又使用了全局变量temp。于是当任 务A调用Swap()函数期间,系统发生了任务 切换而使任务B也调用了Swap(),那么任务B 将要改变全局变量temp的值,使任务A传递 给全局变量temp的值丢失而出现错误。
一般来说,一个可重入函数应该在函数中只 使用局部变量,因为函数的局部变量存储在 任务的堆栈中,所以可保证不同的任务在调 用同一个函数时不会发生冲突。
/ ******************* 与处理器相关的代码 ********************/ #define OS_CRITICAL_METHOD ?? #if OS_CRITICAL_METHOD = = 1 #define OS_ENTER_CRITICAL() ?? #define OS_EXIT_CRITICAL() ?? #endif
基于μCOS-II智能公交系统终端设计与实现
D e s i n a n d i m l e m e n t a t i o n o f i n t e l l i e n t b u s s s t e m g p g y / t e r m i n a l b a s e d o nμ C O S- I I
,WANG ,WANG i n S UN Y a n M e n l o n Y i n - - j g g g g
2 0 1 2年1 2月 第3 3卷 第1 2期
计算机工程与设计
C OMP UT E R E NG I N E E R I NG AN D D E S I GN
D e c . 2 0 1 2 V o l . 3 3 N o . 1 2
:T A b s t r a c t o r o m o t e s t a n d a r d i z e d m a n a e m e n t o f t h e b u s s s t e m a n d i m l e m e n t r e m o t i n m o n i t o r i n o f t h e u b l i c t r a n s o r t a t i o n s s - p g y p g g p p y / t e m, a n i n t e l l i e n t m o n i t o r i n t e r m i n a l b a s e d o n S TM 3 2 F 1 0 3 V C T 6a n d e m b e d d e d r e a l t i m e o e r a t i n s s t e mμ C O S I I i s d e s i n e d . T h e - - g g p g y g f u n c t i o n s a r e a n a l z e d a n d t h e o v e r a l l d e s i n s c h e m e i s i n t r o d u c e d . T h e s e c i f i c i m l e m e n t a t i o n o f e a c h m o d u l e i s d e s c r i b e d . T h e s s t e m y g p p y / s w i t c h i n a n d i m l e m e n t a t i o n o f s s t e m k e r n e l u n d e r C O S I I o e r a t i n s s t e m i s s e c i f i e d . P r a c t i c a l t e s t s s h o w t h a t t h e s s t e m c o n t e x t - g p y p g y p y μ l a t f o r m. r e a l i z e b u s r e m o t i n m o n i t o r i n b r e a l t i m e d a t a a c u i s i t i o n a n d t r a n s m i s s i o n o n G P R S s e r v i c e - p g g y q : ; ; K e w o r d s b u s s s t e m; r e m o t e m o n i t o r i n e m b e d d e d r e a l t i m e o e r a t i n s s t e m; i n t e l l i e n t t e r m i n a l G P R S - y g p g y g y
嵌入式系统设计课程设计-基于μCOS-II的贪吃蛇游戏嵌入式系统实现方案设计
计算机科学与技术学院嵌入式系统设计课程设计设计题目:基于μC/OS-II的贪吃蛇游戏嵌入式系统实现方案设计专业班级:计算机科学学院2008级(2)班组员:指导教师:设计时间:2011/7/4~2011/7/8 设计地点:明理楼B319基于μC/OS-II的贪食蛇游戏设计μC/OS-II实时操作系统简介μC/OS-是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。
μC/OS-II 的前身是μC/OS,最早出自于1992 年美国嵌入式系统专家Jean brosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把μC/OS 的源码发布在该杂志的B B S 上。
μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。
CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。
用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌人到开发的产品中。
μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至 2KB 。
μC/OS-II 已经移植到了几乎所有知名的CPU 上。
严格地说μC/OS--II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。
没有提供输入输出管理,文件系统,网络等额外的服务。
但由于μC/OS--II良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。
一、方案论证方案一如图1.1所示,采用AT89C52和1602液晶显示。
AT89C52芯片是一款非常常用的芯片,具有32个IO口及多个定时器中断,添加外部ram后能够实现ucos-II的移植。
这里AT89C52作为主控芯片,实现多任务操作。
如1602不断刷新显示字符串,流水灯同时产生不同的变化。
移植COS-II中英文翻译资料
中文4200字移植μC/OS-II这篇文章介绍如何将μC/OS-II移植到不同的处理器上。
所谓移植,就是使一个实时内核能在其他的微处理器上运行。
为了方便移植,大部分μC/OS-II的代码是用C语言编写的:但是,仍需要用C语言和汇编语言编写一些与处理器硬件相关的代码,这是因为μC/OS-II在读/写处理器寄存器时,只能通过汇编语言来实现。
由于μC/OS-II在设计前就已经考虑了可移植性,所以它的移植相对来说是比较容易的。
要使μC/OS-II正常运行,处理器必须满足以下要求:(1)处理器的C编译器能产生可重入型代码:(2) 处理器支持中断,并且能产生定时中断(通常为10-100Hz);(3) 用C语言就可以开关中断;(4) 处理器能支持一定数量的数据存储器的硬件堆栈;(5) 处理器有将堆栈指针以及其他CPU寄存器的内容读出、并存储到堆栈或内存中去的指令;如果已经了解处理器和C编译器的技术细节,那么移植的工作是非常容易的,测试一个像μC/OS-II这样的实时内核其实并不复杂,甚至可以在没有任何应用程序下测试,换句话说,就是让内核自己测试自己。
有两种原因要这样做:第一,避免使本来就复杂的事情变的更加复杂化;第二,如果出现问题可以知道问题出在内核代码中,而不是应用程序中。
刚开始时,可以运行一些简单的任务和时钟节拍中断程序。
一旦多任务调度成功运行了,再添加应用程序的任务就更加容易了。
1.1 开发工具如前所述移植μC/OS-II需要标准的C交叉编译器,并且是针对所使用的CPU 的;因为它是一个可剥夺的内核,只能通过C编译器来产生可重入型代码。
同时C编译器还要支持汇编语言程序。
绝大部分为嵌入式系统设计的C编译器都包括汇编器、链接器、定位器。
链接器用来将不同的模块(编译过或汇编过的文件)链接成目标文件;定位器则允许将代码和数据放置在目标处理器的指定内存空间中。
所用的C编译器还提供另一种机制,能在C编译器中开中断和关中断。
μCOS-Ⅱ操作系统
μC/OS-Ⅱ操作系统的简介2009-05-26 22:06μc/os-ii是由jean brosse于1992年编写的一个嵌入式多任务实时操作系统。
最早这个系统叫做μc/os,后来经过近10年的应用和修改,在1999年jean j.labrosse推出了;μc/os-ii,并在2000年得到了美国联邦航空管理局对用于商用飞机的、符合rtca do178b标准的认证,从而证明μc/os-ii具有足够的稳定性和安全性。
μc/os-ii是一个可裁减、源代码开放、结构小巧、可抢占式的实时多任务内核,是专为微控制器系统和软件开发而设计的,是控制器启动后首先执行的背景程序,并作为整个系统的框架贯穿系统运行的始终。
它具有执行效率高、占用空间小、可移植性强、实时性能良好和可扩展性强等特点。
采用μc/os-ii实时操作系统可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应,而且采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。
μc/os-ii的文件体系结构如图1所示。
图1 μc/os-ii的文件体系结构图基于μC/OS—II的嵌入式构件系统设计2009-05-26 22:08引言近些年来,随着嵌入式产品需求的不断增加,嵌入式软件正变得越来越复杂,而产品的开发周期也越来越短。
嵌入式软件开发迫切需要更高效的软件重用手段。
随着软件复用研究成为热点,其核心技术——构件化软件开发方法(CBD)引起了软件工程领域的高度关注,并且在工程应用领域获得了极大的成功。
这种开发方法已在办公应用、电子商务、因特网及分布式网络应用中广泛使用;但在嵌入式领域,构件技术仍处于起步阶段,目前没有一个统一通用的构件规范。
尽管如此,由于基于构件的软件设计方法能够极好地满足嵌入式软件几乎所有的特性(如定制、裁剪、动态演变等),有效缩短产品开发周期,这种设计方法无疑将给嵌入式系统的开发带来巨大的好处。
本文尝试将构件化软件设计思想引入嵌入式软件设计中,提出了一种适用于嵌入式软件的基于构件的软件体系结构,并且在常用输入设备键盘的应用实践中,验证了此体系结构的可行性。
μcos_II之移植篇
/**Author:Callon Huang*Version:1.0*Time:2014/11/5*blog:/u/2451220761*/希望博客也能帮到你~第一步:μcosII源码下载/downloadcenter/STM32固件库stm32f10x_stdperiph_lib.zip的下载第二步:新建文件夹,并准备子目录:其中Software是μcosII源码下载完成后拷贝过来的,其它的都自己新建.App 用来存放应用程序文件,Bsp 用来存放版级驱动文件,Lib 用来存放 STM32 的标准外设库文件,Source 用来存放uCOS 文件第三步:把Software里的uCOS-II、uC-LIB和uC-CPU文件夹到Source里并把后两者拷贝到uCOS-II文件夹里,最后如下:第四步:找到Software\EvalBoards\ST\STM32F103ZE-SK\IAR下的BSP文件夹,复制到Source文件夹下第五步:找到Software\EvalBoards\ST\STM32F103ZE-SK\IAR下的OS-Probe-LCD文件夹,复制到Source文件夹下并改名为APP第六步:解压下载好的stm32f10x_stdperiph_lib.zip固件库:找到stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Librari es\STM32F10x_StdPeriph_Driver下的inc和src文件夹并复制到Lib 文件夹下第七步:复制stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Librari es\CMSIS下的CM3文件夹到Lib文件夹下第八步:删除一些不需要的文件:APP文件夹只需要:BSP文件夹只需要:在Software\CPU\ST\STM32里也有inc和src文件夹,但是比STM32固件库的要多两个文件stm32f10x_systick.c和stm32f10x_systick.h把这两个文件拷贝到SysTick文件夹下.第九步:建立工程my_ucosII,把所有的.c文件和.asm文件都加进来:‘第十步:对工程进行一些设置:Device就不用说了;Target不变;Output勾选上Create HEX File,并在里选择Obj文件夹;C/C++中添加头文件所在路径,否则会出现大量如下编译错误:头文件路径:Libraries文件夹是这三个最后这部分全部设置好后,如下:最后总体设置完如下:Debug里最后下载程序的时候,如果碰到MDK中出现“Error Flash download failed-Cortex-M3”错误,可以通过上面的添加On-chip-Flash来解决。
μCOS
μC/OS-II在S3C44BOX处理器上的移植- ET电子技术网::因此,对μC/OS-II实时操作系统的学习研究、开发、应用具有重要意义。
Samsung S3C4 4B0X 微处理器是三星公司专为手持设备和其它嵌入式应用提供的高性价比的微控制器解决方案。
它使用ARM公司的16位/32位RISC结构,内核是ARM7TDMI,工作在66MHz,片上集成了/html/dianzhijxwz/qianrushixitong/ARMxilie/20070105/101.htm lAnalysiS of Porting c/0s-i I to SkyEye 宋凯熊海泉严丽平Song Kai ::ARⅥ系列的处理器当前有ARbi7、ARM9、ARMgE、ARMIO等多个产品,此~bARM公司合作伙伴,例如Intel也提供基于XScale微体系结构的 S 4 结束语文件的移植,这个文件的实现集中体现了所要移植到处理器uC/OS-II作为一个优秀的实时操作系统已经被移植到各的/content/tp/97497a/2004/000/012/gc127_tp3_12188625.pdf摘要:本文介绍了基于ARM微处理器的µC/OS-II的移植,并对其进行扩展,主要包括内核、lwip、µC/GUI的移植。
关键字:微处理器; µC/OS-II;LWIP TCP/IP协议栈; µC/GUI嵌入式图形用户接口; 实时操作系统0 概述嵌入式操作系统µC/OS-II是一个公开源代码的占先式多任务的微内核RTO S,其特点可以概括为以下几个方面:公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。
内核属于抢占式,最多可以管理60个任务。
目前国内对µC/OS-II的研究和应用都很多。
只要买一本书就可获得源代码,对学校和教育的使用完全免费,商业应用的费用相对也很低。
COS-II原理及应用
μC/OS-II简介 工作原理 μC/OS-II移植简介 μC/OS-II使用初步
周立功单片机
μC/OS-II原理及应用
μC/OS-II简介 工作原理 μC/OS-II移植简介 μC/OS-II使用初步
周立功单片机
μC/OS-II简介
• 概述
μC/OS-II读做“micro C O S 2”,意为“微控制器操 作系统版本2”。μC/OS-II是源码公开的著名实时内 核,可用于各类8位、16位和32位单片机或DSP。从 μC/OS算起,该内核已有10多年应用史,在诸多领域 得到广泛应用。 μC/OS-II是一个完整的、可移植、可固化、可剪 裁的占先式实时多任务内核。μC/OS-II使用ANSI C语 言编写,包含一小部分汇编代码,使之可以供不同架 构的微处理器使用。至今,从8位到64位,μC/OS-II 已在超过40种不同架构的微处理器上运行。
时间管理 信号量 邮箱 内存管理 数据队列
任务1
产生系 统运作 所必需 的节拍
任务2
...
空闲任务
调度程序对 所有任务进 行运行控制
操作系统调度程序
CPU资源
周立功单片机
• 多任务系统工作原理
时间管理 信号量 邮箱 内存管理 数据队列
任务1
0
任务2
1
...
...
空闲任务
n
最多支持64个任务; 个任务 空闲任务一定存在,当所有任务都不运行时才运行空闲任务; 空闲任务一定存在 所有任务都有不同的优先级,优先级为0表示最高,空闲任务 所有任务都有不同的优先级 优先级最低; 任务之间的通信通过ucos提供的各种事件机制进行。
作 者 及 其 著 作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
昆明理工大学信息工程与自动化学院学生实验报告(2012—2013 学年第 2 学期)课程名称:嵌入式系统设计开课实验室:实验五μC/OS-II移植实验一、实验目的●了解μC/OS-II移植条件和内核基本结构。
●掌握将μC/OS-II内核移植到ARM7处理器上的方法和步骤。
二、实验原理1.μC/OS-II文件体系μC/OS-II的文件体系结构见图1,其中应用软件层是基于μC/OS-II上的代码。
μC/OS-II包括3个部分:1)核心代码部分:这部分代码与处理器无关,包括7个源代码文件和1个头文件。
它们负责的功能是内核管理、事件管理、消息队列管理、存储管理、消息管理、信号量处理、任务调度和定时管理。
2)设置代码部分:包括2个头文件,用来配置事件控制块的数目以及是否包含消息管理相关代码等。
3)处理器相关的移植代码部分:包括1个头文件、1个汇编文件和1个C代码文件。
在μC/OS-II的移植过程中,用户所需关注的就是这部分文件。
图1 μC/OS-II文件体系结构2.μC/OS-II移植条件1)处理器的C编译器能产生可重入代码。
可重入代码指的是可以被多个任务同时调用,而不会破坏数据的一段代码;或者说代码具有在执行过程中打断后再次被调用的能力。
2)用C语言就可以打开和关闭中断。
ARM处理器核包含一个CPSR寄存器。
该寄存器包括一个全局中断禁止位,控制它打开和关闭中断。
3)处理器支持中断并且能产生定时中断。
ARM处理器都支持中断并能产生定时中断。
4)处理器支持容纳一定量数据的硬件堆栈。
对于一些只有10根地址线的8位控制器,芯片最多可访问1KB存储单元。
在这样的条件下移植是比较困难的。
5)处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存中的指令。
ARM处理器中汇编指令STMFD可以将所有寄存器压栈,对应也有一个出栈的指令LDMFD。
三、实验内容移植μC/OS-II内核到ARM处理器S3C44B0,在IDE中观察其运行状况。
四、实验步骤1.基本的配置和定义所有需要完成的基本配置和定义全部集中在OS_CPU.H中。
1)定义与编译器相关的数据类型μC/OS-II为保证可移植性,程序中没有直接使用int、unsigned int等定义,而是自己定义了一套数据类型。
2)定义使能和禁止中断宏3)定义栈的增长方向用户规划好栈的增长方向后,定义符号OS_STK_GROWTH的值。
4)定义OS_TASK_SW宏此宏是μC/OS-II从低优先级任务切换到高优先级任务时的调用,可采用两种方式定义:若处理器支持软中断,可使用软中断将中断向量指向OSCtxSW函数;也可直接调用OSCtxSW函数。
2.移植OS_CPU_A.ASM汇编代码文件OS_CPU_A.ASM汇编代码文件有4个汇编函数需要移植。
1)OSStartHighRdy()该函数由OSStart()调用。
OSStart()负责使就绪状态的任务开始运行,其中OSStartHighRdy()负责获取新任务的堆栈指针,并从堆栈指针中恢复新任务的所有处理器。
2)OSCtxSw()该函数由OS_TASK_SW宏调用。
OS_TASK_SW宏由OSSched()调用。
OSSched()负责任务之间的切换。
OSCtxSw()在OSSched()中负责将当前任务对应的处理器寄存器保存到堆栈中,并将任务中需要恢复的处理器寄存器从堆栈中恢复出来。
3)OSIntCtxSw()该函数由OSIntExit()调用。
OSIntExit()由OSTickISR()调用。
OSIntCtxSw()负责在定时中断中任务之间的切换。
4)OSTickISR()时钟节拍函数,由定时中断产生,主要负责在进入时保存处理器寄存器,完成任务切换,退出时恢复寄存器并返回。
3.移植OS_CPU_C.C标准C代码文件OS_CPU_C.C标准C代码文件中有6个函数需要移植。
1)OSTaskStkInit();2)OSTaskCreatHook();3)OSTaskDelHook();4)OSTaskSwHook();5)OSTaskStatHook();6)OSTimeTickHook();后面5个Hook函数又称为钩子函数,主要用来扩展μC/OS-II功能,但必须声明,并不一定要包含任何代码。
唯一必须移植的函数是OSTaskStkInit函数,该函数在任务创建时被调用,它负责初始化任务的堆栈结构。
五、实验参考程序1.OSStartHighRdyldr r4, =addr_OSTCBCur //获得当前任务的TCB地址ldr r5, =addr_OSTCBHighRdy //获得高优先级任务的TCB地址ldr r5, [r5] //获得堆栈指针ldr sp, [r5] //切换到新的堆栈str r5, [r4] //设置当前新任务的TCB地址ldmfd sp!, {r4}msr SPSR_cxsf, r4ldmfd sp!, {r4} //从栈顶获得新状态msr CPSR_cxsf, r4ldmfd sp!, {r0-r12, lr, pc} //启动新任务2.OSCtxSwstmfd sp!, {lr} //保存PC指针stmfd sp!, {lr} //保存LR寄存器stmfd sp!, {r0-r12 } //保存寄存器返回地址mrs r4, cpsrstmfd sp!, {r4} //保存当前CPSR寄存器mrs r4, spsrstmfd sp!, {r4} //保存当前SPSR寄存器# 赋值OSPrioCur = OSPrioHighRdyldr r4, =OSPrioCurldr r5, =OSPrioHighRdy //赋OSPrioCur为当前优先级最高级ldrb r6, [r5]strb r6, [r4]# 获得当前任务的TCB地址ldr r4, =OSTCBCurldr r5, [r4]str sp, [r5] //保存堆栈指针到抢先任务的TCB # 获得高优先级任务的TCB地址ldr r6, =OSTCBHighRdyldr r6, [r6]ldr sp, [r6] //获得新任务的堆栈指针#赋值OSTCBCur = OSTCBHighRdyStr r6, [r4] //设置当前新任务的TCB地址ldmfd sp!, {r4} //按寄存器压栈顺序出栈msr SPSR_cxsf, r4ldmfd sp!, {r4}msr CPSR_cxsf, r4ldmfd sp!, {r0-r12, lr, pc}3.OSIntCtxSwldmia sp!,{ r0-r11, lr} //寄存器压栈sub lr, lr, #4str lr, SA VED_LR //保存LR寄存器#切换到管理员模式mrs lr, SPSRand lr, lr, #0xFFFFFFE0orr lr, lr, #0x13msr CPSR_cxsf, lr#进入管理模式str r12, [sp, # - 8] //保存R12寄存器ldr r12, SA VED_LRstmfd sp!, {r12} //恢复R12保存的任务的PC指针sub sp, sp, #4 //栈指针增加ldmia sp!, {r12} //恢复R12寄存器stmfd sp!, {r12} //保存LR寄存器stmfd sp!, {r0 – r12} //保存寄存器和返回地址mrs r4, CPSRstmfd sp!, {r4} //保存当前CPSR寄存器mrs r4, SPSRstmfd sp!, {r4} //保存当前SPSR寄存器#赋值OSPrioCur= OSPrioHighRdyldr r4, addr_OSPrioCurldr r5, addr_OSPrioHighRdy //赋值OSPrioCur为当前优先级最高级ldrb r6, [r5]ldrb r6, [r4]#获得当前任务的TCB地址ldr r4, addr_OSTCBCurldr r5, [r4]str sp, [r5] //将堆栈指针保存到抢先任务的TCB #获得高优先级任务的TCB地址ldr r6, addr_OSTCBHighRdyldr r6, [r6]ldr sp, [r6]#赋值OSPrioCur= OSPrioHighRdystr r6, [r4] //设置当前新任务的TCB地址ldmfd sp!, {r4} //弹出保存的寄存器并返回msr SPSR_cxsf, r4ldmfd sp!, {r4}msr CPSR_cxsf, r4ldmfd sp!, {r0 – r12, lr, pc}4.OSTickISRstmdb sp!, {r0 – r11,lr}#禁止中断mrs r0, CPSRorr r0, r0, #0x80msr CPSR_cxsf, r0#中断结束清除中断挂起位ldr ro, =I_ISPCldr r1, =BIT_TIMER0str r1, [r0]bl IrqStartbl OSTimeTickbl IrqFinishcmp a1, #0ldrne pc, =_OSIntCtxSw六、实验结果和实验分析体会本次实验通过在老师的指导和同学的帮助下,让我掌握了μC/OS-II的应用以及启动流程;并了解了μC/OS-II操作系统的软件体系结构,掌握μC/OS-II 应用程序的基本结构,虽然对μC/OS-II的学习不是很到位,但是做到了解相关的概念以及基本的操作,并进一步提高了对μC/OS-II移植及应用的理解。