移植COS-II中英文翻译资料
uCOS-II简介
uC/OS-II简介u C / O S 是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。
μ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 上。
严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。
没有提供输入输出管理,文件系统,网络等额外的服务。
但由于uC/OS-II 良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。
uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。
任务管理uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。
63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。
uC/OS-II提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。
系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,改任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,改任务负责统计当前cpu的利用率。
五、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
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
ห้องสมุดไป่ตู้
医学英语文献阅读二翻译
Unit OneText A: Hippocratic Oath, The Medical Ideal1.Perhaps the most enduring --- certainly the most quoted --- tradition in thehistory of medicine is the Hippocratic Oath. Named after the famous Greek physicianHippocrates, this oath was written as a guideline for the medical ethics of doctors.Although the exact words have changed over time, the general content is the same- an oath to respect those who have imparted their knowledge upon the science ofmedicine, and respect to the patients as well as the promise to treat them to thebest of the physicians' ability.或许在医学史上最持久的,被引用最多次的誓言就是”希波克拉底誓言”.这个以古希腊著名医师希波克拉底命名的誓言,被作为医师道德伦理的指导纲领.虽然随着时代的变迁,准确的文字已不可考,但誓言的主旨却始终如一——尊敬那些将毕生知识奉献于医学科学的人,尊重病人,尊重医师尽己所能治愈病人的承诺。
Who was Hippocrates, and Did he Write the Oath?2.For a man considered by many to be the 'Father of Medicine', little is known aboutHippocrates of Cos. He lived circa 460-380 BC, and was the contemporary of Socratesas well as a practising physician. He was certainly held to be the most famousphysician and teacher of medicine in his time. Over 60 treatises of medicine, calledthe Hippocratic Corpus have been attributed to him; however, these treatises hadconflicting contents and were written some time between 510 and 300 BC, and thereforecould not all have been written by him.作为被大家公认的”医学之父”,我们对希波克拉底知之甚少.他生活于约公元前460-380年,作为一名职业医师,与苏格拉底是同代人.在他的时代,他被推举为当时最著名的医师和医学教育者.收录了超过60篇论文的专著——希波克拉底文集,被归于他的名下;但是其中有些论文的内容主旨相冲突,并成文于公元前510-300年,所以不可能都是出自他之手.3.The Oath was named after Hippocrates, certainly, although its penmanship is stillin question. According to authorities in medical history, the contents of the oath suggest that it was penned during the 4th Century BC, whichmakes it possible that Hippocrates had himself written it. Anyway, regardless ofwhether or not Hippocrates himself had written the Hippocratic Oath, the contentsof the oath reflect his views on medical ethics.这个宣言是以希波克拉底命名的,虽然它的作者依然存在疑问。
μC_OS-Ⅱ中文资料大全
OS_CRITICAL_METHOD == 2
#define OS_ENTER_CRITICAL() asm {PUSHF; CLI}
#define OS_EXIT_CRITICAL() asm POPF
#ifdef OS_GLOBALS #define OS_EXT #else #define OS_EXT extern #endif
OS_EXT INT32U OS_EXT INT32U OS_EXT INT32U
OSIdleCtr; OSIdleCtrRun; OSIdleCtrMax;
同时,uCOS_II.H 有中以下定义:
INCLUDE.H 可以使用户不必在工程项目中每个*.C 文件中都考虑需要什么样的头文件。换 句话说,INCLUDE.H 是主头文件。这样做唯一的缺点是 INCLUDES.H 中许多头文件在一些*.C 文件的编译中是不需要的。这意味着逐个编译这些文件要花费额外的时间。这虽有些不便, 但代码的可移植性却增加了。本书中所有的例子使用一个共同的头文件 INCLUDES.H,3 个副 本 分 别 存 放 在 \SOFTWARE\uCOS-II\EX1_x86L , \SOFTWARE\uCOS-II\EX2_x86L , 以 及 \SOFTWARE\uCOS-II\EX3_x86L 中。当然可以重新编辑 INCLUDES.H 以添加用户自己的头文件。
《嵌入式实时操作系统复习资料》
一、填空题(请将答案填入题后括号中):共10小题,每小题2分,满分20分。
1、一般而言,嵌入式系统的构架可以分为4个部分:分别是(处理器)、存储器、输入/输出和软件,一般软件亦分为操作系统相关和(应用软件)两个主要部分。
2、根据嵌入式系统使用的微处理器,可以将嵌入式系统分为嵌入式微控制器,(嵌入式微处理器)(嵌入式DSP处理器)以及片上系统。
3、操作系统是联接硬件与应用程序的系统程序,其基本功能有(任务管理)、任务间通信、(内存管理)和I/O资源管理。
4.实时系统:指系统能够在限定的(响应)时间内提供所需水平的服务5.ucos-ii最多管理(64 )个任务6.ucos-ii中,OS_TaskStat任务的优先级占(62 ),OS_TaskIdle任务的优先级是( 63 )7 ucos-ii中,OSRdyTbl就绪表的大小是由宏定义:OS_RDY_TBL_SIZE来定义,由全局宏( OS_LOWEST_PRIO )来决定的,8. TCB中的四个成员变量:INT8U OSTCBX;INT8U OSTCBY;INT8U OSTCBBitX;INT8U OSTCBBitY ,用于(加速)任务就绪态的计算过程。
9.TCB内部最重要的元素放在第一个单元叫(OSTCBStkPtr),因此,这个变量是惟一一个能用汇编语言处置的变量,将其放在结构最前面,使得在汇编语言中处理这个变量时较为容易。
10.uC/OS-II是一个简洁、易用的基于优先级的嵌入式(抢占式)多任务实时内核。
11.任务是一个无返回的无穷循环。
uc/os-ii总是运行进入就绪状态的(最高优先级)的任务。
12.因为uc/os-ii总是运行进入就绪状态的最高优先级的任务。
所以,确定哪个任务优先级最高,下面该哪个任务运行,这个工作就是由调度器(scheduler)来完成的。
13.(不可剥夺型)内核要求每个任务自我放弃CPU的所有权。
不可剥夺型调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。
可移植的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
SAE USCAR-2-2013第6版中文
汽车电连接器系统性能规范SAE/USCAR-2第6版2013.2ISBN:978-0-7680-7998-2SAE/USCAR-2第6版颁布日期1997年8月修订日期2013年2月汽车电连接器系统的性能规范目录1.范围 (3)2.试验顺序 (3)3.参考文档 (3)3.1文件的层次 (3)3.2零件图 (4)3.3产品设计规范 (4)3.4测试要求/指令 (4)3.4.1样品,测试类型,和特殊测试 (4)3.4.2测试要求/指令说明 (4)3.4.3性能和耐久性测试说明 (4)3.5本规范中所提到的文档 (4)4.一般要求 (5)4.1纪录保存 (5)4.2样品文件 (5)4.3样品数量 (5)4.4默认测试公差 (5)4.5设备 (6)4.6测量精确度 (6)4.7测试重复性&校准 (6)4.8一致性测定 (7)4.9样品的处置 (7)4.10零件的耐久性 (7)5.测试和验收要求 (7)5.1总则 (7)5.1.1性能要求 (7)5.1.2尺寸特性 (7)5.1.3材料特性 (7)5.1.4分类等级 (8)5.1.5试验端板&直接连接组件 (9)5.1.6端子样品准备 (10)5.1.7连接器和/或端子循环 (10)5.1.8外观检验 (11)5.1.9电路连续性监测 (12)5.1.10多腔(垫)导体密封样品准备 (14)The research data,analysis,conclusion,opinions and other contents of this document are solely the product of the authors.Neither the SAE International(SAE)nor the United States Council for Automotive Research(USCAR)certifies the compliance of any products with the requirements of nor makes any representations as to the accuracy of the contents of this document nor to its applicability for purpose.It is the sole responsibility of the user of this document to determine whether or not it is applicable for their purposes.Copyright©2013USCAR Printed in U.S.A. All rights reserved.QUESTIONS REGARDING THIS DOCUMENT:(248)273-2470FAX(248)273-2494TO PLACE A DOCUMENT ORDER:(724)776-4970FAX(724)776-07905.2端子机械测试 (14)5.2.1端子到端子的啮合/分离力 (14)5.2.2端子抗弯性 (15)5.3端子-电器性能试验 (17)5.3.1干电路电阻 (17)5.3.2电压降 (19)5.3.3最大试验电流能力 (21)5.3.4电流循环 (24)5.4连接器-机械性能试验 (25)5.4.1端子至连接器插入/保持和前止力 (25)5.4.2连接器至连接器插入/拔出/保持/锁扭转力(非辅助) (29)5.4.3连接器到连接器的插拔力(机械辅助) (31)5.4.4极性特征有效性 (34)5.4.5混合组件的啮合分离力 (35)5.4.6振动/机械冲击 (37)5.4.7连接器到连接器可听见的咔哒响 (44)5.4.8连接器跌落测试 (44)5.4.9模腔损坏系数 (45)5.4.10端子/型腔极性测试 (46)5.4.11连接器安装特征机械强度 (47)5.4.12机械辅助完整性–(仅有机械辅助的连接器) (49)5.4.13连接器密封保持-未插合的连接器 (50)5.4.14连接器密封保持-插合的连接器 (52)5.5连接器-电气性能测试 (52)5.5.1绝缘电阻 (52)5.6连接器环境测试 (53)5.6.1热冲击 (53)5.6.2温湿度循环 (54)5.6.3高温暴露 (55)5.6.4耐流体性能 (56)5.6.5浸泡 (57)5.6.6压力/真空泄露 (58)5.6.7高压喷射 (60)5.7端板测试 (61)5.7.1端板插针保持力 (61)5.8剧烈任务试验 (63)5.9测试顺序 (63)5.9.1一般说明 (63)5.9.2测试流程图 (63)5.9.3端子机械性能测试顺序 (64)5.9.4端子电气性能测试顺序 (64)5.9.5连接器系统机械性能测试顺序 (64)5.9.6连接器系统电气性能测试顺序 (65)5.9.7密封性连接器系统环境性能测试顺序 (66)5.9.8非密封性连接器系统环境性能测试顺序 (67)5.9.9独立密封性能测试顺序 (67)6.附录 (68)6.1附录A:术语 (68)6.2附录B:缩略语 (70)6.3附录C:对于新的或移动工具和材料变更的测试 (72)6.4附录D:对于新的/现有的端子或连接器设计的测试 (73)6.5附录E:来源列表 (74)6.6附录F:设计说明:温度和额定电流 (75)6.7附录G:修订 (76)1.范围本规范中包含的程序旨在涵盖在低电压(0-20VD C)道路车辆应用中组成电气连接系统的电气终端、连接器和部件的开发、生产和现场分析的所有阶段的性能测试。
2023年Nexys3移植uCOS-II实验报告
Nexys3移植uCOS-II试验汇报试验组员及时间姚灿荣、贺文强、方圆 2023年2月28日试验准备(1)书籍《嵌入式操作系统原理及应用》(严海蓉著)(2)计算机(电脑)、Nexys™3 Spartan-6 FPGA Board、开发板随带旳USB连接线;(3)Micrium企业旳µCOS-II和Xilinx MicroBlaze Processor Application Note;(4)Micrium企业旳Micrium-uCOS-II-V290.zip,包括代码与文档;(5)Xilinx企业EDK开发套件,版本号为EDK 12.4;(6)Digilent企业生产旳Nexys3开发板对EDK12.4旳plugin文献。
(1)、(2)、(4)旳文献都可以在随书光盘上旳试验指导部分找到。
试验过程(1)安装EDK 12.4;(2)使用USB线连接开发板与计算机,打开开发板电源;(3)按照《嵌入式操作系统原理及应用》书后试验一进行软硬件配置;一.在开发环境加入NEXY3 旳板级支持包,以便开发套件对开发板旳识别1.把AN-1013\edk_user_repository\Micrium\bsp、uCOS-II_v2_90_a整个文献夹复制到EDK安装目录,如D:\Xilinx\12.4\EDK\sw\lib\bsp下,这样我们就可以在OS & Library Settings选项中选择µCOS-II了。
2.plugin文献中旳Digilent文献夹复制到ISE旳安装目录下,如D:\Xilinx12_4\ISE_DS\ISE\lib\nt\plugins,以保证最终文献从SDK中下载到开发板时可以对旳识别并连接。
二.操作系统硬件环境构建:分步创立过程执行成果如下:处理器构建:1.Bus Interfaces配置成果2.Address配置成果3.Port配置成果警告提醒:NGCBUILD done.--------->make: warning: Clock skew detected. Your build may be incomplete.Done!三.操作系统软件部分构建导出并启动SDK注意事项为使EDK能对Nexys3开发板给出相称旳硬件配置方案,需要将随书光盘中Digilent_boards\boards文献夹按照阐明复制到对应目录下。
μCOSII简介
0 引言μC/OS是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。
μC/OS-II 的前身是μC/OS,最早出自于1992 年美国嵌入式系统专家Jean brosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把μC/OS 的源码发布在该杂志的BBS上。
μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。
CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。
用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌人到开发的产品中。
μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至 2KB 。
μC/OS-II 已经移植到了几乎所有知名的CPU 上。
严格地说μC/OS-Ⅱ只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。
没有提供输入输出管理,文件系统,网络等额外的服务。
但由于μC/OS-Ⅱ良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。
μC/OS-Ⅱ目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。
1.任务管理μC/OS-Ⅱ中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级,63为最低级。
系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。
μC/OS-Ⅱ提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。
系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前cpu 的利用率。
μ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来解决。
uccos ii os_critical_method
uccos ii os_critical_method
UCOSII的OS_CRITICAL_METHOD是个宏定义,名字有些长,英译是“系统临界段模式”的意思。
如果宏定义成3,表示利用编译器的扩展功能,将程序状态字保存到一个局部变量中。
这样做是为了给OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()进出临界区的两个函数提供上面所说的局部变量。
有了这个局部变量,就能实现屏蔽中断和恢复中断的功能,进而来保证修改共享资源时不被中断或异常打断。
UCOSII是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。
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)。
中文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编译器中开中断和关中断。
一些编译器允许在C语言源代码中直接插入汇编语句,这就使得插入相应的处理器中的指令开中断和关中断变得容易了。
1.2 文件(1)INCLUDES.H文件INCLUDES.H是一个头文件,它出现在每个.C文件的第一行,如下:# include“ includes.h”INCLUDES.H文件使得工程项目中的每个.C文件无需分别考虑它实际上需要哪些头文件。
使用INCLUDES.H文件的唯一缺点就是它可能包含一些与当前要编译的.C文件实际上不相干的头文件。
这意味着每个文件的编译时间都会增加;但由于他增加了代码的可移植性,所以还是决定使用这种方法。
也可以通过重新编译INCLUDES.H文件来增加头文件,但是头文件必须添加在文件列表的最后。
(2)OS_CPU.H文件OS_CPU.H包含了用#define语句定义的、与处理器相关的常数、宏以及类型。
OS_CPU.H文件的大体结构如程序清单T1所列:#ifdef#define OS_CPU_EXT#else#define OS_CPU_EXT extern#endiftypedef unsigned char BOOLEAN;typedef unsigned char INT8U; /* 无符号8位整数*/typedef signed char INT8S; /* 有符号8位整数*/typedef unsigned int INT16U; /* 无符号16位整数*/typedef signed int INT16S; /* 有符号16位整数*/typedef unsigned long INT32U; /* 无符号32位整数 */ typedef signed long INT32S; /* 有符号32位整数*/typedef float FP32; /* 单精度浮点数 */typedef double FP64; /* 双精度浮点数 */typedef unsigned int OS_STK; /* 堆栈入口宽度为16位*/#define OS_ENTER_CRITICAL() ??? /* 关中断*/#define OS_EXIT_CRITICAL() ??? /* 开中断s */ #define OS_STK_GROWTH 1 /* 定义堆栈方向:1=向下递减,0=向上递增*/#define OS_TASK_SW() ???程序清单T1①OS_CPU.H,与编译器相关的数据类型因为不同的微处理器有不同的字长,所以μC/OS-II的移植包括了一系列的数据类型的定义,而确保其可移植性。
尤其是,μC/OS-II代码从不使用C语言中的short, int 及long等数据类型,因为它们是与编译器相关的,是不可移植的。
相反,定义的数据结构等既是可移植的,又很直观。
举例来说,INT16U数据类型总是代表16位的无符号整型数。
这样μC/OS-II 就可以断定,声明为该数据类型变量的范围都是0~65535。
将μC/OS-II移植到32位的处理器上,就意味着INT16U实际被声明为无符号短整型数,而不是无符号整数,但是,μC/OS-II处理的仍然是INT16U。
你必须将任务堆栈的数据类型告诉μC/OS-II。
这是通过为OS_STK声明恰当的C数据类型来实现的。
如果处理器的堆栈是32位的,那么就应该将OS_STK 声明:为:unsigned int,所有的任务堆栈都必须声明使用OS_STK作为它的数据类型。
用户需要做的只是查阅编译器文档,找出对应于μC/OS-II的标准的C的相应数据类型。
②OS_CPU.H,OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()像其它的实时内核一样,μC/OS-II需要先关中断再处理临界段代码,并且在处理完毕后再重新开中段。
这就能够保证临界段代码免受多任务或中断服务子程序的破坏。
通常每个处理器都会提供一定的汇编指令来开关中断,C编译器必须有一定的机制直接从C语言中执行这些操作。
有些编译器允许在C源代码中直接加入汇编语句,这就使得插入处理器指令来开关中断变的容易,有些其它的编译器提供语言扩展功能,可以直接从C语言中开关中断。
为了隐藏编译器厂商提供的不同实现方法,以增加可移植性,μC/OS-II定义了2个宏,用来关开中断:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),如T1:它们都是成对出现的,分别加在临界段代码的前面和后面;µC/OS-II Service Function{OS_ENTER_CRITICAL();/*临界段代码*/OS_EXIT_CRITICAL();}T1方法一:实现OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()这两个宏的这种方法是最简单的方法,在中调用处理器指令关中断,以及在中调用相应处理器指令开中断;但是这个过程还存在小小的问题:如果在禁止中断的情况下调用μC/OS-II函数,那么从μC/OS-II函数返回时,中断可能会变成允许的了。
而实际上如果调用μC/OS-II之前中断是关掉的希望从μC/OS-II函数返回时,希望中断还是关掉的。
在这种情况下,仅靠这种方法是不适宜的。
方法二:执行OS_ENTER_CRITICAL()时,先将中断状态保存到堆栈中,然后关中断;而当执行OS_EXIT_CRITICAL()时,再从堆栈中恢复原来的中断开关状态。
如果用这种方法,那么不管用户是在中断禁止,还是中断允许的情况下调用μC/OS-II 的功能函数,调用后都不会改变中断状态。
应用程序可以调用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),以保护临界段代码;但是,在使用这种方法时需特别小心,因为如果在调用像OSTimeDly()之类的功能函数之前就关掉了中断,应用程序就会崩溃。
发生这种情况的原因是,任务被挂起,知道延迟时间到,而中断是关掉的。
OSTimeDly()实际上是依靠时钟节拍实现中断的,而因为中断是关掉的,程序不可能获得时钟节拍中断。
明显的,所有的PEND调用都会涉及到这个问题,需十分小心。
一个通用的办法是,应该在中断允许的情况下调用μC/OS-II的系统功能函数。
③OS_CPU.H, OS_STK_GROWTH绝大多数微处理器和微控制器的堆栈都是从上往下递减的,但是也有某些处理器使用的是相反的方式,μC/OS-II被设计成对这两种情况都可以处理,只要再用配置常数OS_STK_GROWTH指定堆栈的方向就可以了:置OS_STK_GROWTH为0,表示堆栈从下(低地址)往上(高地址)递增:置OS_STK_GROWTH为1,表示堆栈从上(高地址)往下(低地址)递减。
④OS_CPU.H, OS_TASK_SW()OS_TASK_SW()是一个宏,是在μC/OS-II从低优先级任务切换到高优先级任务时须用到的。
OS_TASK_SW()总是在任务级代码中被调用。
另一个函数OSIntExit()用在中断服务子程序ISR中。
任务切换只是简单地将处理器的寄存器保存到将被挂起的任务的堆栈中,并且从堆栈中恢复要运行的更高优先级的任务。
在μC/OS-II中,处于就绪态任务的堆栈结构看起来就像刚刚发生过中断一样,所有的寄存器都保存在堆栈中。
换句话说,μC/OS-II要运行处于就绪态的任务必须要做的事是,从任务堆栈中恢复所有的寄存器,并且执行中断返回指令。
为了任务调度,可以通过执行OS_TASK_SW()模仿中断的产生。
绝大多数处理器会提供软中断或指令陷阱来完成这项功能。
中断服务子程序或指令陷阱处理函数(也叫做异常处理函数)的中断向量地址必须指向汇编语言函数OSCtxSw()。
例如,在Intel或者AMD80X86处理器上可以使用INT指令,但是中断向量必须指向OSCtxSw()。
有些处理器如Z80,并不提供软中断机制。
在这种情况下需要想办法将堆栈结构设置成与软中断发生后的堆栈结构一样。
在OS_TASK_SW()函数中调用OSCtxSw(),而不是将某个中断向量指向OSCtxSw()。
实际上μC/OS-II已经被移植到了Z80处理器上,μC/OS-II也同样是可以的。
(3)OS_CPU_A.ASMμC/OS-II的移植实例要求用户编写4个简单的汇编程序:OSStartHighRdy()OSCtxSw()OSIntCtxSw()OSTickISR()如果编译器支持插入行汇编代码,就可以将所有与处理器相关的代码放到OS_CPU.C文件中,而不必再有单独的汇编语言文件。
①OS_CPU_A.ASM, OSStartHighRdy()OSStart()函数调用OSStartHighRdy()来使就绪态任务中优先级最高的任务开始运行,在调用它之前,要已经建立了至少一个应用任务。