基于X86体系μCOSⅡ在VC60下的移植
嵌入式操作系统μ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
让新人快速实现μc∕os II在arm上的移植方法
三、移植注意事项
在移植μc/OS II到ARM处理器上时,需要注意以下几个方面:
1.特定处理器的代码优化:根据具体的处理器型号进行代码优化,提高代码执行效率。
2.硬件驱动程序的移植:根据硬件接口规范编写相应的设备驱动程序,保证系统硬件正常工作。
3.中断向量表的更新:根据系统需求重新设置中断向量表,保证中断处理程序能够正确执行。
μc/OS II源代码结构比较清晰,其内核部分包括任务管理、时钟管理、事件管理、内存管理和中断管理等模块。应用程序部分包括文件系统、网络协议、通信协议等。需要注意的是,在移植时应根据具体系统硬件情况进行适当的修改和适配,以保证系统正常运行。
在进行移植时,需要注意以下几个方面:
1.特定处理器的代码优化:根据具体的处理器型号进行代码优化,例如利用ARM处理器特有的指令和指令集,优化代码,提高代码执行效率。
1.硬件平台的选择:不同的硬件平台会对系统的运行环境和性能产生决定性影响。因此,选择合适的硬件平台是成功移植μc/OS II的前提。
2.硬件驱动程序的编写:硬件驱动程序是实现设备与操作系统之间通信的关键部分。因此,编写硬件驱动程序时需要深入了解操作系统的相关接口和硬件规范。
基于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
关于UCOS-Ⅱ的移植
关于UC/OS-II的移植网上介绍的已经很多了,比较流行的几款处理器(例如ARM)在网上都可以直接下载移植好的代码。
由于最近选修了一门嵌入式系统的课,用的处理器是EPSON公司的S1C33系列,做实验的时候要进行操作系统的移植,这个周末花了一天半的时间学习了一下,因为毕业设计的时候做过ARM 上的移植,于是将两者比较了一下,给出一般的移植要点。
由于将来实验还要设计到GUI的移植以及文件系统的移植和网络协议的移植,我会将自己的学习笔记都记录下来。
大家下载到源码后,针对Intel 80x86的代码在uCOS-II\Ix86L目录下。
代码是80x86实模式,且在编译器大模式下编译的。
移植部分的代码可在下述文件中找到:OS_CPU.H, OS_CPU_C.C, 和OS_CPU_A.ASM。
大家可以参考这个例子,对它进行修改。
INCLUDES.H 是主头文件,在所有后缀名为.C的文件的开始都包含INCLUDES.H文件。
使用INCLUDES.H 的好处是所有的.C文件都只包含一个头文件,程序简洁,可读性强。
缺点是.C文件可能会包含一些它并不需要的头文件,额外的增加编译时间。
与优点相比,多一些编译时间还是可以接受的。
用户可以改写INCLUDES.H文件,增加自己的头文件,但必须加在文件末尾。
//////////////////////////////////////////////////////////一、(1)OS_CPU.H文件的移植(针对S1C33209)//////////////////////////////////////////////////////////OS_CPU.H 文件中包含与处理器相关的常量,宏和结构体的定义。
#ifdef OS_CPU_GLOBALS#define OS_CPU_EXT //全局变量#else#define OS_CPU_EXT extern#endif//////////////////////////////////////////////////////////由于不同的处理器有不同的字长,µC/OS-II的移植需要重新定义一系列的数据结构。
μC-OS-Ⅱ移植
移植 µC/OS-Ⅱ Ⅱ这一章介绍如何将 µC/OS-Ⅱ移植到不同的处理器上。
所谓移植,就是使一个实时内核 能在某个微处理器或微控制器上运行。
为了方便移植,大部分的 µC/OS-Ⅱ代码是用 C 语言 写的;但仍需要用 C 和汇编语言写一些与处理器相关的代码,这是因为 µC/OS-Ⅱ在读写处 理器寄存器时只能通过汇编语言来实现。
由于 µC/OS-Ⅱ在设计时就已经充分考虑了可移植 性,所以 µC/OS-Ⅱ的移植相对来说是比较容易的。
如果已经有人在您使用的处理器上成功 地移植了 µC/OS-Ⅱ,您也得到了相关代码,就不必看本章了。
当然,本章介绍的内容将有 助于用户了解 µC/OS-Ⅱ中与处理器相关的代码。
要使 µC/OS-Ⅱ正常运行,处理器必须满足以下要求: 1. 处理器的 C 编译器能产生可重入代码。
2. 用 C 语言就可以打开和关闭中断。
3. 处理器支持中断,并且能产生定时中断(通常在 10 至 100Hz 之间)。
4. 处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈。
5. 处理器有将堆栈指针和其它 CPU 寄存器读出和存储到堆栈或内存中的指令。
像 Motorola 6805 系列的处理器不能满足上面的第 4 条和第 5 条要求,所以 µC/OS-Ⅱ 不能在这类处理器上运行。
图 8.1 说明了 µC/OS-Ⅱ的结构以及它与硬件的关系。
由于 µC/OS-Ⅱ为自由软件,当用 户用到 µC/OS-Ⅱ时,有责任公开应用软件和 µC/OS-Ⅱ的配置代码。
这本书和磁盘包含了所 有与处理器无关的代码和 Intel 80x86 实模式下的与处理器相关的代码(C 编译器大模式下 编译) 。
如果用户打算在其它处理器上使用 µC/OS-Ⅱ,最好能找到一个现成的移植实例,如 果没有只好自己编写了。
μC/OS-II操作系统在各种处理器上的移植
μC/OS-II操作系统在各种处理器上的移植信息来源: 维库开发网发布时间:2009年12月29日μC/OS-II操作系统是一种抢占式多任务、单内存空间、微小内核的嵌入式操作系统,具有高效紧凑的特点。
它执行效率高,占用空间小,可移植性强,实时性能良好且可扩展性强。
采用μC/OS-II实时操作系统,可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应;采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。
μC/OS-11非常适合应用在一些小型的嵌入式产品应用场合,在家用电器、机器人、工业控制、航空航天、军事科技等领域有着广泛的应用。
单片机、ARM、FPGA与μC/OS-II操作系统相结合,实现一些具体功能,是目前嵌入式应用中比较常见的。
在这些应用中,基础性的工作就是操作系统的移植。
本文选取使用较多的51单片机、LPC2210、NiosII三种处理器进行介绍。
1 μC/OS-II操作系统移植条件μC/OS-II操作系统的大部分源代码都是用C语言书写的,但仍需使用汇编语言来完成一些和处理器相关的操作,例如读写处理器、寄存器时只能使用汇编语言来实现。
因此,将μC/OS-II操作系统移植到目标处理器上,需要从硬件和软件两方面来考虑。
硬件方面,目标处理器需满足以下条件:①处理器的C编译器能产生可重入代码;②用C语言可以开/关中断;③处理器支持中断,并且能够产生定时中断(通常在10~1 000 Hz之间);④处理器能够支持容纳一定量数据的硬件堆栈;⑤处理器有将堆栈指针和其他寄存器读出和存储到堆栈或内存中的指令。
软件方面,主要关注的是一些与处理器相关的代码移植,其分布在OS_CPU.H、OS_CPU_C.C和OS_CPU_A.ASM这3个不同的文件中。
2 目标处理器硬件支持51单片机、LPC2210、NiosII三种处理器在硬件方面均能满足μC/OS-II操作系统的移植要求。
51单片机:选择Keil公司的集成开发环境作为开发工具,因为该集成开发环境的C51编译器能产生可重入型代码,且用C语言就可以开/关中断。
μC/OS-Ⅱ在VC下的移植
Mi oo ue p l ain o.2 No 3 20 c c mp trA pi t sV 12 , . ,0 6 r c o
文 章 编 号 :0 7 7 7 2 0 ) 3 0 3 3 1 0 - 5X( 0 60 —0 3 —0
技 术 交 流
c++编译器 , 界面粗糙 , 作复杂 , 操 使很多初学者很难 掌握 如
何编译测试 / — n。 c 0s 而Vc界面友好 , 功能强大 , 应用 的非
常 广 泛 果 能 够 用VC来 调试 运行 / 一 Ⅱ 使 教 师教 学 如 C 0S 会 更 加轻 松 , 生 学 习更 加 容 易 , 够 很 快 掌 握  ̄ / S— I的精 学 能 CO
个 AP 函数 , 本 文 采 用 的移 值 程 序 是 基 于 控 制 台 的 , 就 是 I 但 也 说 最 开始 建立 VC工 程 的 时 候 选 择 的是 创 建 wi3 o s l a— n 2 n oe p c pi t n 控 制 台 下 的 程 序 是 没 有 消 息 循 环 的 , 以 要 使 用 l ai , c o 所
髓。
没有就用到对 实时性 要求高 的产 品, 以最终决 定采用 软件 所
定 时器来模拟 时钟中断 。 n o 下软件定 时器 材种类很 多 , wid ws
下 面 分别 简 要 介 绍 一 下 这 些 定 时器 :
2 1 S t i r 函数 . eT me O
有wid ws n o 下编程 经验 的最先想到 的应该是S t i r eT me 这
制器唾处理器上 。本文所要介绍的并不是要把  ̄ / - Ⅱ移 C OS
植 到 某 款 新 的处 理 器 上 , 是 移 植 到 Mi oot的 VC开 发 平 而 c sf r
μC/OS-Ⅱ嵌入式实时操作系统面向ARM处理器的移植
1 R A M7微处理器体系结构
9 O年代 ,R 3 A M 2位嵌人式 RS ( I 精简指令集计算 C 机) 处理器扩展到世界范 围, 占据了低功耗、 成本和 低 高性能 的嵌入 式 系统应用 领域 的领先 地位。3 2位 RS I C处理器受到青睐, 领先的是 A M( dacdRS R A vne I C M ci s 嵌入式微处理器系列。A M公司专注于设 ah e) n R 计, 其内核耗电少 、 成本低、 功能强 , 特有 1/ 2 6 3 位双指
李 娜, 夏靖波 , 王 航 , 冯奎胜
( 军工程 大 学电讯工 程 学院 , 西省 西安 市 707 ) 空 陕 10 7 摘 要: 分析 了 A M 体 系结 构特 点 和 t / S I R z O .I内核 结构 , C 讨论 了支持 t / S I移 植 的 处理 器 z O .I C
A M7 D —、 R 70 、 R 7 J 型号 。 R T MI A M 2 T A M E 等 S
嵌入式系统起 源于微型计算机 时代。2 0世纪 7 0
年代 , 微处理器 的出现使计算机发生 了历史 性变化。
以微处理器为核心 的微型计算机深入千家万户 , 人们 称之为 P c时代。嵌入式系统 的全面发展是从 2 0世 纪9 0年代开始 , 主要受分布式控制 、 数字化通信、 信息 家电、 网络应用等强烈的应用需求所牵引。现在 , 人们 可以随处发现嵌 入式 系统 的应用 , 如手机 、 P M 3播放 器、 数码相机 、 C 、 V D 机顶盒、 路由器、 交换机等。嵌入
OS M匝M C OS 0 C
OS E C S M O S 1 K _ AS OS Tl M匝 C
A M 处理器作为内核生产芯片的公司最多。 R7 A M7系列 为低 功耗 3 R 2位核 , 适用 于 对 价位 和 最 功耗敏感的消费类产 品。A M R 7系列 的特点是 : 具有 嵌入式 IER C —T逻辑 ; 非常低 的功耗 ; 能提供 09×1 . 0 条指令/ H 的3级流水线和冯 ・ M z 诺依曼结构。 AM R 7的主要应用领域为 : 因特网设备 、 网络和调
μCOS-II实时嵌入式操作系统在AVR mega系列MCU上的移植
μC/OS-II实时嵌入式操作系统在AVR mega系列MCU上的移植摘要:本文以AVR mega系列单片机为平台详细介绍了源代码公开的实时嵌入式操作系统μC/OS-II的内核代码及移植方法,并对系统的相关性能进行了测试,为在8位单片机上进行嵌入式系统开发提供了参考。
关键词:μC/OS-II; AVR mega; 移植; 系统测试1 简介随着技术的发展,在近几年中,嵌入式系统的设计及应用对人们生活产生了很大的影响,并将逐渐改变人们未来的生活方式。
在特定的操作系统之上开发应用程序,可以使得开发人员忽略掉很多底层硬件细节,使得应用程序调试更方便,易于维护,同时开发周期也缩短,降低了开发成本,因而嵌入式实时操作系统深得开发人员的青睐。
μC/OS-II是一种专门为微处理器设计的抢占式实时多任务操作系统,具有源代码公开、可移植性、可裁减、稳定性和可靠性高等特点。
其内核主要提供进程管理、时间管理、内存管理等服务,系统最多支持56个任务,每个任务均有自己单独的优先级。
由于其内核为抢占式,所以总是运行优先级最高的任务。
系统提供了丰富的API函数,便于实现进程间的通信及进程状态的转化。
由于μC/O S-II是为嵌入式应用编写的通用软件,故在具体应用时需根据不同单片机的特点进行移植,其大部分代码是用标准C语言所写,只有与处理器相关的一部分代码用汇编语言写成,因而具有很强的移植性,能在多数8位、16位、32位单片机及数字信号处理器上实现运行。
AVR mega系列单片机是基于AVR RISC的,低功耗的8位单片机,内部有32个通用寄存器。
通过在一个时钟周期内执行一条指令,运行速度可以达到1MIPS/MHz的性能。
AVR单片机内核有丰富的指令集,通过32个通用寄存器直接与逻辑运算单元相连接,允许在一个时钟周期内一条单一的指令访问两个独立的寄存器。
这样的结构使得代码的执行效率比传统的复杂指令集的微处理器快近10倍。
AVR mega128是mega系列里功能最强大、资源最丰富的一款单片机,有128k的在系统可编程flash,4k字节的SRAM和EEPROM,为系统的移植提供了一个良好的平台。
μCOS-II移植实验
昆明理工大学信息工程与自动化学院学生实验报告(2011 —2012 学年第 2 学期)课程名称:嵌入式系统设计开课实验室:信自楼机房444 2012 年5月31日了解μ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中观察其运行状况。
嵌入式实时操作系统μcos_Ⅱ的移植探讨
计算机应用Computer Application《自动化技术与应用》2003年第22卷第5期嵌入式实时操作系统μc/os-Ⅱ的移植探讨雷必成,吴高标,吴永良(台州学院计算机系 台州 317000)摘要:介绍一种嵌入实时操作系统———μc/os-Ⅱ的特点和基本组成。
以μc/os-Ⅱ在MCS-51上的移植为例,着重讨论μc/os-Ⅱ在移植过程中必须注意的几个问题。
并讨论其它处理器对同一问题的不同处理方式。
关键词:实时操作系统;嵌入式;移植;MCS-51中图分类号:TP31612 文献标识码:A 文章编号:100327241(2003)0520069203Transplanting of The Embedded Real T ime OperationSystem-μcΠo s-ⅡLEI Bi-cheng,WU G ao-biao,WU Yong-liang(Computer Department o f Taizhou Univer sity,Taizhou317000,China)Abstract:To introduce the characteristics and basic constitution o f the embedded Real Time Operation System-μcΠos-Ⅱ,it puts an emphasis on sever2 al problems on the transplanting process o fμcΠos-Ⅱ,taking“μcΠos-Ⅱtransplanting into MCS-51”for example.And it also involves different approaches to the same issue on other processor s.K ey words:RTOS;Embedded;Transplanting;MCS-511 引言在嵌入式应用系统的设计中,实时操作系统的应用越来越受到重视。
uCOS-II在嵌入式平台的移植技巧
#define OS_EXIT_CRITICAL() Enable_int()
Disable_int和Enable_int是用汇编 语言编写的两个函数。在这里使用了控 制状态寄存器( C S R ) 的一个特性—— C S R 中除了控制全局中断的 G I E 位之 外,还有一个 PGIE 位,可用于保存之前
└─ TI_C6711 // 系统核心
=(OS_STK*)
├─ CCS // 开发工具
DSP_C6x_GetCurrentSP(); // 服务
│
OS_CPU.H
函数
│
}
// 获取当前 SP 的值
OS_CPU_A.ASM
// 允许中断嵌套 则在此处开中断
│
----
S T W B4,*+SP(4) / /
a=0
NOP 2
//-----
-----
B IRP // 中断返回 L D W *++SP(8),B4/ / 出栈 NOP 4 与前一段代码相比,对于中断函数 的编译,有两点不同: ● 函数的返回地址不再使用B3 寄存 器,相应地也无需将 B3 入栈。(IRP 寄 存器能自动保存中断发生时的程序地址) ● 编译器会自动统计中断函数所用 到的寄存器,从而在中断一开始将他们 全部入栈保护——例如上述程序段中, 只用到了 B4 寄存器。
函数
}
(类似 80x86 版本的 PC.C 和 PC.H) C 语言开发工具
在 C C S 中编译后生成的 A S M 代码
系统核心
无论所使用的系统核心是什么,C 为:
无 论 项 目 所 采 用 的 系 统 核 心 是 语言开发工具对于μC/OS-II 是必不可
μ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来解决。
ucos ii移植过程详解
uCOS-II移值过程实例讲解我将uCOS-II 移植到了EPONS 的C33209的平台上,接下来我就基于我移植好的代码讲解如何将uCOS-II从一种MCU移植到另一种MCU。
首先介绍uCOS-II的文件,如下表:ucos_ii.hos_cfg.hos_cpu.hos_core.cos_dbg_r.cos_flag.cos_mbox.cos_mem.cos_mutex.cos_q.cos_sem.cos_task.cos_time.cucos_ii.cos_cpu_c.cos_cpu_a.asm其中我们和硬件平台相关的文件的文件名被加粗了,也就是说若要将uCOS-II移植到新的平台上只要关心被以上四个文件就行了。
当然你也可以根据需要再添加你自己的和平台相关的文件,事实上我也是这么做的。
在我移植的例子中就添加了四个和平台相关的文件,文件如下表:crt0.cdrv_rtc.cvector.cext.scrt0.c是用来初始化系统的比如说MCU的一些特殊寄存器、设置外围的总线接口,等。
drv_rtc.c是用来初始化系统中的一个RTC的,这个RTC可以为内核提供必要的基于时间片调度的时基。
同时提供了对RTC开始和停止的操作函数。
在我的例子中RTC会每秒产生32次中断。
vector.c顾名思义,它是系统上电后为系统提供矢量入口表的文件,当然也包括中断向量表。
ext.s是为uc/OS-II 提供OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()函数的具体实现以及在用户程序的中断函数出入时要调用的状态保护和状态恢复函数OS_SA VEALL ()和OS_RESTOREALL ()。
前面两个函数的功能是:OS_ENTER_CRITICAL()屏蔽中断;OS_EXIT_CRITICAL()恢复原来的中断使能状态。
1. os_cpu_a.asm的说明要想顺利的移植首先要了解uCOS-II的一些基本概念。
μCOS-II嵌入式操作系统移植和实时性测量
μC/OS-II嵌入式操作系统移植和实时性测量一、实验目的●通过向Sitsang实验板移植μC/OS-II操作系统,学习它的结构和移植方法,体会操作系统移植与目标机体系结构和编译器的关系;●学习操作系统中的中断概念,分析μC/OS-II的中断处理过程,通过分析和测量μC/OS-II的中断处理时间,理解操作系统的实时性;●学习ARM指令集和汇编语言程序设计,理解ARM处理器的异常处理模式;●学习使用AXD和ARMulator仿真、调试系统程序;●培养查阅硬件手册、调试底层软件的能力。
二、实验内容I.μC/OS-II嵌入式操作系统移植1.μC/OS-II正常运行,需要处理器满足以下条件:●处理器的C编译器能产生可重入代码;●用C语言就可以打开和关闭中断;●处理器支持中断,并且能产生定时中断(通常在10至100Hz之间);●处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈;●处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存中的指令。
Sitsang和ADS1.2开发环境均满足上面的要求,因此μC/OS-II可以正常运行。
2.需要修改的与处理器相关的三个文件说明:我们选择移植较新的uC/OS-II v2.80版,但移植步骤与v2.52版无别。
●OS_CPU.H在该头文件中定义了操作系统需要的数据类型和在内存中占用的位数、堆栈的增长方向以及开关中断的方法。
针对ARM编译器说明,定义了如下的数据类型和位数描述:typedef unsigned char BOOLEAN;typedef unsigned char INT8U;typedef signed char INT8S;typedef unsigned short INT16U;typedef signed short INT16S;typedef unsigned int INT32U;typedef signed int INT32S;typedef float FP32;typedef double FP64;对于ARM处理器,每一个堆栈的表项都是32位,因此需要将OS_STK定义如下:typedef unsigned int OS_STK;且堆栈的增长方向是高地址向低地址增长,因此定义#define OS_STK_GROWTH 1而ARM处理器上的状态寄存器(CPSR和SPSR)也都是32位,因此typedef unsigned int OS_CPU_SR;我们选择OS_CRITICAL_METHOD #3作为进出临界区的实现方法,即进入时保存CPSR、退出时恢复CPSR。
μC/OS—Ⅱ在M16C/62P上的移植实现
22 p / S I 的 移植 实 现 过 程 . , O — I C
1 M1 C, 2 6 6 P群 单 片 机 简 介
p / S I 移 植 的 时 候 内 核 是 不 变 的 , 用 程 序 只 能 使 用 内 核 提供  ̄ O —I C 应 的功 能 服务 来 开发 自己 的应 用 系统 。 C O —I 硬 件 的 接 口部 分 是移 I /SI与 x
【 摘 要 】 嵌 入 式 系统 中 常 用 的几 种 实 时 内核 的 比较 出发 , 出 了一 种 移 植  ̄ OS I 到 M 1 C 6P 系 列单 片机 的 方 法和 具 体 过 程 。介 从 给 C/ — I 6 /2
绍 了瑞 萨 M 1C/ 2 6 6 P系 列 单 片 机 的 主 要 应 用 范 围 、 件 结 构 和 性 能 特 点 ; 究 了 I OS I 的 内核 组 成 结 构 以及 移 植 的 要 点 ; 出并 解 决 了 硬 研 x C/ — I 指 p / —I . OS I内核 在 M 1 C 6 P系 列 单 片机 上 移植 过 程 中 的 重 点和 难 点 问题 。 测试 了移 植 代 码 的 正确 性 , 植 方 法 对 1 C 6 /2 移 6位 单 片 机 的 I OS I -  ̄ C/ — I
上, 实现有关 M1C6 P群单片机的应用产品开发。 6 /2
代 码 。 n E在 效 率 和 功 耗 方 面 做 的 不 好 , 用 过 量 的 系 统 内存 , 常 WiC 占 通 适合于对实时性要求 不高的系统如 P DA, x ok V w rs比较 适 合 复 杂 性 和 性 能 要 求 较 高 的 大 型 商 业 嵌 入 式 系 统 如 核 心 路 由 器 . n E 和 WiC V w rs 是 商 业 软 件 , 有 开 放 源 代 码 。 发 费 用 昂贵 。 x ok 都 没 开
实时操作系统μCOS-II在ARM上的移植研究
移植实现
一.移植规划 移植规划
1. C/OS-II 的体系结构
移植实现
2.移植条件 移植条件 一般来说,能移植 能移植C /OS-Ⅱ的微处理器必须满足以下条件 : 一般来说 能移植 Ⅱ 处理器的C 处理器的C编译器能产生可重入代码 在程序中可以打开或者关闭中断 处理器支持中断,并且能产生定时中断(通常在10— 处理器支持中断,并且能产生定时中断(通常在10 10 100Hz之间) 100Hz之间) 之间 处理器支持能够容纳一定量数据的硬件堆栈( 处理器支持能够容纳一定量数据的硬件堆栈(通常是几千 字节) 字节) 处理器有将堆栈指针和其他CPU寄存器的内容存储和读出 处理器有将堆栈指针和其他CPU寄存器的内容存储和读出 CPU 到堆栈(或者内存)的指令 到堆栈(或者内存)
移植实现
3.移植要求 要移植一个操作系统到一个特定的CPU体系结 要移植一个操作系统到一个特定的 体系结 构并不是一件很容易的事情,它对移植者有以下要 构并不是一件很容易的事情, 求: ).对目标体系结构要有很深了解 (1).对目标体系结构要有很深了解; ).对目标体系结构要有很深了解; ).对 原理要有较深入的了解 原理要有较深入的了解; (2).对OS原理要有较深入的了解; ). ).对所使用的编译器要有较深入的了解 (3).对所使用的编译器要有较深入的了解; ).对所使用的编译器要有较深入的了解; ).对需要移植的操作系统要有相当的了解 (4).对需要移植的操作系统要有相当的了解; ).对需要移植的操作系统要有相当的了解; ).对具体使用的芯片也要一定的了解 (5).对具体使用的芯片也要一定的了解 ).
实时操作系统C/OS-II在ARM上的移植研究
指导老师: 指导老师:谢小维 答 辩 人:陈利顺 专 业:电子信息工程
μC/OS-Ⅱ实时操作系统的移植方法探讨
μC/OS-Ⅱ实时操作系统的移植方法探讨作者:许璟峰来源:《电脑知识与技术·学术交流》2008年第29期摘要:μC/OS-Ⅱ由于其源代码开放、稳定、可靠的特点,在嵌入式开发中得到了广泛应用。
该文针对其移植开发,探讨了这一过程中所采用的步骤、一般方法和技巧。
关键词:μC/OS-Ⅱ;嵌入式系统;移植中图分类号:TP316文献标识码:A文章编号:1009-3044(2008)29-0493-02Methods on Transplanta tion of μC/OS-IIXU Jing-feng(Base Course Department,Nanjing Institute of Politics,Nanjing 210003,China)Abstract: μC/OS-II has been widely used in the embedded system development for its feature of stability, reliability and open source. This paper focuses on the developing steps and general methods in the transplantation of the real time operating system.Key words: μC/OS-II; embedded system; transplantationμC/OS-Ⅱ是一个抢占式的实时多任务操作系统,具有高稳定性和高可靠性,可固化、可剪裁。
此外,μC/OS-Ⅱ的一大鲜明特点就是源代码公开,便于移植和维护。
在实际的项目开发过程中,可以针对项目所采用的芯片或开发工具,根据自己的需要进行移植。
本文将以在TMS320C6711 DSP上的移植过程为例,具体分析μC/OS-Ⅱ在嵌入式开发平台上进行移植的一般方法和技巧。
嵌入式系统RTEOSCOS-II的移植
函数
*OS_CPU_A.ASM
进入多任务环境时运行优先级最高的任务,
OSIntCtxSw()
函数
*OS_CPU_A.ASM
中断退出时的任务切换函数
OSTickISR()
中断服务程序
*OS_CPU_A.ASM
时钟节拍中断服务程序
实际上,还有一个文件很重要,它就是,它定义了一个汇编宏,它是μC/OS-II for ARM7通用的中断服务程序的汇编与C函数接口代码。时钟节拍中断服务程序也没有移植,因为其与芯片和应用都强烈相关,需要用户自己编写,不过可以通过IRQ.INC简化用户代码的编写。
——堆栈生长方式
μC/OS-II不使用C语言中的short、int、long等数据类型的定义,因为它们与处理器类型有关,隐含着不可移植性。代之以移植性强的整数数据类型,这样,既直观又可移植,不过这就成了必须移植的代码。根据ADS编译器的特性,这些代码如下程序清单所示(与编译有关)。
概述
要移植一个操作系统到一个特定的CPU体系结构并不是一件很容易的事情,它对移植者有以下要求: 1. 对目标体系结构要有很深了解; 2. 对OS原理要有较深入的了解; 3. 对所使用的编译器要有较深入的了解; 4. 对需要移植的操作系统要有相当的了解; 5. 对具体使用的芯片也要一定的了解
程序状态寄存器(CPSR)
条件位: N = 1-结果为负,0-结果为正或0 Z = 1-结果为0,0-结果不为0 C =1-进位,0-借位 V =1-结果溢出,0结果没溢出 Q 位: 仅ARM 5TE/J架构支持 指示增强型DSP指令是否溢出 J 位 仅ARM 5TE/J架构支持 J = 1: 处理器处于Jazelle状态
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OS—CPU—C.C文件的修改 OSTaskStkInit()
初始化任务堆栈。保护模式下程序是在同一个 段址内处理的,因此段址不用压栈,为研究方便,也
没有把浮点寄存器压栈。windows保护模式下堆栈 以32位字为单位进行处理,因此数据类型由
木一一8p=Context.Eax; 枣一一sp=Context.Ecx; 木一一sp=Context.Edx; 木一一sp=Conte)【t.Ebx;
蔽中断 retum;//如果当前中断被屏蔽则返回
SuspendThread(mainhandle);//中止主线程的
运行,模拟中断产生.但没有保存寄存器
台应用程序运行于保护模式下,二者主要区别如表
l所示。
DOs程序与控制台程序比较表
Bodand
C/C++的库文件与VC使用的库文件
32位宽
opt=Opt;
有很大差异,Borland C/C++的一些宏也是VC++
6.o所不支持的,因此需要做相应的替换或屏蔽部
分未使用代码。
Borland
stk=(INT32u乖)ptos;/木装载空堆栈入口
是从当前esp+4处取得传人的参数,所以此处要空
出4个字节 木一一stk=(INT32U)task;/书Put
task
on
3具体移植步骤
3.1建立和配置工程 创建工程:建立一个空的win32控制台应用程
pointer to
top of stack木/
木一一stl(=(IN7乃2U)OⅪ00000202;/,Ic
on
POning Of uCOS—II in VC6.O based
DUAN Yu—bo,WU Guang—min
x86
(凡c嘶矿sci饥凹,豇‘,Imi昭狮如e阿砂矿sc拓删帆d死如加EDgy,J缸,帆i昭650093,(冼i舱)
Abstr粕t:ne而舀nal灿COS—II ex锄ples
for most leamers,∞t}Iey have
任务切换。这里仅分析这几个问题的解决思路,后 面第三部分将详细讲述其实现过程。 在PC中,时钟节拍由硬件定时器产生,硬件定 时器会周期性中断CPU。PC机时钟节拍的中断向
量为O如8,斗cOs—II将此向量截取,使之指向
¨COS—II的时钟节拍中断服务子程序OSTickIsR
nread(haIlgdler)和Resumenread(handler)就可以
宰一一stk=(IN‘r32U)OxCCCCCCCC;/术
ECX=OxCCCCCCCC宰/
在原有基础上增加两个头文件:
撑include <windows.h>
宰一一stk=(IN‘r32U)OxDDDDDDDD;/乖
EDX=OxDDDDDDDD术/ 宰一一stk
=
(IN7r32U)0xBBBBBBBB;/水
因此需要在这里保存cPu寄存器,这与¨COS—II 原来的程序是不同的。在Test.c中定义了一个主
线程句柄HANDLE和一个CON,IEXT保存主线程上
模拟pusllad
下文。在进行任务切换时,首先保存相应寄存器,然 后把要运行的的任务的上下文填入coNl’ExT结构 并保存,完成切换。代码如下:
万方数据
・42-
微处理机
2011年
器,如今为便于学习要将其移植到VC++6.O编译 环境下,首先要说明二者的一些区别,因为这直接关 系到与CPu相关的那部分代码的编写。 采用Bodand c/C++编译器编译连接源文件 后,斗cOS—II作为DOS程序运行于大存储模式实
表l
模式下。而VC++6.O建立win32工程文件编译连 接后,仙COS—II是在Windows系统平台上作为控制
虑到本移植只是为了教学和学习,并没有应用到对 实时性要求高的产品,所以最终决定采用谢ndows 下的软件定时器来模拟时钟中断。 时钟中断处理子程序。通过软件定时器来模拟
分析,任务的上下文和斗cOs—II在80x86上移植的 上下文很相近,不同点是段寄存器不用保存,因为
VC下任务的切换是在同一个线程完成的,而保护模
程序清单L4中断级任务切换函数
extem CONTEXT Context:
子程序是从当前的 esp+4处取得的传 入参数,所以要窄 出4个字节 extem HANDLE mainhandle: void
模拟pushm
’
保存任务切换地址———一+
0SIntC故Sw(void)
{
0S—STK木sp;
OSTaskSwHook();
to
discussed the pmcess 0f porting the¨COS—
to
the VC++6.0
use.
compile
environment based
on
x86 computer,aiming
provide teaching and
le锄ing
refbrence
Key啪rdS:斗COS—II;Poning;VC++6.0
指针术/
C/C++编译器对c文件不支持汇编语
幸一一stk=(IN,132u)pdata;/术带参数的函
数调用母/ 幸一一s出=(INT32u)Ox00000000;//子程序
言嵌套,而VC++6.O支持在c程序中嵌套汇编代
码。基于此,工程中没有单独的汇编文件,而是将相
关代码放到Os—cPu—C.C中。
lea
・43・
得堆栈地址并恢复到sP,恢复所有寄存器使优先级
最高的任务开始运行,该函数由OSStan()函数调 用。代码如下: 程序清单L2启动最高优先级任务
void
eax,nextstan;任务切换回来后从nextstan
开始
push
ea)【
OSStanHighRdy(void)
pushfd;标志寄存器的值
下文切换。由于VC抖6.0下任务是在一个线程中 切换的,而且保护模式下段址寄存器在同一个线程
下的值不变,因此不用保存段寄存器。任务切换时 的压栈情况如图l所示。
}
3.3.4
OSIntCb6w()
中断级任务切换函数,由于控制台程序不能处 理中断,所以此处用库函数模拟中断来实现时钟节
拍终端服务子程序,但其中并没有保存相应寄存器,
图1
任务切换压栈后状态
sp=(oS—STK木)Context.Esp;//得到主线
程序清单L3手动任务切换
Void
程当前堆栈指针 //在堆栈中保存相应寄存器。 宰一一sp=Context.Eip;//先保存eip
OSCt】【Sw(void)
{
万方数据
・44・
微处理机
20¨年
宰一一8p=context.EFla98;//保存en
retum((OS-STK水)stl();/水返回新的堆栈 栈顶指针木/ }
3.3.2
OSStartHighRdy()
IN,132U木stk;//x86体系console下寄存器为 万方数据
从处于就绪态优先级最高的任务的TcB中取
5期
段玉波等:基于x86体系恤Cos一Ⅱ在Vc6.O下的移植 _I嬲m{
=(INl-32u)O】【22222222;/木ESI
=(INB2u)Ox33333333;/术EDI
INTl6u改为INrl32u,代码如下: 程序清单Ll初始化任务堆栈
OS—STK木OSTaskStkInit(void(水task)(void 半pd),void幸pdata,OS—STK木ptos,INTl6U opt) {
GefrhreadContext(minhaIldle。&Context);//得
到主线程上下文,为切换任务做准备
OSIntNesting++;
宰一一sp=Context.Esp;//此时保存的esp是 错误的,但OSTCBcur保存了正确的
幸一一sp
2
Context.Ebp;
if(OSIntNesting==1){ OSTCBCur一>OSTCBStkPtr=(OS—STK木)
式下段寄存器的值在同一个线程下是不改变的。
2 Bodand
C/C++与VC++6.O下编译的主
要区别 ¨COS—II的作者使用了Bodand c/c++编译
产生“c/Os—II的时钟中断,但timeSetEvent()函
作者简介:段玉波(19盯一),男.云南省曲靖市人.在读硕士研究生。主研方向:嵌入式系统。 收稿日期:20ll—Ol—13
t0
are
c咖piled
p印er
on
Borl锄d
C/C++,which i8
not
familiar
on
adapt
to
tIle compile environment before leaming斗COS—II.Based
VC++6.O good integrated compile envimnment,this II
挂起和继续执行线程。
(),而原先的中断向量保存在中断向量0x81中。
然而,在基于控制台的埘ndows保护模式下不能像
任务的切换。任务切换就是进行任务的上下文
切换,研究选择了不带浮点运算的上下文切换进行
DOS下面那么容易,直接通过一个函数调用就能够 修改中断。windows下要修改中断涉及到驱动程 序,这样就加大了移植的困难度与复杂度。因此,考
ret;ret指令相当于p叩eip但保护模式下不允
许使用eip ;永远都不返回 } }
3.3.3
popad;恢复所有通用寄存器,共8个