μC/OS-Ⅱ在LPC2148上的移植研究

时间:2022-08-07 03:46:00

μC/OS-Ⅱ在LPC2148上的移植研究

摘要:介绍了Philips LPC2148微控制器和实时操作系统μC/OS-Ⅱ的特点。以优龙公司的开发板YL-LPC2148为硬件平台,阐述了如何将源代码开放的μC/OS-Ⅱ移植到LPC2148微控制器上,并指出了在移植过程中的重点和难点。

关键词:嵌入式操作系统;实时操作系统;μC/OS-Ⅱ; 移植

中图分类号:TP303 文献标识码:A文章编号:1009-3044(2007)04-11040-01

1 引言

在嵌入式系统中使用操作系统(嵌入式操作系统)已是大势所趋。目前嵌入式操作系统的种类繁多,市场上比较流行的主要可以分成两类:商用型和免费型。前者以VxWorks、W indows CE、PSOS、Palm OS等为代表,这些操作系统已经十分成熟,功能稳定可靠,有完善的技术支持和售后服务,但往往价格昂贵,并不适用于一些小型系统的开发;后者以Linux和μC/OS-Ⅱ为代表,用户可以免费获得它们的源代码,在价格上占据很大优势。本文在对μC/OS-Ⅱ进行简单介绍的基础上,以优龙公司推出的一款开发板为硬件平台,阐述了μC/OS-Ⅱ在ARM7处理器(以LPC2148为例)上的移植。嵌入式系统以应用为中心、以计算机技术为基础,软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统的应用和发展是计算机技术自桌面系统和网络技术之后,IT产业和IT技术的又一个新的重大进展。研究嵌入式系统,一个必不可少的基础工作就是实现嵌入式操作系统在相关处理器平台上的移植。

2 LPC2148简介

LPC2148是Philips公司新推出的一款基于ARM7TDMI-S的32位微控制器,带有512KB的片内高速Flash存储器和40KB的片内SRAM。内置宽度范围的串行通信接口(USB2.0全速器件接口、双UART、SPI、SSP、I2C) 、多个32位定时器、2个10位ADC、一个10位DAC、PWM通道、45个高速GPIO以及9个边沿或电平触发的外部中断引脚。采用小型LQFP64封装和极底的功耗设计,使LPC2148特别适合于工业控制、医疗系统以及POS机等小型应用,也非常适合于通信网关、协议转换器、软件Modem、语音识别和低端成像系统等应用。

3 实时操作系统uC/OS-Ⅱ概述

μC/OS-Ⅱ是一款源代码开放的实时操作系统内核,由过Micrium公司的J.Labrosse先生开发,它是专门为嵌入式应用而设计的,可用与各类8位、16位和32位单片机和DSP。该内核已有10余年应用史,在诸多领域得到了广泛应用。μC/OS-Ⅱ是一种完全抢占式的内核,它总是运行最高优先级的就续任务。每个任务被赋予惟一的优先级并使用自己的堆栈。μC/OS-Ⅱ可以简单地看作一个多任务调度器,在此基础上完善并添加了与多任务操作系统有关的一些服务,例如信号量、邮箱和消息队列等。图1所示为μC/OS-Ⅱ的体系结构以及它与系统硬件之间的关系。

图1

4 移植条件

移植μC/OS-II 需要一个C 编辑器,因为μC/OS-II是一个可剥夺型内核,用户只有通过C 编辑器来产生可重入代码,C 编辑器还要支持汇编语言程序。μC/OS-II 的移植需要满足以下要求:

(1)处理器的C 编译器可以产生可重入代码;

(2)可以使用C 程序调用进入和退出临界区代码;

(3)处理器必须支持硬件中断.并且需要一个定时中断源;

(4)处理器需要能够容纳一定数据的硬件堆栈;

(5)处理器需要有能够在CPU 寄存器与内核和堆栈交换数据的指令。μC/OS-II 进行任务调度的时候,会把当前任务的CPU寄存器存放到此任务的堆栈中,然后,再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以,寄存器的入栈和出栈是μC/OS-II 多任务调度的基础。ARM7 处理器中有专门的指令处理堆栈,可以灵活的使用堆栈。

5 μC/OS-II在LPC2148上的移植

μC/OS-II 的移植主要集中在三个文件,os_cpu.h, os_cpu_c.c,os_cpu_a.asm。其中os_cpu.h主要包含编译器相关的数据类型的定义、堆栈类型的定义以及几个宏定义和函数说明,os_cpu_c.c中包含与移植有关的C 函数,包括堆栈的初始化函数和一些钩子(Hook)函数的实现。os_cpu_a.asm中则包含与移植有关的汇编语言函数,包括开/ 关中断、上下文切换,时钟中断服务程序等等。

5.1 设置OS_CPU.H 中与处理器和编译器相关的代码

使用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()宏开启/关闭中断.OS_CPU.H中定义了与编译器相关的数据类型。比如:INT8U、INT8S 等。设置堆栈的增长方向:堆栈由高地址向低地址增长,因为不同的微处理器有不同的字长,所以μC/OS-II 的移植包括了一系列的类型定义以确保其可移植。

