ucos在ARM上的移植_第1页
ucos在ARM上的移植_第2页
ucos在ARM上的移植_第3页
ucos在ARM上的移植_第4页
ucos在ARM上的移植_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式操作系统uC/OS-II在ARM上的移植研究李玉刚(南方医科大学广州广东省 510515摘要:随着ARM 技术的广泛应用, 建立基于ARM 构架的嵌入式操作系统已成为当前研究的热点。文中结合实例论述了基于ARM 内核的微处理器上的嵌入式C/OS-II操作系统的移植技术,介绍了C/OS-II系统主要特点,提出了移植条件及移植的实现方案过程,对编写启动代码进行了测试验证通过的整体设计。关键字: ARM;嵌入式操作系统;移植;C/OSII中图分类号: TP311 文献标识码:AResearch of Porting EmbeddedC/OS-II Operating System Based

2、on ARMLiYuGang(Southern medical university, GuangZhou, GuangDong, 510515Abstract:With the applications of ARM technique ,building the embedded operating system based on ARM processor has been a hot point of research. Discusses the porting of C/OS-II RTOS on ARM kernel architecture. Introduce primary

3、 characteristics of C/OS-II system and presents the prerequisite and realization process of transplant . Finally ,explain the reason of program start code and validate through testing.Keywords: ARM;embedded operating system;porting;C/OS-II1 ARM7微处理器体系结构和C/OS-内核结构1.1 ARM7微处理器体系结构90年代,ARM32位嵌人式RISC(精简

4、指令集计算机处理器扩展到世界范围,占据了低功耗、低成本和高性能的嵌入式系统应用领域的领先地位。32 位RISC处理器受到青睐,领先的是ARM (Advanced RISC Machines嵌入式微处理器系列。ARM公司专注于设计,其内核耗电少、成本低、功能强,特有16 /32位双指令集。ARM已成为移动通信、手持计算、多媒体数字消费等嵌入式解决方案的RISC标准。在所有ARM处理器系列中, ARM7处理器系列应用最广, 采用 ARM7处理器作为内核生产芯片的公司最多。ARM7系列为低功耗32位核,最适用于对价位和功耗敏感的消费类产品。ARM7系列的特点是:具有嵌入式ICE-RT逻辑;非常低的功

5、耗;能提供0.9 ×106条指令/MHz的3级流水线和冯· 诺依曼结构。ARM7的主要应用领域为:因特网设备、网络和调制解调器设备以及移动电话等多种多样的媒体和嵌入式应用。ARM7系列具体可分为ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ等型号。1.2 C/OS-内核结构C/OS是源码公开的实时操作系统,后来推出的C/OS-是它的升级版本,它的全部源代码约有5500行,结构非常简洁。对于普通用户来说,在Internet上就能找到完整的嵌入式实施内核的源代码。至今,从8位到64位,C/OS-已在超过40种不同的微处理器上运行。世界上已有数千人在各个领域

6、中使用C/OS-,这些领域包括:照相机行业、航空业、高端音响、医疗器械、电子乐器、发动机控制、网络设备、高速公路电话系统、自动提款机及工业机器人等。许多高校将C/OS-用于实时教学系统。C/OS-体系结构见图1。 图1 C/OS-体系结构 2 C/OS-II 的移植2.1 uC/OS-II 内核移植要点uC/OS-II其90%的代码是用C语言写的,可以直接移植到有C 语言编译器的处理器上,但 是移植工作主要都集中在多任务切换的实现上,因为这部分代码用来保存和恢复CPU现场(即写/读相关寄存器, 不能用C语言,只能使用汇编语言完成。将uC/OS-II移植到ARM处理器上,需要修改三个与ARM体系

7、结构相关的文件。以下分别介绍这三个文件的移植工作。(1OS_CPU.H 文件* 数据类型定义数据类型的修改与所用的编译器相关,不同的编译器使用不同的字节长度表示同一数据类型。* 堆栈单位在任务切换时,C P U 现场的寄存器将保存在当前运行任务的堆栈中,所以OS_STK 数据类型应该与C P U 的寄存器长度一致。* 堆栈增长方向2410A 堆栈由高地址向低地址增长。在函数调用时,入口参数和返回地址一般保存在当前任务的堆栈中,编译器的编译选项和由此生成的堆栈指令就会决定堆栈的增长方向。* 宏定义包括开关中断的宏定义,以及进行任务切换的宏定义。(2OS_CPU_C.C 文件* 任务堆栈初始化任务

8、初始化时的堆栈设计,也就是在堆栈增长方向上如何定义每个需要保存的寄存器位置。在ARM 体系结构下,任务堆栈空间由高至低依次将保存着pc、lr等寄存器。移植中有两点需要说明: 一是, 当前任务堆栈初始化完成后,OSTaskStkInit返回新的堆栈指S T K , 在OSTaskCreate(执行时,将会调用OSTaskStkInit的初始化过程,然后通过OSTCBInit(软件函数调用,将返回的SP 指针保存到该任务的TCB 块中。二是,初始状态的堆栈是模拟了一次中断后的堆栈结构,因为任务创建后并不是直接就获得执行,而是通过OSSched(函数进行调度分配,满足执行条件后才能获得执行。为了使这

9、个调度简单一致,就预先将该任务的PC 指针和返回地址LR都指向函数入口,以便被调度时从堆栈中恢复刚开始运行时的CPU 现场。* 系统钩子函数移植中需要实现几个操作系统规定的hook函数, 如下:OSSTaskCreateHook( OSTaskDelHook( OSTaskSwHook( OSTaskStatHook( OSTimeTickHook( 若无特殊需求,只需简单地将它们都实现为空函数即可。(3OS_CPU_A.S 文件* OSStartHighRdy(.此函数是在OSStart(多任务启动后,负责从最高优先级任务的TCB控制块中获得该任务的堆栈指针SP,通过SP 依次将CPU 现场

10、恢复,这时系统就将控制权交给用户创建的该任务进程,直到该任务被阻塞或者被其他更高优先级的任务抢占CPU。该函数仅在多任务启动时被执行一次,即执行最高优先级任务,之后多任务的调度和切换由以下函数实现。* OSCtxSw(.任务级的上下文切换,当任务因为被阻塞而主动请求CPU 调度时被执行,由于此时的任务切换在非异常模式下进行,因此区别于中断级别的任务切换。它的工作是先将当前任务的CPU 现场保存到该任务堆栈中,然后获得最高优先级任务的堆栈指针,从该堆栈中恢复此任务的CPU 现场,使之继续执行。这样就完成了一次任务切换。* OSIntCtxSw(.中断级的任务切换,在时钟中断ISR(中断服务例程中

11、发现有高优先级任务等待的时钟信号到来,则在中断退出后并不返回被中断任务,而是直接调度就绪的高优先级任务执行,从而能够尽快地让高优先级的任务得到响应,保证系统的实时性能。其原理基本上与任务级的切换相同,但是由于进入中断时已经保存了被中断任务的CPU 现场,因此不用再进行类似的操作,只需对堆栈指针做相应调整。* OSTickISR(.时钟中断处理函数,其主要任务是负责处理时钟中断,调用系统实现的OSTimeTick 函数,如果有等待时钟信号的高优先级任务,则需要在中断级别上调度其执行。其他相关的两个函数是OSIntEnter(和OSIntExit(,都需要在ISR 中执行。*OS_ENTER_CR

12、ITICAL( &OS_EXIT_CRITICAL(.这两个函数分别是退出临界区和进入临界区的宏指令实现。主要用于在进入临界区之前关闭中断,在退出临界区的时候恢复原来的中断状态。它的实现比较简单,可以直接开关中断来实现,也可以通过保存关闭/ 恢复中断屏蔽位来实现。2.2 快速自启动程序设计为保证移植代码以及应用代码在处理器上能够执行,还必须为处理器编写启动代码。启动代码简单地说就是为Main ( 函数的运行准备环境。包括初始化异常向量表、堆栈以及与目标平台的相关定义。启动程序用汇编语言编写,要完成的任务包括:硬件初始化,系统存储系统的配置,复制二级中断向量表等(如图2 所示 。 图2

13、系统启动由于系统的资源有限,程序首先固化在ROM 中运行。为提高系统的实时性,加快代码的执行速度,系统启动后程序被搬移到RAM 中,因为RAM 的存取速度要比ROM 快得多,这样大大提升系 统的性能。3系统测试移植完成后的系统包括4 个部分:1 自启动程序;2C/ OS - II 系统文件;3 移植代码;4 应用程序。开发环境是ARM公司提供的ADS1.2(ARM Developer Suite 。为了验证C/OS-II移植的成功,创建了下面3 个任务:(1 D/A 输出;(2 A/D 采集;(3 LCD 显示。使用信号量来实现模拟量的采集(A/D和模拟量的控制(D/A之间的通讯,同时模拟量和

14、控制量通过LCD显示系统运行结果。可以观测到,LCD显示的数据随模拟量的输出而变化,从而验证移植成功。4 小结:本文作者创新点是利用实时多任务操作系统管理硬件资源,进行任务协调方面设计,使应用程序得以开发利用。对于普通用户来说,在Internet上就能找到完整的C /OS-嵌入式实时内核的源代码。可以利用其开放的源代码为今后的移植工作服务。从以上的范例实践中,不难看出C/OS-是一个具有实时操作系统基本功能的可移植、可裁剪、占先式的实时多任务内核。在嵌入式操作系统平台上开发应用程序有其独到之处。参考文献:1 宋晖,高小明. 基于ARM的嵌入式操作系统C/OS-II的移植.微计算机信息,2006

15、, 2-2: 135-136.2 Jean L. 嵌入式实时操作系统C/ OS - IIM . 邵贝贝译. 北京:北京航空航天大学出版社,2003.3 杜春雷. ARM 体系结构与编程M . 北京: 清华大学出版社,2004.4 王田苗. 嵌入式系统设计与实例开发基于ARM微处理器C /OS-实时操作系统M. 北京:清华大学出版社, 2003.5 马忠梅,徐英慧,等. AT91 系列ARM核微控制器结构与开发M . 北京:北京航空航天大学出版社,2003.6 Atmel Corpration. AT91R40008 Data Sheet Z . Atmel Corporation ,2003.作者介绍: 李玉刚 (1979-男南方医科大学研

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论