浅谈基于STM32 的μCOS-Ⅲ系统移植的设计

引言

随着人类社会经济的不断发展,科研领域不断的拓宽,嵌入式系统产品渐渐完善,并在全世界各行业得到广泛应用。通过移植嵌入式操作系统,计算机可以更好的管理内存,并且在很大程度上实现了系统的实时性。COS-Ⅲ作为一个微型实时操作系统,包括了一个操作系统最基本的特性,使用汇编语言和C 语言编写的COS-Ⅲ的构思巧妙,结构简洁精炼,可读性很强,作为一个源码开放的嵌入式操作系统,用户只要做很少的工作就可以把它进行移植和维护。

1 实时操作系统COS-Ⅲ和STM32 处理器

1.1 实时操作系统COS-Ⅲ

COS-Ⅲ的前身是由美国嵌入式系统专家Jean J.Labrosse 于1992 年推出的嵌入式操作系统COS,经过了不断的完善和扩充,形成现在的COS-Ⅲ。

COS-Ⅲ是一个可以基于ROM 运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性。所谓的移植,在一个平台环境能够成功运行的程序,将它搬运到另一个平台环境,并且使其成功运行。发展至今的COS-Ⅲ,特别适合于微处理器和控制器,并且已经移植到近40 多种处理器体系上,涵盖了从8 位到64 位的各种CPU。

COS-Ⅲ源码可分为:与应用程序相关的文件、与计算机硬件相关的文件和系统内核的各种服务文件。用户在移植时,需要对与计算机硬件相关的文件进行修改:如OS_CPU.H 文件,OS_CPU_A.ASM 文件和OS_CPU_C.C 文件。而系统内核的各种文件,如:OS_CORE.C、OS_FLAG.C、OS_MBOX.C、OS_MUTEX.C 等,与应用程序相关的文件: INCLUDES.H 和OS_CFG.H 则不需要修改。

1.2 STM32 处理器

STM32 系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3 内核。我们所采用的STM32F103 型,其内核为ARM32 位Cortex -M3 CPU, 最高工作频率72MHz,1.25DMIPS/MHz。ECOPACK 封装,最多高达112 个的快速I/O 端口,最多多达11 个定时器,最多多达13 个通信接口,具有3 种模式:休眠,停止,待机模式的低功耗,可以使其广泛的应用于工业控制、医疗系统、访问控制等。

ST 公司针对STM32 提供了STM32 库作为函数接口,使得开发人员得以脱离最底层的寄存器操作,有开发快速、易于阅读、维护成本低等优点。

2 COS-Ⅲ的移植

2.1 修改OS_CPU.H 文件

COS-Ⅲ的内核使用一个周期时钟中断,以计算任务延时时间和进行任务调度,在STM32 中,这样的时钟中断正适合由SysTick来提供。因为OS_CPU_SysTickHandler()函数与STM32 库所提供的stm32F10x_it.c 文件中的SycTick_Handler()函数功能一样,都是使用SysTick 的中断处理,所以我们采用SycTick_Handler()函数。因此,相应的对于OS_CPU.H 文件的操作是:注释掉OS_CPU_SysTickHandler()和OS_SysTickInit()函数的声明。

2.2 修改OS_CPU_C.C

OS_CPU_SysTickHandler()和OS_CPU_SysTickInit()函数的定义在OS_CPU_C.C 文件中,由于我们采用了STM32 官方库提供的函数来对SysTick 进行中断处理,所以我们要把OS_CPU_C.C 的OS_CPU_SysTickHandler()和OS_CPU_SysTickInit()这两个函数注释掉。

2.3 修改OS_CPU_A.ASM 文件

我们下载的COS-Ⅲ移植工程是在官方的IAR 编译环境下建立的,IAR 在汇编的语法方面和我们使用的MDK 编译器有一点区别,所有我们对汇编文件的部分指令做如下修改:在OS_CPU_A.ASM 文件中,将原来的PUBLIC 指令改为EXPORT,它们是等价的。

2.4 修改CPU_A.ASM 文件

在CPU_A.ASM 汇编文件中,仍有因编译环境的不同而引起的错误,修改的方法同修改OS_CPU_A.ASM 文件一样,将原来的PUBLIC 指令改为EXPORT。除此之外,在CPU_A.ASM 文件中某些标号带有冒号,如CPU_CntLeadZeros:、CPU_RevBits:、CPU_WaitForInt:和CPU_WaitForExpect:,为了适应编译环境,需要将其中的冒号去掉。

2.5 修改STM32F10X_IT.C 文件

为了实现和完成完整的中断,我们需要将STM32F10X_IT.C 文件原有的PendSV_Handler 空函数注释掉,同时编写SysTick 中断服务函数。

我们可以看到,在SysTick 的函数中调用了3 个函数,它们都是COS 源码定义的函数,其基本功能如下:

(1)OSIntEnter () 函数, 对用于表示中断嵌套层的变量OSIntNesting 加1,它与OSIntExit()函数成对出现,在进入中断服务函数时,都应该包含这两个函数,中断服务的内容位于这两个函数之间。

(2)OSIntExit()函数,除了对嵌套层数OSIntNesting 减1 表示退出中断外,还具有任务调度功能。

(3)OSTimeTick()函数主要工作是对系统统计事件的变量OSTime加1,另外,它还会遍历所有任务,对延时任务的时间减1。

至此,我们对COS 的源码针对编译环境做了修改,将SysTick中断修改到STM32 所提供的STM32F10X_IT.C 文件后,就基本完成了COS 的移植了。

3 系统测试

我们现在需要对移植好的代码做一个简单的测试,通过编写流水灯任务来验证移植的成功。流水灯任务的部分代码如表3:运行后我们发现实验板的流水灯按照循环的方式一直闪烁,验证了COS-Ⅲ在STM32 处理器核上的成功移植。

4 结束语

作为一个成熟的嵌入式操作系统,COS-Ⅲ已经被广泛移植于各种体系的微型处理器上了。在嵌入式技术高速发展的今天,基于ARM 为内核的微处理器凭借ARM 优秀的体系结构被运用于各种行业。通过研究COS-Ⅲ的移植,可以使得它在更广泛的平台得到应用,更促进嵌入式技术的发展。

展开阅读全文

页面更新:2024-06-01

标签:论文   计算机论文   其他计算   系统   内核   嵌入式   函数   处理器   实时   源码   操作系统   环境   文件

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top