5.2 堆栈的初始化

堆栈的初始化函数用于定义当创建任务时,任务堆栈中上下文的内容,实际也定义了上下文的保存结构,μC/OS-II 支持两种堆栈结构,即至上而下的堆栈和至下而上的堆栈。在堆栈的上下文中,PC应该存放任务执行的第一条指令。R14中存放的是任务的返回地址,它可存放任务结束函数的地址,也可存放零地址(复位地址),这取决于具体的应用环境。R0寄存器存放的是传递给任务的参数。CPSR存放的是任务运行时处理器的初始状态。

5.3 用C 语言编写十个操作系统相关的函数(OS_CPU_C.C)

OSInitHookBegin(),OSInitHookEnd(),OSTaskCreateHook(),OSTaskDelHook(),OSTaskIdleHook(),OSTaskStatHook(),OSTaskStkInit(), OSTaskSwHook(),OSTCBInitHook()和OSTimeTickHook()。惟一必要的函数是OSTaskStkInit(),该函数在任务创建时被调用,用来初始化任务的堆栈结构,当前任务初始化完成后,OSTaskStkInit 返回新的堆栈指针stk,在OSTaskCreateHook()执行时将会调用OSTaskStkInit的初始化过程,然后通过OSTCBInit( )函数调用将返回的SP指针保存到该任务的TCB 块中,其中带Hook的函数为钩子函数,可以不加代码。另外在OS_CFG.H 中的OS_CPU_HOOKS_EN 被置为1 ,只有被置1时才产生这些函数的代码,

5.4 汇编语言编写四个与处理器相关的函数(OS_CPU_A.ASM)

(1)OSStartHighRdy()

操作系统初始化后,开始执行系统内第一个最高优先级的任务。对于第一个执行的任务,不需要进行上下文保存,只需恢复任务上下文即可。第一个任务的执行是通过调用汇编子程序OSStartHighRdy 实现的。此子程序首先调用钩子函数OSTaskSwHook(),完成用户扩展的操作系统功能,然后将OSRunnig 的值置为真,表示开始任务的执行,从而保证任务切换操作的正确执行。紧接着从具有最高优先级的任务控制块中取得任务的堆栈指针,初始化堆栈指针寄存器SP。然后恢复CPSR,恢复其它的寄存器,开始执行最高的优先级的任务。

(2)OSCtxSw()

任务级的上下文切换,当任务因为被阻塞而主动请求CPU调度时被执行,由于此时的任务切换在非异常模式下进行,因此区别于中断级别的任务切换。它的工作是先将当前任务的CPU现场保存到该任务堆栈中,然后获得最高优先级任务的堆栈指针,从该堆栈中恢复此任务的CPU现场,使之继续执行。这样就完成了一次任务切换。

(3)OSIntCtxSw()

中断级的任务切换,ARM处理器在跳到中断服务程序时,自动关闭IRQ中断。为保证IRQ中断的可重入性,即一个IRQ 中断程序能被另一个IRQ中断,需要使用ARM提供的系统模式。因此中断服务程序需要运行在系统模式下。OSIntCtxSw()的主要功能是将被中断任务的执行环境保存到其堆栈中,而被中断任务堆栈指针的保存、高优先级任务执行环境的恢复与执行,由例程CmnCtxSw完成。

(4)TickISR()

时钟中断处理函数,其主要任务是负责处理时钟中断,调用系统实现的OSTimeTick函数,如果有等待时钟中断信号的高优先级任务,则需要在中断级别上调度其执行。其它相关的两个函数是OSIntEnter()和OSIntExit()。

完成上述工作后,m C/OS-II 就可以正常运行在ARM 处理器上了。

6 结束语

μC/OS-Ⅱ作为一个优秀的嵌入式实时操作系统,已经被成功移植到各种体系结构的微处理器上。鉴于ARM体系结构在嵌入式领域获得了广泛的应用和支持,将μC/OS-Ⅱ移植到ARM平台上,便于更深入的了解嵌入式实时操作系统的构造,加快ARM微处理器的应用和开发。本文阐述了μC/OS-Ⅱ在LPC2148上的移植。移植了μC/OS-II 以后,离实际的应用还是有一段距离的。要想实现一个相对完整、实用的嵌入式的实时多任务操作系统(RTOS),还需要相当多的扩展性的工作。随着ARM体系结构和嵌入式系统的不断发展,μC/OS-Ⅱ的应用必然也会随之越来越广泛。

参考文献:

[1]徐爱钧.IAR EWARM嵌入式系统编程与实践[M].北京航空航天大学出版社,2006(3).

[2]任哲.嵌入式实时操作系统μC/OS- II 原理及应用[M].北京航空航天大学出版社,2005(8).

[3]Jean J.Labrosse 著,邵贝贝等译,嵌入式实时操作系统μC/OSII[M].北京航空航天大学出版社,2003(8).

[4]周立功.ARM嵌入式系统基础教程[M].北京航空航天大学出版社,2005(1).

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:Dreamweaver中的页面跳转 下一篇:超声波测距在汽车倒车防撞系统中的应用