《基于ARM的嵌入式操作系统μC_OS-Ⅱ的移植研究.pdf》由会员分享,可在线阅读,更多相关《基于ARM的嵌入式操作系统μC_OS-Ⅱ的移植研究.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第1 7 卷第1 0 期2 0 0 7 年1 0 月计算机技术与发展v 0 1 1 7 1 0C O M P U T E RT E C H N O L O G YA N DD E V E L O P M E N TO c t 2 0 0 7基于A R M 的嵌入式操作系统p C O S I I 的移植研究邓中亮,何双亮(北京邮电大学电子工程学院,北京1 0 0 8 7 6)摘要:随着A R M 技术的广泛应用,建立基于A R M 构架的嵌入式操作系统已成为当前研究的热点。文中结合实例论述了基于A R M 内核的微处理器上的嵌入式v C O S I I 操作系统的移植技术,介绍了v C O S
2、I I 系统主要特点,给出了移植条件及移植的实现过程,同时对编写启动代码进行了说明并测试验证通过。关键词:A R M;嵌入式操作系统;移植;肛C O S I I中图分类号:T I Y 3 1 1文献标识码:A文章编号:1 6 7 3 6 2 9 X(2 0 0 7)1 0 一0 0 0 4 一0 3R e s e a r c ho fP o r t i n gE m b e d d e dw c o s。_。I IO p e r a t i n gS y s t e mB a s e do nA R MD E N GZ h o n g-l i a n g,H ES h u a n g-l i
3、a n g(S c h o do fE l e c t r o n i c&E n g i n e e r i n g,B 两i n gU n i v o IP o s t&T d e c o m,B e i j i n g1 0 0 8 7 6,C h i n a)A b s t r a c t:W i t ht h ea p p l i c a t i o n so fA R Mt e c h n i q u e,b u i l d i n gt h ee m b e d d e do p e r a t i n gs y s t a mb a s e do nA R Mp r o c e
4、 s s o rh a sb e e nah o tp o i n to fr e s e a r c h D h c u s s e st h ep o r t i n go fv C O S I IR T O SO i lA R M 7k e r n da r c h i t e c t u r e I n t r o d u c ep r i m a r yc h a r a c t e r i s t i c so fv C O S I Is y s t e ma n dp r e s e n t st h ep r e r e q u i s i t ea n dr e a l i
5、z a t i o np r o c e s so ft r a n s p l a n t F i n a l l y,e x p l a i nt h er e a s o no fp r o g r a ms 切I r tc o d ea n dv a l i d a t et h r o u g ht e s t i n g K e yw o r d s:A R M;e m b e d d e do p e r a t i n gs y s t e m;p o r t i n g;t u C O S I IO 引言嵌入式应用中移植微型的操作系统,一方面能够把整个系统要实现的功能进行分解
6、,并用不同的任务来实现这些应用功能,使得应用系统的软件结构模块化。一方面,嵌入式系统由于以多任务管理作为基础,可以满足应用系统实时性的要求,有助于提高整个系统的稳定性和可靠性。不同的嵌入式应用其软硬件结构和算法各有特点,因而嵌入式系统的移植必须是针对具体的应用专门设计的。v C O S I I 是一种简单、高效、源代码公开的实时嵌入式操作系统,被广泛应用到各种嵌入式系统中鉴于p C O S I I 良好的扩展性和可移植性,因此将其移植到嵌入式处理器上,对于提高产品的质量,减少开发周期和降低成本方面有着重要的意义。v C O S i i I t J 是源码公开基于p C O S 的嵌人式实时操作
7、系统内核,支持x 8 6,A R M,P o w e r P C,M I P S 等众多体系结构。v C O S-I I 是一个完整的、可移植、固收稿日期:2 0 0 7 一0 1 一0 7作者简介:邓中亮(1 9 6 5 一),男,教授,博士生导师,研究方向为智能通信和嵌入式系统研究。化及裁剪的占先式实时多任务内核,是基于优先级的,即总是让就绪状态中优先级高的先执行,因此实时性比非占先式的内核要好。它包含了实时内核、任务管理、任务间通信同步(信号量、邮箱、消息队列等)和内存管理等功能;它的绝大部分代码是用A N S IC 语言编写的,结构简单可移植性强。目前,-C O S I I 可以在绝大
8、多数8 位、1 6 位、3 2 位、6 4 位微处理器(M P U)、微控制器(M C I7)和数字信号处理器(D s P)上运行,被广泛应用于网络设备、医疗设备、发动机控制、自动提款机及工艺机器人等众多领域。1 移植平台介绍文中讨论的嵌入式目标平台采用的是凤凰微电子有限公司自主开发的基于3 2 位A R M 7 T D M I 核的S S C嵌入式R I S C 处理器。具有3 2 k S R A M、8 M 的片内F l a S h 和3 2 M 的片外F l a s h,主频高达5 0 M H z。支持S R A M、S D f t A M 和F L A S H 等多样大容量外部存储器。
9、文中所用平台在系统的统一编址空间里,经重映射后的地址空间分配为:S R A M 位于0 x 4 0 0 0 0 0 0 0 0 x 4 0 0 0 x x x x,片内P F L A S H 位于0 x 0 0 0 0 0 0 0 0 0 x 0 0 0 3 F F F F,片内D F L A S H 位于0 x 2 0 0 0 0 0 0 0 万方数据第1 0 期邓中亮等:基于A R M 的嵌入式操作系统t,c o s I I 的移植研究5 0 x 2 0 0 1 F F F F,片外D F I A S H 位于0 x 8 0 0 0 0 0 0 0 0 x 8 0 x x x x x x。
10、要保证t t C O S I I 移植到微处理器后能正确运行,处理器需具备如下特性L 2 J:1)处理器的C 编译器支持可重入函数。2)在程序中可以打开和关闭中断。3)处理器支持中断,并且能产生定时器中断,t t C O S I I 是通过定时器中断来实现多任务的调度,即时间片的产生)。t t C O S I I 是通过处理器产生的定时器的中断来实现多任务之间调度的。4)处理器要具有一定的硬件堆栈数量。5)处理器要有将堆栈指针和其他C P U 寄存器存储和读出堆栈(或者内存)的指令。基于A R M 7 T D M I 核 3 J 的s s c 嵌入式处理器完全满足上述要求。2t t c o s
11、 I I 的移植2 1p C O S-内核移植要点,c o s I I 其9 0 的代码是用C 语言写的,可以直接移植到有C 语言编译器的处理器上,但是移植工作主要都集中在多任务切换的实现上,因为这部分代码用来保存和恢复C P U 现场鼹霉债相关寄存器,不能用C 语言,只能使用汇编语言完成夸将v c o s _ I I移植到A R M 处理器上,需要修改三个与A R M 体系结构相关的文件。以下介绍这三个文件的移植工作 4 1。(1)0 s C P U H 文件。*数据类型定义:数据类型的修改与所用的编译器相关,不同的编译器使用不同的字节长度表示同一数据类型。t y p e d e fu r
12、l s i 删c h a rB O O L E A N;t y p e d e fu n s i g n e dc h a rI N T S U;t y p e d e fs i g n e dc h a rI N T 8 S;t y p e d e fu n s i g n e dh a tI N T l 6 U;t y p e d e fs i g r】e di n tI N T l 6 S;t y p e d e fu n s i g n e dl o n gI N T 3 2 U;t y p e d e fs i g r 划l o n gI N T 3 2 S;t y p e d e
13、ff l o a tF P 3 2;t y p e d e fd o u b l eF P 6 4;*堆栈单位:在任务切换时,C P U 现场的寄存器将保存在当前运行任务的堆栈中,所以O S S T K 数据类型应该与C P U 的寄存器长度一致。t y p e d e fu n s i g n e di n tO S S T K;*堆栈增长方向:S S C 堆栈由高地址向低地址增长。在函数调用时,入口参数和返回地址一般保存在当前任务的堆栈中,编译器的编译选项和由此生成的堆栈指令就会决定堆栈的增长方向。#d e f i n eO S S T K G R O W T H;*宏定义:包括开关中断的
14、宏定义,以及进行任务切换的宏定义。#d e f i n e(3 8 一E N T E R C R I T I C A L()A R M D i s a b l el i l t()#d e f i n eO S E X I T C R I T I C A L()A R M E n a b l eI n t()#d e f i n eO S T A S K S W()O S C t x S w()(2)髑一C P U C C 文件。*任务堆栈初始化:任务初始化时的堆栈设计 5 1,也就是在堆栈增长方向上如何定义每个需要保存的寄存器位置,在A R M 体系结构下,任务堆栈空间由高至低依次将保存着P
15、 C,L R,R 1 2,C P S R,S P S R 等寄存器,如图1 所示。移植中有两点需要说明:一是当前任务堆栈初始化完成后,O S T a s k S t k l n i t()返回新的堆栈指S T K,O S T a s k C r e a t e()执行时,将会调用O S T a s k S t k l n i t()的初始化过程,然后通过0 泐I n i t()函数调用,将返回的S P 指针保存到该任务的T C B 块中;-g 初始状态的堆栈是模拟了一次中断后的堆栈结构,因为任务创建后并不是直接就获得执行,而是通过O S S e h e d()i 星i 数进行调度分配,满足执行
16、条件后才能获得执行。为了使这个调度简单一致,就预先将该任务的P C 指针和返回地址L R 都指向函数人口,以便被调度时从堆栈中恢复刚开始运行时的C P U 现场。高地址增长方向P CU tR 1 2:;R 1C P S RS P S R图1 任务堆栈寄存器*系统钩子函数:移植中需实现几个操作系统规定的h o o k 函数,如下:O S S T a s k C r e a t e H o o k()O S T 渊o o k()O S T a s k S w H o o k()O S T a s k S t a t H o o k()C 舀-T t m e T i c k H o o k()若无特
17、殊需求,只需简单地将它们都实现为空函数即可。(3)0 S C P U A S 文件。*O S S t a r t H i g h R d y():此函数是在O S S t a r t()多任务启动后,负责从最高优先级任务的T C B 控制块中获得该任务的堆栈指针s P,通过s P 依次将C P U 现场恢复,这时系统就将控制权交给用户创建的该任务进程,直到该任务被阻塞或者被其他更高优先级的任务抢占C P U。该函数仅在多任务启动时被执行一次,即执行 万方数据6 计算机技术与发展第1 7 卷最高优先级任务,之后多任务的调度和切换由以下函数实现。*O S C t x S w():任务级的上下文切换
18、,当任务因为被阻塞而主动请求C P U 调度时被执行,由于此时的任务切换在非异常模式下进行,因此区别于中断级别的任务切换。它的工作是先将当前任务的C P U 现场保存到该任务堆栈中,然后获得最高优先级任务的堆栈指针,从该堆栈中恢复此任务的C P U 现场,使之继续执行。这样就完成了一次任务切换。*O S I n t C t x S w():中断级的任务切换,在时钟中断I S R(中断服务例程)中发现有高优先级任务等待的时钟信号到来,则在中断退出后并不返回被中断任务,而是直接调度就绪的高优先级任务执行,从而能够尽快地让高优先级的任务得到响应,保证系统的实时性能。其原理基本上与任务级的切换相同,但
19、是由于进入中断时已经保存了被中断任务的C P U 现场,因此不用再进行类似的操作,只需对堆栈指针做相应调整。*o S T i c k I S R():时钟中断处理函数,其主要任务是负责处理时钟中断,调用系统实现的。舛m e T i c k函数,如果有等待时钟信号的高优先级任务,则需要在中断级别上调度其执行。其他相关的两个函数是O S I n t E n t e r()和O S I n t E x i t(),都需要在I S R 中执行。*O S E N T E R C R I T I C A L()&O s E X I T C R I T I C A L():这两个函数分别是退出临界区和进入临
20、界区的宏指令实现。主要用于在进入临界区之前关闭中断,在退出临界区的时候恢复原来的中断状态。它的实现比较简单,可以直接开关中断来实现,也可以通过保存关闭恢复中断屏蔽位来实现。2 2S S C 快速自启动程序设计为保证移植代码以及应用代码在S S C 处理器上能够执行,还必须为处理器编写启动代码 6 。启动代码简单地说就是为M a i n()函数的运行准备环境。包括初始化异常向量表、堆栈以及与目标平台的相关定义。启动程序用汇编语言编写,要完成的任务包括:硬件初始化,系统存储系统的配置,复制二级中断向量表等(如图2 所示)。由于系统的资源有限,程序首先固化在R O M 中运行。为提高系统的实时性,加
21、快代码的执行速度,系统启动后程序被搬移到R A M 中,因为R A M 的存取速度要比R O M 快得多,这样大大提升系统的性能。3 系统测试移植完成后的系统包括4 个部分:1)自启动程序;2)t z C O S I I 系统文件;3)移植代码;4)应用程序。系统硬件初始化忐乡l 代码复制到R A M 中运行弋一磕青一坷中断向罱轰之多调用M a i n 主程序入口地址妙pC 0 S I I 启动图2系统启动开发环境是A R M 公司提供的A D S l 2(A。I t MD e v e l o p e rS u i t e)。为了验证肛c o s I I 移植的成功,创建了下面3 个任务:(1
22、)D A 输出;(2)A D 采集;(3)U、D 显示。使用信号量来实现模拟量的采集(A 巾)和模拟量的控制(D A)之间的通讯,同时模拟量和控制量通过L C D 显示系统运行结果。可以观测到,L C D 显示的数据随模拟量的输出而变化,从而验证移植成功。4 结论v C O S I I 具有很强的实时性,已经被移植到各体系结构的微处理器上。着重分析了将p C O S I I 移植到A R M 构建的嵌入式系统上的主要技术和基本流程,掌握这些移植的技术和流程,对于开发嵌入式系统是十分重要的。目前已经成功移植v C O S I I 到S S C 目标平台,并能顺利启动和稳定运行,达到实时性要求。参
23、考文献:1 J e a n L 嵌入式实时操作系统v C O S I I M 邵贝贝译北京:北京航空航天大学出版社,2 0 0 3 2 王田苗嵌入式系统设计与实例开发 M 北京:清华大学出版社,2 0 0 2 3 A R MA r c h i t e c t u r eR e f e r e n c eM a n u a l M b1 :A d v a n c e dR I S CM a c h i n e sL t d,2 0 0 0 4 周立功A R M 嵌入式系统实验教程 M 北京:北京航空航天大学出版社,2 0 0 4 5 马忠梅。A R M 嵌入式处理器结构与应用基础 M 北京:北京
24、航空航天大学出版社,2 0 0 2 6 杜春雷A R M 体系结构与编程 M 北京:清华大学出版社2 0 0 4 万方数据基于ARM的嵌入式操作系统C/OS-的移植研究基于ARM的嵌入式操作系统C/OS-的移植研究作者:邓中亮,何双亮,DENG Zhong-liang,HE Shuang-liang作者单位:北京邮电大学,电子工程学院,北京,100876刊名:计算机技术与发展英文刊名:COMPUTER TECHNOLOGY AND DEVELOPMENT年,卷(期):2007,17(10)被引用次数:1次 参考文献(6条)参考文献(6条)1.杜春雷 ARM体系结构与编程 20042.马忠梅 ARM嵌入式处理器结构与应用基础 20023.周立功 ARM嵌入式系统实验教程 20044.ARM Architecture Reference Manual 20005.王田苗 嵌入式系统设计与实例开发 20026.Jean L;邵贝贝 嵌入式实时操作系统C/OS-2003 引证文献(1条)引证文献(1条)1.李炜.卢英.张义超.林胜华 基于GPRS无线通信的自动抄表系统期刊论文-计算机技术与发展 2008(10)本文链接:http:/