μCOSII系统移植2

合集下载

实时操作系统μCOS-II在ARM上的移植研究

实时操作系统μCOS-II在ARM上的移植研究

目录摘要 (1)关键词 (1)1 引言 (1)2 μC/OS-II简介 (2)2.1 μC/OS-II的特点 (2)2.2 μC/OS-II的体系结构 (3)3 移植规划 (3)3.1 移植条件 (3)3.1.1 可重入代码与非可重入代码 (4)3.1.2 OS_ENTER_CRITICAL( )与OS_EXIT_CRITICAL( ) (4)3.2 移植要求 (4)3.3 移植需要编写的文件 (4)3.4 移植代码包括的主要内容 (5)3.5 编译器的选择 (5)4 移植的实现 (6)4.1 OS_CPU.H的移植 (6)4.1.1数据类型的定义 (6)4.1.2堆栈的定义 (6)4.1.3中断与临界区代码 (7)4.1.4使用软中断SWI作底层接口 (8)4.2 OS_CPU_C.C的移植 (9)4.2.1 OSTaskStkInit( ) (9)4.2.2 Hook( )函数 (10)4.3 OS_CPU_A.ASM的移植 (11)4.3.1 OSStartHighRdy()函数 (11)4.3.2 OSCtxSw( )函数 (12)4.3.3 OSIntCtxSw()函数 (13)4.3.4 OSTickISR()函数 (14)5 嵌入式系统的初始化 (16)5.1初始化程序的下载执行 (16)5.2嵌入式系统的初始化过程 (17)5.2.1硬件初始化阶段 (17)5.2.2 RTOS初始化阶段 (18)5.3 ARM920T系统初始化的一般过程 (19)5.3.1设置程序入口指针 (19)5.3.2设置中断向量 (19)5.4初始化存储器系统 (20)5.4.1存储器地址分布 (20)5.4.2 ROM地址重映射的实现 (20)5.5初始化堆栈 (21)5.6初始化应用程序执行环境 (22)5.6.1初始化C环境 (22)5.6.2改变处理器模式 (23)5.6.3调用C程序 (23)5.7 uC/OS系统的初始化 (23)5.7.1 ARM的硬件抽象层——uHALuC/OS (24)5.7.2 ARMTargetInit()函数结构 (24)5.7.3 uHAL的功能 (25)6 移植测试 (25)6.1测试移植代码 (25)6.1.1确保C编译器、汇编编译器及链接器正常工作 (25)6.1.2验证OSTskStkInit() 和OSStartHighRdy()函数 (25)6.1.3验证OSCtxSw() 函数 (26)6.1.4验证OSIntCtxSw()和OSTickISR()函数 (26)6.2在S3C2440上测试移植结果 (26)6.2.1编译uCOS2 (26)6.2.2把uCOS2下载到内存中运行 (28)7 结论 (30)致谢 (31)参考文献 (31)英文翻译 (32)实时操作系统μC/OS-II在ARM上的移植研究陈利顺重庆三峡学院物理与电子工程学院电子信息工程专业06级重庆万州 404000摘要本设计采用三星公司生产的一款基于ARM920T核的高性能低功耗soc芯片S3C2440作为移植的硬件平台。

基于ARM架构的μCOS-II移植及其实时同步交流采样.

基于ARM架构的μCOS-II移植及其实时同步交流采样.

基于ARM架构的μC/OS-II移植及其实时同步交流采样随着微处理器技术与信息技术的不断发展,嵌入式系统的应用也进入到国防、工业、能源、交通以及日常生活中的各个领域。

嵌入式系统的软件核心是嵌入式操作系统。

然而,国内在嵌入式系统软件开发上有很多困难,主要有:国外成熟的RTOS大都价格昂贵并且不公开源代码,用好这些操作系统需对计算机体系结构有深刻理解。

针对以上问题,免费公开源代码的嵌入式操作系统就倍受瞩目了,μC/OS-II就是其中之一。

μC/OS-II是面向中小型应用的、基于优先级的可剥夺嵌入式实时内核,其特点是小巧、性能稳定、可免费获得源代码。

本文在深入研究μC/OS-II内核基础上,将其运用于实际课题,完成了基于ARM架构的μC/OS-II移植及实时同步交流采样的误差补偿研究。

本文主要工作内容和研究成果如下:1.剖析了μC/OS-II操作系统内核,重点研究了μC/OS-II内核的任务管理与调度算法机理,得出了μC/OS-II内核优点:任务调度算法简洁、高效、实时性较好(与Linux相比)。

2.介绍了ARM9体系架构,重点讲叙了MMU(存储管理单元)功能。

为了提高交流采样系统的取指令和读数据速度,成功将MMU功能应用于本嵌入式系统中。

3.完成了μC/OS-II操作系统在目标板上的移植,主要用汇编语言编写了启动代码、开关中断、任务切换和首次任务切换等函数。

4.针对国内外提出的同步交流采样误差补偿算法的局限性,本文从理论上对同步交流采样的准确误差进行了研究,并尝试根据被测信号周期的首尾过零点的三角形相似法,求出误差参数并对误差进行补偿。

此外,考虑到采样周期ΔT不均匀,经多次采样后会产生累积误差,本文也给出了采样周期ΔT的优化算法。

5.完成了系统硬件设计,并根据补偿算法和ΔT优化法则,编写了相应采样驱动和串口驱动。

