APP下载

基于μC/OS的嵌入式系统应用开发平台的研究

2012-10-08疏国会

制造业自动化 2012年7期
关键词:编译器源代码缓冲区

疏国会,金 鑫

SHU Guo-hui, JIN Xin

(安庆职业技术学院,安庆 246008)

1 嵌入式系统概述

嵌入式系统具有很高的先进性,它综合了多种高新技术,包括计算机技术和电子技术以及半导体技术等,是多种技术结合的产物。日常生活的点滴都渗透了嵌入式系统,大大方便了人们的生活、丰富了人们的精神世界。它的应用领域非常广阔,大到工业、服务业,小到人们的日常娱乐活动,并且随着经济的发展,嵌入式系统的应用范围更加扩大。从专业的角度我们定义嵌入式系统为把计算机作为基础技术,将应用作为中心,可裁减软硬件的,具备应用系统要求的功能、功耗、成本等要求的专用计算机系统。嵌入式系统有三个主要的特征,分别是较强的专用性、精简的系统和具有较小的内核。嵌入式系统对软件的要求很高,符合要求的软件必须具有很高的高实时性,另外软件必须具备高质量和可靠性。我们需要专门的工具和环境对嵌入式系统进行开发[1]。

嵌入式μC/OS的体系结构比较简单,所以大部分使用的是C语言进行编程,大部分的友好界面的编译器都能够生成编译的目标代码,友好的编译器有Borland C、Keil等。嵌入式μC/OS的体系的内核可以很小,小到几十KB的都有,所以它在移植时支持体系结构多种多样的微处理器。这样留给用户的工作就很少了,由于源代码是开放的这就方便了学习。μC/OS-II有几大组成部分,分别是:核心部分(OSCore.c),这是操作系统的处理核心,它又包括了多个组成部分,主要有操作系统初始化、中断进出的前导、任务调度等。任务处理部分(OSTask.c)的操作是用来完成任务的,它又包括了建立任务、删除任务、挂起任务、恢复任务等。时钟部分(OSTime.c)主要用来完成延时任务等。

嵌入式系统包括两大部分,分别是硬件部分和软件部分。嵌入式系统的主要特性如下:

1)其系统采用的是公开的源代码,这也是它最大的特点,在这一点上超越了其它的商业实时内核。源代码开放的好处是为在不同硬件平台上移植操作系统提供了很大的便利。

2)嵌入式系统的可移植性能非常好,μC/OS的嵌入式系统源代码大量采用了ANSI C进行编写,所以具有很强的可移植性,另外采用汇编语言编写了和微处理硬件有关的部分,这样的目的是方面了μC/OS的嵌入式系统的移植,可以适应8、16、32位等。

3)嵌入式应用和μC/OS的联系十分紧密,因为后者是适应前者而设计的,所以可固化。开发者需要拥有一些固化手段,包括编译、下载等就可以使μC/OS嵌入到产品中。

4)可以进行裁减,对于μC/OS的嵌入式系统中不被需要的东西可以进行裁减,只选取有用的应用程序,这样一来μC/OS所需的存储空间就会得到释放。

5)μC/OS的嵌入式系统的另一个特色就是占先式和多任务。级最高的任务在μC/OS的嵌入式系统中是被优先运行的,不过轮转法的任务调度还是不被支持的,实时内核是完全占先式的[2]。

6)其它特性,包括系统服务、稳定性、可确定性等都是μC/OS的嵌入式系统具有很大吸引力的原因,对于安全要求很高的系统来说μC/OS的嵌入式系统是一个不错的选择。另外值得一提的是μC/OS中每个任务有独立的栈,对于任务的独立栈空间是允许的[3]。

2 基于μC/OS的嵌入式系统的平台构建

在嵌入式系统的开发之前我们需要构建一个平台进行开发,μC/OS系统并不提供开发平台,它提供的只是调度任务的内核。内核的作用是提供软件系统的基础,如果想开发一个实用完整的操作系统需要首先进行μC/OS的移植,将其移植到微处理器上之后扩展操作系统,然后得到一个符合标准的操作系统之后才能对应用程序进行开发。

2.1 μC/OS的移植

微处理器上移植有μC/OS是内核正常运转的前提,只有内核正常运行起来才能进一步扩展。μC/OS进行移植的例子不少了,所以可修改现有的这些移植代码,这需要结合自己选择的微处理器。微处理器需要满足一定条件才能够进行μC/OS的移植,例如C编译器可产生重入编码、允许打开和中断C编译器等。

本文中的例子是S a m s u n g公司的ARM7TDMI,通过它来进行μC/OS的移植,其中移植主要是对OS-CPU.H.OS、OS-CPU-A.ASM和OS-CPU-C.C这三个文件的数据和参数进行改写,目的就是进行移植。

2.1.1 对OS-CPU-C.C进行修改

