您的位置 首页 测评

μCOS-II移植到ARM处理器上的几个关键

uCOS II是一个源码公开、可移植、可固化、可剪裁和抢占式的实时多任务操作系统,其大部分源码是用ANSI C编写,与处理器硬件相关的部分使用汇编语言编

uCOS II是一个源码揭露、可移植、可固化、可取舍和抢占式的实时多使命操作体系,其大部分源码是用ANSI C编写,与处理器硬件相关的部分运用汇编言语编写。总量约200行的汇编言语部分被压缩到最低极限,以便于移植到任何一种其它的CPU上。

uCOS II最多可支撑56个使命,其内核为占先式,总是履行安排妥当态的优先级最高的使命,并支撑Semaphore(信号量)、Mailbox (邮箱)、MessageQueue(音讯行列)等多种常用的进程间通讯机制。与大多商用RTOS不同的是,uCOS II揭露一切的源代码。并能够免费取得,只对商业运用收取少数License费用。

uCOS II移植跟OS_CUP_C.C、OS_CPU_A.S、OS_CPU.H 3个文件有关,间断处理的移植占有了很大一部分内容。作为移植的一个要点,本文以规范间断(IRQ)为例评论了移植中的间断处理。

1uCOS II体系结构

uCOS II的软硬件体系结构如图1。运用程序处于整个体系的顶层。每个使命都能够以为自己独占了CPU,因而能够规划成为一个无限循环。大部分代码是运用ANSI C言语书写的,因而uCOS II的可移植性较好。尽管如此,依然需求运用C和汇编言语写一些处理器相关的代码。uCOS II的移植需求满意以下要求:

1)处理器的C编译器能够产生可重入代码:能够运用C调用进入和退出Critical Code(临界区代码);

2)处理器有必要支撑硬件间断,而且需求一个守时间断源;

3)处理器需能包容必定数据的硬件仓库;

4)处理器需有能在CPU寄存器与内存和仓库交流数据的指令。

移植uCOS II的首要作业便是处理器和编译器相关代码以及BSP(Board Support Package)的编写。uCOS II处理器无关的代码供给uCOS II的体系服务,运用程序能够运用这些API函数进行内存办理、使命间通讯以及创立、删去使命等。

2uCOS II移植进程中需求留意的几个问题

uCOS II移植的间断处理跟ARM体系结构和uCOS II处理间断的进程有关,有必要留意这2个方面的问题才干高效移植。

2.1 ARM 处理器7种操作形式

用户形式(USER MODE)是ARM 一般履行状况,用于履行大多数运用程序;快速间断形式(FIQ MODE)支撑数据传输或通道处理;间断形式(IRQ MODE)用于通用间断处理;超级用户形式(SVC MODE)是一种操作体系受维护的形式:数据间断形式(ABT MODE)指令预取指间断、数据间断时进入该形式;未界说形式(UND MODE)当履行未界说的指令时进入该形式;体系形式(SYS MODE)是操作体系一种特许的用户形式。

除了用户形式之外,其他形式都归为特权形式,特权形式用于间断服务、反常或许拜访受维护的资源。

特权形式中除体系形式之外另5种形式又称为反常形式,在移植进程中有必要设置间断向量表来处理反常。uCOS II的移植首要处理规范间断(IRQ)、快速间断(FIQ)和软件间断(SWI)。

2.2 uCOS II间断呼应的进程

以IRQ间断为例,假定CRPS中I_bit位为0,当有IRQ间断时,CPU强制进入IRQ形式,当时的CPSR拷贝到SPSR_irq中,PC值保存在LR_irq中,置CPSR中的I位以封闭IRQ间断。数据保存之后,CPU强行从0X00000018开端履行,PC值保存了OS_CPU_IRQ_ISR()的地址, 然后履行OS_CPU_IRQ_ISR()。在OS_CPU_IRQ_ISR()中OS_CPU_IRQ_ISR_Handler()被调用来检测间断源并履行间断。OS_CPU_IRQ_ISR_Handler()回来今后,OS_CPU_IRQ_ISR()又调用OSIntExit()来承认是否有比ISR优先级更高的使命要履行。假如当时间断使命依然是优先级最高的使命,OSIntExit()回来,OS_CPU_IRQ_ISR()弹出间断仓库,假如优先级更高的使命需求履行,OSIntExit()调用OSIntCtxSw()履行优先级更高的使命。

2.3 uCOS II的临界段代码

uCOS II运用关间断来维护临界代码。它界说了2个宏来开间断(OS_EXIT_CRITICAL()),关间断(OS_ENTER_CRITICAL())。OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()有3种方法来完成,uCOS II主张运用第3种方法能够保存当时处理器状况的值。

3uCOS II移植进程中的间断处理

uCOS II间断处理跟CRT.S、OS_CPU_A.S和BSP.C有关,其移植进程首要有以下几个进程。

3.1 在CRT.S中设置间断向量表

ARM的间断向量表坐落ROM 的最底部,其地址规模为0X00000000~0X0000001C,设置如下:

VECTORS:LDR PC,RESET_ADDR

LDR PC,UNDEF_ADDR

LDR PC,SWI_ADDR

LDR PC,PABT_ADDR

LDR PC,DABT_ADDR

NOP

LDR PC,IRQ_ADDR

LDR PC,FIQ_ADDR

RESET_ADDR:。 WORD RESET_HANDLER

UNDEF_ADDR:.WORD UNDEF—HANDLER

SWI_ADDR:.WORD SWI HANDLER

PABT_ADDR:.WORD PABT_HANDLER

DABT_ADDR:.WORD DABT_ HANDLER

WORD 0

IRQ_ADDR:.WORD IRQ_HANDLER

FIQ_ADDR:.WORD FIQ HANDLER

UNDEF_HANDLER:B UNDEF_HANDLER

SWI_HANDLER: B SWI_HANDLER

PABT_HANDLER: B PABT_HANDLER

DABT_HANDLER: B DABT_HANDLER

IRQ_HANDLER: B OS_CPU_IRQ_ISR

FIQ_HANDLER: B OS_CPU_FIQ_ISR

这儿设置了规范间断反常(IRQ)和快速间断反常(FIQ)的间断进口,其他反常都设置为死循环,当产生这些反常的时分,有必要使体系复位才干退出死循环。

3.2 移植间断使命切换

间断使命切换(OSIntCtxSw)和使命切换函数(OSCtxSw)比较类似,首要有以下几步组成:

1)调用OSTask SwHook()

2)OSPrioCur=OSPrioHighRdy

3)OSTCBCur=OSTCBHighRdy

4)SP=OSTCBHighRdy-》OSTCBStkPtr

//获取高优先级的使命仓库指针

5)从高优先级的使命的仓库中弹出高优先级的使命上下文

6)履行高优先级的使命

3.3 移植间断服务程序

以IRQ间断为例间断服务程序(OS_CPU_IRQ_ISR)首要依据上面所描绘的“uCOS II间断呼应的进程”编写,其首要代码如下:

……

LDR R0,OS_IntNesting

LDRB R1,[R0]

ADD R1,R1,#1

STRB R1,[R0]

CMP R1,#l

BNE OS_CPU_IRQ_ISR_1

LDR R4,OS_TCBCur

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/131909.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部