最后对实验数据进行了分析和比较,得出重要结论:该补偿算法实现简单,计算机工作量小,精度较高。

#uCOS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧

#uCOS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧

引言---实时操作系统地使用,能够简化嵌入式系统地应用开发,有效地确保稳定性和可靠性,便于维护和二次开发.μC/OS-II是一个基于抢占式地实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性,除此以外,μC/OS-II地鲜明特点就是源码公开,便于移植和维护.在μC/OS-II官方地主页上可以查找到一个比较全面地移植范例列表.但是,在实际地开发项目中,仍然没有针对项目所采用芯片或开发工具地合适版本.那么,不妨自己根据需要进行移植.本文则以在TMS320C6711 DSP上地移植过程为例,分析了μC/OS-II在嵌入式开发平台上进行移植地一般方法和技巧.μC/OS-II移植地基本步骤在选定了系统平台和开发工具之后,进行μC/OS-II地移植工作,一般需要遵循以下地几个步骤:● 深入了解所采用地系统核心● 分析所采用地C语言开发工具地特点● 编写移植代码● 进行移植地测试● 针对项目地开发平台,封装服务函数<类似80x86版本地PC.C和PC.H)系统核心无论项目所采用地系统核心是MCU、DSP、MPU,进行μC/OS-II地移植时,所需要关注地细节都是相近地.首先,是芯片地中断处理机制,如何开启、屏蔽中断,可否保存前一次中断状态等.还有,芯片是否有软中断或是陷阱指令,又是如何触发地.此外,还需关注系统对于存储器地使用机制,诸如内存地地址空间,堆栈地增长方向,有无批量压栈地指令等.在本例中,使用地是TMS320C6711 DSP.这是TI公司6000系列中地一款浮点型号,因为其时钟频率非常高,且采用了超常指令字<VLIW)结构、类RISC指令集、多级流水等技术,所以运算性能相当强大,在通信设备、图像处理、医疗仪器等方面都有着广泛地应用.在C6711中,中断有3种类型,即复位、不可屏蔽中断<NMI)和可屏蔽中断<INT4-INT15).可屏蔽中断由CSR寄存器控制全局使能, 此外也可用IER寄存器分别置位使能.而在C6711中并没有软中断机制,所以μC/OS-II地任务切换需要编写一个专门地函数实现.此外,C6711也没有专门地中断返回指令、批量压栈指令,所以相应地任务切换代码均需编程完成.因为采用了类RISC核心,C6711地内核结构中,只有A0-A15和B0-B15这两组32bit地通用寄存器.C语言开发工具无论所使用地系统核心是什么,C语言开发工具对于μC/OS-II是必不可少地. 最简单地信息可以从开发工具地手册中查找,比如:C语言各种数据类型分别编译为多少字节;是否支持嵌入式汇编,格式要求怎样;是否支持“interrupt”非标准关键字声明地中断函数;是否支持汇编代码列表(list>功能,等等.上述地这样一些特性,会给嵌入式地开发带来很多便利.TI地C语言开发工具CCS for C6000就包含上述地所有功能.而在此基础上,可以进一步地弄清开发工具地一些技术细节,以便进行之后真正地移植工作.首先,开启C编译器地“汇编代码列表(list>”功能,这样编译器就会为每个C 语言源文件生成其对应地汇编代码文件.在CCS开发环境中地方法是:在菜单“/Project/Build options”地“Feedback”栏中选择“Interlisting:Opt/C and ASM(-s>”;或者,也可以直接在CCS地C编译命令行中加上“-s”参数.然后分别编写几个简单地函数进行编译,比较C源代码和编译生成地汇编代码.例如:void FUNC_TEMP (void>{Func_tmp2(>。

第6章 μCOS-II操作系统基础及其移植开发初步

第6章 μCOS-II操作系统基础及其移植开发初步

第六章μC O S-I I操作系统基础及其移植开发初步μCOS-II内核作为一种代码公开的嵌入式实时操作系统内核非常有特色,在规模不大的代码内实现了抢占式任务调度和多任务间通信等功能,任务调度算法也很有独特。

该内核裁剪到最小状态后编译出来只有8K左右,全部内核功能(添加LWIP网络协议栈等)也就100K 左右,资源消耗非常小。

市面上一些ARM微处理器片上所带内存就已经足够一个裁剪合适的内核的简单应用,非常方便产品的开发设计。

当前,μCOS-II是一个基本完整的嵌入式操作系统解决方案套件,包括μC/TCP-IP(IP 网络协议栈)、μC/FS(文件系统)、μC/GUI(图形界面)、μC/USB(USB驱动)、μC/FL(Flash加载器)等部件。

但是这些部件不是公开代码的。

还有一些比较重要的可能在嵌入式环境中发挥重要重要作用的部件,包括嵌入式数据库、POSIX兼容性接口、常用设备的驱动模块等。

将来这个行业还会产生更多的重要部件需求,在互联网上的开源社区通常能够找到相应的开源代码包,并且可以进行移植。

6.1 实时操作系统基本原理与技术本节将主要讲述实时操作系统的基本原理和技术,通过对本章的学习读者可以了解掌握RTOS(Real Time operation System,实时操作系统)的基本特征、结构体系、重要指标、性能参数等重要理论,为全面掌握RTOS打下基础。

6.1.1 实时操作系统基本特征根据IEEE实时UNIX分委会对实时操作系统的定义,实时操作系统的基本特征应表现为以下几个方面:∙实时性:对外部事件作出反应的时间必须在限定的时间内,在某些情况下还需要是确定的,可重复实现的,不管当时系统内部状态如何,都是可预测的;∙异步并发事件响应能力:异步事件是指无一定时序关键随机发生的事件。

如外部设备完成数据传输,实时控制设备出现异常情况等。

实际环境中,嵌入式实时系统处理的外部事件往往不是单一的,这些事件往往同时出现,而且发生的时刻也是随机的,即异步的。

μCOS-II移植

μCOS-II移植

图标按钮(或者选择 (6)单击 )单击Context Variable图标按钮 或者选择 图标按钮 【Processor Views】->【Variables】)打开变量观 】 【 】 打开变量观 察窗口, 察窗口,通过此窗口可以观察局部变量和全局变 量。 取消断点, (7)可以单步运行程序,可以设置 取消断点, )可以单步运行程序,可以设置/取消断点 或者全速运行程序,停止程序运行, 或者全速运行程序,停止程序运行,观察变量的 判断蜂鸣器及LED1~LED4的控制是否正 值,判断蜂鸣器及 ~ 的控制是否正 确。
步骤 仿真器和MagicARM2410 (1)连接 )连接EasyJTAG-H仿真器和 仿真器和 实验箱,然后安装EasyJTAG-H仿真器 若已经安 实验箱,然后安装 仿真器(若已经安 仿真器 装过,此步省略),短接蜂鸣器跳线JP9。 装过,此步省略 ,短接蜂鸣器跳线 。 (2)启动 )启动ADS 1.2,打开实验工程文件 , Demo_uCOSII。(本范例在ADS文件夹中操作 Demo_uCOSII。(本范例在ADS文件夹中操作) 。(本范例在 文件夹中操作) (3)Make ug (4)Debug (5)全速运行程序,程序将会在 )全速运行程序,程序将会在main.c的主函 的主函 数中停止(因为 因为main函数起始处默认设置有断点。 函数起始处默认设置有断点。 数中停止 因为 函数起始处默认设置有断点

/************************************ ** Function name: DelayNS *************************************/ void DelayNS(uint32 dly) { uint32 i; for(; dly>0; dly--) for(i=0; i<50000; i++); }

μC-OS-Ⅱ移植

μ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-Ⅱ,最好能找到一个现成的移植实例,如 果没有只好自己编写了。

uCOS-II在51单片机上的移植

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

uCOS-II的移植及使用

uCOS-II的移植及使用

uC/OS-II 概述-性能特点
• 源代码公开 • 可移植(Portable) – 大部分代码用ANSI C写,与处理器无关,移植时不 需修改 – 少量与微处理器硬件相关的部分用C与汇编编写, 移植时需修改:
• OS_CPU.H //与硬件相关,移植时需修改 • OS_CPU_A.ASM //集中了所有与处理器相关的汇编语言 代码 • OS_CPU.C //集中了所有与处理器相关的汇编语言代码
uC/OS-II 概述--文件结构
应用软件 (用户代码) μC/OS-II (与处理器类型无关的代码) μC/OS-II配置文件 (与应用程序有关) OS_CFG.H INCLUDES.H
体系 结构
OS_CORE.C OS_FLAG.C OS_MBOX.C OS_MEM.C OS_MUTEX.C
OS_Q.C OS_SEM.C OS_TASK.C OS_TIME.C uC/OS-II.C uC/OS-II.H
任务控制块就相当于是一个任务的身份证,没 有任务控制块的任务是不能被系统承认和管理 的。
任务控制块的结构
typedef struct os_tcb { OS_STK *OSTCBStkPtr;
//指向当前任务堆栈栈顶的指针。每个任务的堆栈容量可以是任意的。
#if OS_TASK_CREATE_EXT_EN
为了有效的对中断进行控制,在任务的代码里可使用UC/OS-II定义的宏 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来控制何时响应中断, 何时屏蔽中断。在运行这两个宏之间的代码时是不会响应中断的,这种受保 护的代码段叫临界段。
2.1.2 uC/OS-II的任务—任务控制块(TCB)
uC/OS-II 概述-性能特点

TMS320F28335的uCOSⅡ移植

TMS320F28335的uCOSⅡ移植

TMS320F28335的uCOSⅡ移植TMS320F28335的uC-OSⅡ移植1、 uC-OSII 的原理uC-OSII 包括任务调度、时间管理、内存管理、资源管理(信号量、邮箱、消息队列)四⼤部分,没有⽂件系统、⽹络接⼝、输⼊输出界⾯。

它的移植只与 4 个⽂件相关:汇编⽂件(OS_CPU_A.ASM)、处理器相关C ⽂件(OS_CPU.H、OS_CPU_C.C)和配置⽂件(OS_CFG.H)。

有64 个优先级,系统占⽤8 个,⽤户可创建56 个任务,不⽀持时间⽚轮转。

它的基本思路就是“近似地每时每刻总是让优先级最⾼的就绪任务处于运⾏状态” 。

为了保证这⼀点,它在调⽤系统API 函数、中断结束、定时中断结束时总是执⾏调度算法。

原作者通过事先计算好数据,简化了运算量,通过精⼼设计就绪表结构,使得延时可预知。

任务的切换是通过模拟⼀次中断实现的。

uC-OSII ⼯作核⼼原理是:近似地让最⾼优先级的就绪任务处于运⾏状态。

操作系统将在下⾯情况中进⾏任务调度:调⽤API 函数( ⽤户主动调⽤), 中断( 系统占⽤的时间⽚中断OsTimeTick(),⽤户使⽤的中断)。

其整体整体思路如下。

(1)、在调⽤API 函数时,有可能引起阻塞,如果系统API 函数察觉到运⾏条件不满⾜,需要切换就调⽤OSSched()调度函数,这个过程是系统⾃动完成的,⽤户没有参与。

OSSched()判断是否切换,如果需要切换,则此函数调⽤OS_TASK_SW()。

这个函数模拟⼀次中断,好象程序被中断打断了,其实是OS 故意制造的假象,⽬的是为了任务切换。

既然是中断,那么返回地址(即紧邻OS_TASK_SW()的下⼀条汇编指令的PC 地址)就被⾃动压⼊堆栈,接着在中断程序⾥保存CPU寄存器(PUSHALL)……。

堆栈结构不是任意的,⽽是严格按照uC-OSII 规范处理的。

OS 每次切换都会保存和恢复全部现场信息(POPALL),然后⽤RETI 回到任务断点继续执⾏。

设计任务二 uCOS-Ⅱ的移植与应用

设计任务二 uCOS-Ⅱ的移植与应用

设计任务二uC/OS-Ⅱ的移植与应用一、设计目的:1.了解嵌入式实时操作系统u C/OS-Ⅱ可移植、可裁剪等性能特点,正确理解实时操作系统中任务、信号、消息、中断等基本概念以及u C/OS-Ⅱ多任务管理的调度算法;2.掌握u C/OS-Ⅱ在ARM7上移植的方法;3.能将u C/OS-Ⅱ移植在LPC2106中,并根据具体要求创建用户任务,解决实际问题;二、具体任务:1.u C/OS-Ⅱ移植在LPC2106中。

2.编写用户任务程序,完成实时温度的采集控制。

硬件电路见参考硬件电路图,图中用滑动变阻器代替温度传感器转换后的电压,用ADC0809完成A/D转换,并用数码管显示出来。

三、参考硬件电路。

(用文字对所设计的电路功能、原理做详细说明)附图:四、源程序。

(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)源程序:/******************************************************************** ************************************/#include "config.h"#define TASK_STK_SIZE 64INT32U NUM=0;INT32U LED[10]={0x3F,0x06,0x5b,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴级数码管显示段码表INT32U P8=0x00000100; //管脚P0.8INT32U P9=0x00000200; //管脚P0.9INT32U P10=0x00000400; //管脚P0.10INT32U P11=0x00000800; //管脚P0.11INT32U P12=0x00001000; //管脚P0.12INT32U P13=0x00002000; //管脚P0.13INT32U P14=0x00004000; //管脚P0.14OS_STK Task1Stk[TASK_STK_SIZE];OS_STK Task2Stk[TASK_STK_SIZE];OS_STK Task3Stk[TASK_STK_SIZE];void Task1(void *data);void Task2(void *data);void Task3(void *data);void IO_init(void);void delay(INT32U n);/******************************************************************** *************************************** 函数名称: main** 功能描述: c语言的主函数,由它启动多任务环境********************************************************************* ***********************************/int main (void){OSInit();OSTaskCreate(Task1, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 4);OSTaskCreate(Task2, (void *)0, &Task2Stk[TASK_STK_SIZE - 1], 5);OSTaskCreate(Task3, (void *)0, &Task3Stk[TASK_STK_SIZE - 1], 6);OSStart();return 0;}/******************************************************************** *************************************** 函数名称: Task1** 功能描述: μCOS-II的第一个任务,通常由它初始化目标板和建立其它任务********************************************************************* ***********************************/void Task1(void *p_arg){p_arg = p_arg; /* 避免编译警告*/TargetInit(); /* 初始化*/IO_init();while(1){while((IOPIN&P12)!=0);IO_init();while((IOPIN&P12)==0);IOCLR=0x0000FFFF; //输出引脚清零OSTaskSuspend(4); //任务切换}}/******************************************************************** *************************************** 函数名称: Task2** 功能描述: μCOS-II的第二个任务********************************************************************* ***********************************/void Task2(void *p_arg){p_arg = p_arg; /* 避免编译警告*/ IO_init();while(1){IOCLR=P13;delay(10); //送单次脉冲启动A/D转换IOSET=P13;delay(10);IOCLR=P13;delay(10);IO_init();while((IOPIN&P14)==0);IOSET=P11; //打开传送数据开关NUM=IOPIN; //读取数据NUM=NUM>>15;OSTaskSuspend(5); //切换任务}}/******************************************************************** *************************************** 函数名称: Task3** 功能描述: μCOS-II的第三个任务********************************************************************* ***********************************/void Task3(void *p_arg){INT32U n;INT32U A,B,C;p_arg = p_arg; /* 避免编译警告*/while(1){A=NUM/100;B=NUM%100/10;C=NUM%10;IOCLR=0x000000FF;IOSET=0x00000700;for(n=0;n<500;n++){IOCLR=P10;IOSET=LED[C];delay(20);IOCLR=0x000000FF;IOSET=P10;IOCLR=P9;IOSET=LED[B]+0x0000080;delay(20);IOCLR=0x000000FF;IOSET=P9;IOCLR=P8;IOSET=LED[A];delay(20);IOCLR=0x000000FF;IOSET=P8;}OSTaskResume(5);}}/******************************************************************** *************************************** 函数名称: 其他子函数** 功能描述: 供给多任务调用********************************************************************* ***********************************/void IO_init(){PINSEL0=0x0;PINSEL1=0x0; // PO口为普通io口IODIR=0x00002FFF; // 设置PO口的方向}void delay(INT32U n){INT32U i;for(i=0;i<=n;i++);}/******************************************************************** *************************************** End Of File********************************************************************* ***********************************/五、仿真效果。

μCOS-II实时嵌入式操作系统在AVR mega系列MCU上的移植

μ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中英文翻译资料

移植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-II操作系统在各种处理器上的移植

μCOS-II操作系统在各种处理器上的移植

μC/OS-Ⅱ操作系统在各种处理器上的移植长江大学杨青胜徐爱钧摘要介绍μC/OS-II操作系统的应用和移植条件;阐述μC/OS-Ⅱ操作系统在普通的51单片机,NXP公司的LPC2210,ALTERA公司的Nios II 三种处理器上的移植。

关键字μC/OS-II移植51单片机LPC2210 Nios IIPortingμC/ OS - Ⅱto Various processorYangtze University Yang Qingsheng Xu Aijun Abstract :Introduced the μC/OS-II operating system applicationand transplant conditions;Explained the μC/OS-II operating system on 51 common microprocessor ,NXP's LPC2210, ALTERA's Nios II three processors transplant.Key Words:μC/OS-II port 51 microprocessor LPC2210 Nios II μC/OS-II操作系统是一种抢占式多任务、单内存空间、微小内核的嵌入式操作系统,具有高效、紧凑的特点。

它具有执行效率高、占用空间小、可移植性强、实时性能良好和可扩展性强等特点。

采用μc/os-ii实时操作系统可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应,而且采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。

非常适合应用在一些小型的嵌入式产品应用场合,在家用电器,机器人,工业控制,航空航天,军事科技等领域有着广泛的应用。

单片机ARM, FPGA与μC/OS-II操作系统的结合,实现一些具体功能是目前嵌入式应用中比较常见。

在这些应用中基础性的工作就是操作系统的移植,故而本文选取使用较多的51单片机,LPC2210, NiosII三种处理器做介绍必定有一定的意义。

嵌入式系统-RTEOSμCOS-II的移植

嵌入式系统-RTEOSμCOS-II的移植
移植C/OS-II满足的条件
可重入的代码指的是一段可以被多个任务同时调用,而不必担心会破坏数据的代码(比如:一个函数)
01
即:可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,而影响函数中的数据
02
什么是可重入代码
程序1:可重入型函数
congfig.h
UC/OS内核文件
Includes.h
用户程序
OS_CPU.H中定义了与编译器相关的数据类型。比如:INT8U、INT8S等。
01
与 ARM处理器相关的代码,使用OS_ENTER_CRITICAL() 和OS_EXIT_CRITICAL() 宏开启/关闭中断
CPU
定时器
硬件
软件
——μC/OS-II硬件软件体系结构
用于产生系统时钟
移植时需要编写的代码
1
处理器的C编译器能产生可重入代码
2
在程序中可以打开或者关闭中断
3
处理器支持中断,并且能产生定时中断(通常在10—100Hz之间)
4
处理器支持能够容纳一定量数据的硬件堆栈(通常是几千字节)
5
处理器有将堆栈指针和其他CPU寄存器的内容存储和读出到堆栈(或者内存)的指令
void swap(int *x, int *y)
{
int temp;
temp=*x;
x=*y;
y=temp;
}
可重入代码举例
程序2:非可重入型函数
int temp;
void swap(int *x, int *y)
{
temp=*x;
x=*y;
y=temp;

μcos_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来解决。

基于STM32的μCOS_II移植实例(非常详细的移植过程)

基于STM32的μCOS_II移植实例(非常详细的移植过程)

基于STM32的μCOS_II移植实例(非常详细的移植过程)基于STM32的μC/OS_II移植实例目录第一章μC/OS_II移植准备工作 (2)1.1 硬件平台 (2)1.2 软件平台 (2)第二章μC/OS_II移植步骤 (3)2.1 文件结构 (3)2.2 μC/OS_II文件移植 (4)2.3 MDK中导入μC/OS_II文件 (4)2.4 需要修改的代码 (7)第三章μC/OS_II多任务以及任务间通信的实现 (9)3.1 μC/OS_II任务的创建 (9)3.2 事件标志组的创建 (11)第四章μC/OS_II移植测试 (13)4.1 μC/OS_II多任务的测试 (13)4.2 任务间通信的测试 (14)第一章μC/OS_II移植准备工作以武陵源车载系统终端为背景,探讨基于STM32的μC/OS嵌入式系统移植方法。

武陵源车载终端的基本功能是GPS数据的接收、站点和弯道的识别、超速报警、GPRS数据上传等。

本文重点是把μC/OS移植到程序中来,其次把各个基本功能模块化并划分为几个主任务,以便实现嵌入式系统的操作。

1.1 硬件平台硬件平台是ARM公司基于ARMv7架构的Cortex-M3系列处理器STM32F103T8。

此处理器执行Thumb-2指令的32位哈佛微体系结构和系统外设,包括Nested Vec-tored Interrupt Controller和Arbiter总线。

它整合了多种技术,减少内存的使用,极小的RISC内核有着低功耗和高性能的特点。

新的单线调试技术,避免使用多引脚进行JTAG调试,并全面支持RealView编译器和RealView调试产品。

GPS模块为Fastrax IT500,它是一款能适用于非常苛刻的应用场合,有着高性能的导航,即使在GPS卫星可见度较恶劣的环境下也能实现稳定定位。

IT500有着领先的冷启动灵敏度(-148dBm)和领先的导航灵敏度(-165dBm),定位率可以根据客户的要求设置到最高10Hz,非常适合高动态的应用。

基于ARM9的μCOSⅡ嵌入式系统移植.doc

基于ARM9的μCOSⅡ嵌入式系统移植.doc

大庆师范学院本科生毕业论文基于ARM9的μC/OS-Ⅱ嵌入式系统移植院(系)物理与电气信息工程专业电子信息工程研究方向嵌入式技术学生姓名钮佳楠学号200901071677指导教师姓名成宝芝指导教师职称讲师2013年5 月15 日摘要随着计算机和电子技术的发展,越来越多的嵌入式产品出现在人们的日常生活和工业生产之中。

由于嵌入式设备的智能型,使得生活和生产变得极为方便,由此也带来了嵌入式操作系统的迅速发展。

本文通过ADS1.2和JLink的软件平台,以及芯片为S3C2440的ARM9开发板,成功进行微型嵌入式操作系统μC/OS-Ⅱ在开发板上的移植。

在此过程中对于μC/OS-Ⅱ进行了较为全面的学习,对于移植操作也有了深刻的认识。

关键词:μC/OS-Ⅱ;Arm9;移植AbstractWith the development of computer and electronic technology, more and more embedded in people's daily life and industrial production. Intelligent embedded devices, making life extremely convenient and production, which also brought the rapid development of embedded operating system.This article by ADS1.2 and JLink, software platforms, and chip S3C2440 ARM9 development board, the success of micro embedded operating system OS-II development board transplantation. In this process, the OS-II for a more comprehensive learning, have a deep understanding for the transplant operation.Key words: u C/OS - Ⅱ; Arm9; transplant目录第一章嵌入式系统基础 (1)1.1 嵌入式系统概述 (1)1.2 嵌入式体系硬件基础 (1)1.3 嵌入式体系软件基础 (2)第二章μC/OS-II介绍 (3)第三章ARM9介绍 (4)第四章μC/OS-Ⅱ在S3C2440上的移植 (5)4.1移植环境简介 (5)4.2 移植条件 (5)4.3 移植内容 (5)4.3.1 INCLUDES.H (5)4.3.2 OS_CFG.H (6)4.3.3 OS_CPU.H (6)4.3.4 OS_CPU_C.C (6)4.3.5 OS_CPU_A.ASM (8)第五章实例移植 (9)5.1 函数配置 (9)5.2 工程创建 (11)5.3 工程设置 (12)5.4 实例调试 (16)第六章结束语 (18)[参考文献] (19)谢辞 (20)附录 (21)OS_CPU.H 文件函数: (21)OS_CPU_A.ASM文件函数 (21)第一章嵌入式系统基础1.1 嵌入式系统概述与一般的计算机系统不同,嵌入式系统的功能性、可靠性和安全性以及成本、体积、功耗都有严格的要求,并且在以应用为中心的前提下,能够进行软硬件的裁剪。

uCOS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧.

uCOS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧.

uC/OS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧引言---实时操作系统的使用,能够简化嵌入式系统的应用开发,有效地确保稳定性和可靠性,便于维护和二次开发。

μC/OS-II是一个基于抢占式的实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性,除此以外,μC/OS-II的鲜明特点就是源码公开,便于移植和维护。

在μC/OS-II官方的主页上可以查找到一个比较全面的移植范例列表。

但是,在实际的开发项目中,仍然没有针对项目所采用芯片或开发工具的合适版本。

那么,不妨自己根据需要进行移植。

本文则以在TMS320C6711 DSP上的移植过程为例,分析了μC/OS-II在嵌入式开发平台上进行移植的一般方法和技巧。

μC/OS-II移植的基本步骤在选定了系统平台和开发工具之后,进行μC/OS-II的移植工作,一般需要遵循以下的几个步骤:●深入了解所采用的系统核心●分析所采用的C语言开发工具的特点●编写移植代码●进行移植的测试●针对项目的开发平台,封装服务函数(类似80x86版本的PC.C和PC.H)系统核心无论项目所采用的系统核心是MCU、DSP、MPU,进行μC/OS-II的移植时,所需要关注的细节都是相近的。

首先,是芯片的中断处理机制,如何开启、屏蔽中断,可否保存前一次中断状态等。

还有,芯片是否有软中断或是陷阱指令,又是如何触发的。

此外,还需关注系统对于存储器的使用机制,诸如内存的地址空间,堆栈的增长方向,有无批量压栈的指令等。

在本例中,使用的是TMS320C6711 DSP。

这是TI公司6000系列中的一款浮点型号,由于其时钟频率非常高,且采用了超常指令字(VLIW)结构、类RISC指令集、多级流水等技术,所以运算性能相当强大,在通信设备、图像处理、医疗仪器等方面都有着广泛的应用。

在C6711中,中断有3种类型,即复位、不可屏蔽中断(NMI)和可屏蔽中断(INT4-INT15)。

可屏蔽中断由CSR寄存器控制全局使能,此外也可用IER寄存器分别置位使能。

基于ARM9的μCOSⅡ嵌入式系统移植设计

基于ARM9的μCOSⅡ嵌入式系统移植设计

基于ARM9的μCOSⅡ嵌入式系统移植设计ARM9是一种广泛应用于嵌入式系统的处理器架构。

μCOSⅡ是一款适用于小型嵌入式系统的实时操作系统。

本文将讨论基于ARM9的μCOSⅡ嵌入式系统的移植设计。

首先,移植设计需要考虑硬件平台和目标嵌入式系统的特性。

ARM9处理器架构具有高性能、低功耗和低成本等特点,适用于各种应用领域,例如智能手机、数字相机和家电产品。

μCOSⅡ是一款轻量级的实时操作系统,具有快速启动、低内存占用和可配置性高等特点。

因此,基于ARM9的μCOSⅡ移植设计可以在各种嵌入式应用中发挥其优势。

其次,移植设计需要进行硬件平台的选择和准备工作。

ARM9处理器具有多种型号和厂商,例如Atmel、Freescale和Texas Instruments等。

选择适合的ARM9处理器和开发板是移植设计的第一步。

同时,需要根据目标嵌入式系统的需求,选择合适的外设和接口,例如LCD显示屏、键盘、串口和以太网接口等。

这些外设和接口的选择与硬件平台选型紧密相关。

第四,移植设计需要根据硬件平台的特性进行相关配置和适配工作。

μCOSⅡ是可配置的,可以根据嵌入式系统的实际需求进行相应的配置。

配置内容包括任务管理、内存管理、中断管理和设备驱动等。

根据硬件平台的特性,需要适配μCOSⅡ的相关配置,以确保系统的正常运行和稳定性。

例如,设置任务的优先级、栈大小和时间片长度等。

最后,移植设计需要进行系统的测试和优化工作。

对于嵌入式系统而言,可靠性和性能是关键指标。

通过编写测试程序和使用调试工具,可以对嵌入式系统进行功能测试和性能评估。

在测试过程中,需要注重系统的稳定性和响应速度。

如果发现问题或者性能瓶颈,需要进行相应的优化工作,例如调整任务的调度策略、优化驱动程序和减少内存占用等。

总结起来,基于ARM9的μCOSⅡ嵌入式系统移植设计需要进行硬件平台的选择和准备、软件包的安装和配置、相关适配工作以及系统的测试和优化。

通过合理的移植设计,可以将μCOSⅡ操作系统成功移植到ARM9处理器上,并实现嵌入式系统的功能需求。

实时操作系统μCOS-II在MCF5272上的移植

实时操作系统μCOS-II在MCF5272上的移植

实时操作系统μCOS-II在MCF5272上的移植实时操作系统μC/OS-II在MCF5272上的移植摘要:介绍了实时操作系统μC/OS-II的特点和内核结构,并首次实现μC/OS-II在Motorola嵌入式处理器MCF5272上的移值。

关键词:μC/OS-II MCF5272 移植 GNU工具链作为一个实时内核,μC/OS从1992年开始为人们熟悉,到现在已经发展为μC/OS-II。

ΜC/OS-II最多支持56个任务,其内核为占先式,总是执行就绪态的优先级最高的任务,并支持Semaphore(信号量)、Mailbox(邮箱)、Message Queue(消息队列)等多种常用的进程间通信机制。

与大多商用RTOS不同的是,μC/OS-II公开所有的源代码,并可以免费获得,对商业应用收取少量License费用。

一般商用操作系统如VxWorks、pSOS、WinCE,购买费用动辄数万美元,而且每件产品都需要交纳运行费,开发、使用成本高昂。

目前MCF5272是Motorola公司一款集成度最高的ColdFire处理器,采用ColdFire V2可变长RISC处理器核心和DigitalDNA技术,在66MHz时钟下能够达到63Dhrystone2.1MIPS。

其内部SIM (System Integrated Module)单元集成了丰富的通用模块,如10/100MHz快速以太网控制器,USB1.1接口等,并且能够与常用的外围设备(如SDRAM、ISDN收发器)实现无缝连接,从而简化了外围电路设计,降低了产品成本、体积和功耗。

使用GNU工具链(包括交叉编译器GCC、汇编器AS等)进行μC/OS-II内核的编译,Host(宿主机)环境为16MB SDRAM。

在宿主机上编译出MCF5272处理器的可执行代码,通过MCF5272的BDM调试工具下载到目标板调试运行。

1 μC/OS-II系统结构图1说明了μC/OS-II的软硬件体系结构。

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

实验报告
实验名称μCOSII系统移植2
课程名称嵌入式系统
华北电力大学
一、实验目的及要求:
1.实验目的
1、熟悉实验箱的硬件环境;
2、熟悉实验系统各部分的使用。

3、理解LM3S8962的各个资源使用。

4、熟悉μCOSII系统的工作特点。

5、熟悉μCOSII系统移植相关知识。

6、理解μCOSII系统中多任务的调度。

2.实验要求
在μCOSII系统上实现多任务协同工作,任务控制LM3S8962开发板上的LED1闪烁,同时控制OLED动态显示字符或图形。

二、仪器用具:
三、实验原理
i.μCOSII的简介
μCOSII的组成部分
μCOSII可以大致分成核心、任务管理、时间管理、任务同步与通信,CPU的移植等5个部分。

ii.核心部分
是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。

iii.任务管理
μCOSII中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。

63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。

μCOSII提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。

系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前cpu的利用率。

iv.任务调度
μCOSII采用的是可剥夺型实时多任务内核。

可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。

μCOSII的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。

为了简化系统设计,μCOSII规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。

v.时间管理
μCOSII的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。

中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。

μCOSII要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。

μCOSII的移植
本移植的层次结构如图1所示。

它由用户层、中间件层、μCOSII源码层、μCOSII移植层和驱动库层等五个层次组成。

(1)用户层的 User 目录存放用户代码与设置。

其中 Main.C 文件是用户编写任务的地方;
Main.H 定义任务的堆栈大小、优先级等。

OS_Cfg.H 是μCOSII的配置文件,本模版提供了基于μCOSII2.52 的OS_Cfg_V252.H 配置文件,用户可把其中的内容复制到OS_Cfg.H后,再根据需要修改。

Includes.H是总的头文件,除μCOSII的源码外,所有.C 的文件都包含它,这样用户所需的头文件和其它声明只需在 Includes.H 中声明一次就行了。

(2)中间件层的Middleware目录存放用户自己编写的中间件,如 Uart0.C、Uart0.H 串口通信中间件等。

(3)μCOSII源码层的μCOSII\Source目录存放μCOSII2.52的源代码(除μCOSII.C 外的全部.C 和.H 的文件)。

用户可在《μC/OS-II 嵌入式实时操作系统》一书的配套光盘中得到 2.52 的源码。

用户只要把源码复制到此目录,不需对源码作任何的修改。

(4)μCOSII移植层的μCOSII\Ports 目录存放μCOSII基于LM3S 单片机的移植代码,包括OS_CPU_C.C、OS_CPU_A.ASM 和 OS_CPU.H 等三个必要的文件。

Target 目录中的 Startup 文件是单片机的启动代码和中断向量表,用户要在其中加入需要的中断服务函数的首地址(后面的实验例子将详细说明);Target.C和Target.H提供单片机初始化函数targetInit()和其它简单的外设控制API函数,包括LED控制、蜂鸣器控制、按键检测和定时器0中断服务等,方便用户调试程序。

(5)驱动库层是直接面向硬件目标板的层。

一般来说,除μCOSII外,其它代码都要直接或间接通过它访问硬件。

本实验原理
μCOSII可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和多任务操作系统相关的系统服务,如信号量、邮箱等。

其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。

内核属于抢占式,最多可以管
理60个任务。

任务调度将在以下情况下发生
1)高优先级的任务因为需要某种临界资源,主动请求挂起,让出处理器,此时将调度就绪状态的低优先级任务获得执行,这种调度也称为任务级的上下文切换。

2)高优先级的任务因为时钟节拍到来,在时钟中断的处理程序中,内核发现高优先级任务获得了执行条件(如休眠的时钟到时),则在中断态直接切换到高优先级任务执行。

这种调度也称为中断级的上下文切换。

这两种调度方式在μCOSII的执行过程中非常普遍,一般来说前者发生在系统服务中,后者发生在时钟中断的服务程序中。

调度工作的内容可以分为两部分:最高优先级任务的寻找和任务切换。

其最高优先级任务的寻找是通过建立就绪任务表来实现的。

μCOS中的每一个任务都有独立的堆栈空间,并有一个称为任务控制块TCB(Task Control Block)的数据结构,其中第一个成员变量就是保存的任务堆栈指针。

任务调度模块首先用变量OSTCBHighRdy 记录当前最高级就绪任务的TCB 地址,然后调用OS_TASK_SW()函数来进行任务切换。

四、实验方法与步骤:
1、关闭实验箱电源,将仿真器(ULINK2)的数据接口排线插在核心板1的JTAG接
口上。

2、打开Keil01_Blinky文件夹下的Blinky.Uv2工程文件,单击双箭头向下的
全编译图标,完成程序的全编译并且生成可以下载烧写到ARM芯片的AXF文件,
如果编译通不过或提示程序有错误,请修改程序错误,调试程序直到编译通过。

3、全编译通过后,单击标有load的双箭头向下的图标,完成AXF文件通过仿
真器下载和烧写到ARM芯片中,下载完成后按S1键(即RESET复位键)就可以在核
心板上运行程序了。

4、在KEIL界面下左端的Project Workspace窗口中,双击Source Code文件夹
下的ledblinkymain.c程序文件,右端窗口中就会显示相应的程序内容,因为
main函数就在其中,程序就是从main函数开始执行的,找到其中的main函数,
可以查看程序的执行流程。

5、在KEIL状态栏的Debug下,选择Start/Stop Debug Session, 开始调试程
序。

6、程序编译无错误后下载至LM3S8962开发板
五、实验结果与数据处理:
六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见。


LM3S8962开发板上的LED1每隔0.5秒闪烁一次,在OLED屏幕上以不同亮度循环显示字符“Hello World!”,同时还有一个“*”在屏幕上来回跳动。

相关文档
最新文档