所有和移植有关联的C函数都在OS-CPU-C.C中,和操作系统相关的6个函数编写语言为C语言。这6个函数分别是5个钩子函数和一个堆栈初始化,后者是必要的函数,剩下的5个函数需要声

明,不过任何代码可以省略。

2.1.2 对OS-CPU-A.ASM的修改

OS-CPU-A.ASM中的4个关联处理器的函数由汇编语言编写,这4个函数是OSStartHighRdy()、OSCtxSw()、OSTickISR()、OSInitCtxSw()。这4个函数各有分工,例如可以运行优先级别的最高级的任务的函数是OSStartHighRdy();当前任务TCB的地址可以由LDRr4.addr-OSTCBCur.获得;LDRsp[r5]可以切换到新堆栈。再编写几个相关函数就完成了OS-CPU-A.ASM的移植工作。

2.1.3 修改OS-CPU.H

设置OS-CPU.H代码和ARM具有相关性,并设置数据类型和编译器保持相关性。

对ARM中的数据类型进行定义:

#de fi ne unsigned char BOOLEAN;

#de fi ne unsigned char INT8U /*8位无符号整数*/

#de fi ne signed char INT8S /*8位有符号整数*/

#de fi ne unsigned char INT16U /*16位无符号整数*/

#de fi ne signed int INT8S /*16位有符号整数*/

#de fi ne unsigned long INT32U /*32位无符号整数*/

#de fi ne signed long INT32S /*32位有符号整数*/

#de fi ne fl oat FP32 /*单精度浮点数*/

#de fi ne double FP64 /*双精度浮点数*/

定义16位的ARM的数据类型为typed unsigned int OS-STK。

μC/OS只有完成了以上三个方面的移植才能够在ARM的微处理器上运行正常。完成移植工作后需要划分系统任务、配置存储的空间和实现任务的调度[4]。

2.2 扩展μC/OS

μC/OS是一个内核,它可以执行实时多任务,但是仅仅有μC/OS还是不够的,不能实现完整的嵌入式系统,如果想拥有完整实用的操作系统还需要进行除了移植以外的扩展工作。扩展指的是文件系统的建立和建立外部设备驱动、对有关的API函数进行规范化、GUI函数的创建等等。

表1 用户程序结构

μC/OS系统是没有文件系统的,而嵌入式系统是需要使用文件系统的,这就意味着我们要建立一个文件系统。文件系统的建立过程是首先对文件系统进行初始化,接下来打开一个系统的指定文件,然后对文件进行读取和写入,最后关闭文件,将缓冲释放,这就是实现文件系统的过程。实现文件系统的过程中必须要首先用intOSFile()函数来对系统文件进行初始化,这样做的目的是分配合理的文件结构空间。系统的文件打开采用OpenOSFile()来打开,对打开模式进行指定然后进行FILE结构的创建,分配文件读取的缓冲区。文件的缓冲区数据由ReadOSFile()来直接进行读取,如果数据为空那么就对FAT进行访问,在文件缓冲区进行下一个簇的读取。WriteOSFile()负责在指定的文件中写入缓冲区[5]。

3 结束语

μC/OS是目前流行的、十分优秀的嵌入式操作系统,它有众多的优点,比如实时性好并且内存的需求很小、具有较好的移植性等。这些优点都能够使开发的周期减少,对于开发嵌入式系统的应用程序是十分有利的。在新世纪嵌入式系统的发展尤为迅速,随着嵌入式系统的快速发展μC/OS的应用前景也会越来越广阔[6]。

[1] 陈渝,李明,杨晔.源码开放的嵌入式系统软件分析与实践—基于SkyEye和ARM开发平台[M].中国电力出版社.2004.

[2] Bruce Powel Douglass,柳翔.嵌入式与实时系统开发[M].中国电力出版社.2005.

[3] 毛德操,胡希明.嵌入式系统—采用公开源代码和Strong ARM/Xscale处理器[M].清华大学出版社,2003.

[4] 王田苗.嵌入式系统设计与实例开发[M].清华大学出版社,2002.

[5] 杨柳,卢清萍.嵌入式系统与Nios[J].安徽工程科技学院学报(自然科学版);2005,(02).

[6] 白智国,王芳,冯丹.嵌入式系统移植问题的研究[J].计算机工程与科学.2005,(06).

猜你喜欢

编译器源代码缓冲区
基于TXL的源代码插桩技术研究
面向理想性能空间的跨架构编译分析方法
基于相异编译器的安全计算机平台交叉编译环境设计
运行速度大突破华为《方舟编译器》详解
串行连续生产线的可用度与缓冲库存控制研究*
基于ARC的闪存数据库缓冲区算法①
基于语法和语义结合的源代码精确搜索方法
解密别克安全“源代码”
初涉缓冲区
多目标缓冲区生成算法