嵌入式系统RTEOSμCOSII的移植

合集下载

ucosII多核移植和扩展的原理以及注意事项

ucosII多核移植和扩展的原理以及注意事项

uC/OS-II是源码开放、可固化、可移植、可裁剪、可剥夺的实时多任务OS 内核,适用于任务多、对实时性要求较高的场合。

uC/OS-II适合小型系统,具有执行效率高、占用空间小、实时性优良和可扩展性等特点,最小内核可编译至2K。

uC/OS-II内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。

所谓RTOS移植,就是使一个实时内核能在某个微处理器或微控制器上运行。

大部分的uC/OS-II代码试用C写的,但仍需要用C和ASM写一些与处理器相关的代码,这是因为uC/OS-II在读写处理器寄存器时只能通过ASM实现。

要是uC/OS-II正常运行,处理器必须满足一定的条件:处理器的C编译器能产生可重入代码;用C语言就可以打开和关闭中断;处理器支持中断,并能产生定时中断;处理器支持能够容纳一定量数据的硬件堆栈;处理器有将SP和其他CPU reg读出和存储到堆栈或内存中的指令;uC/OS-II移植工作主要包括以下三个方面的内容:(1)修改与处理器核编译器相关的代码:主要在includes.h中,修改数据类型定义说明,OS_ENTER_CRITICAL()、OS_EXIT_CRITICAL()和堆栈增长方向定义OS_STK_GROWTH。

(2)用C语言编写10个移植相关的函数:主要在OS_CPU_C.C中,包括堆栈初始化OSTaskStkInit()和各种回调函数。

(3)编写4个汇编语言函数:主要在OS_CPU_A.ASM中,包括:_OSTickISR //时钟中断处理函数_OSIntCtxSW //从ISR中调用的任务切换函数_OSCtxSW //从任务中调用的任务切换函数_OSStartHighRdy //启动最高优先级的任务uC/OS-II移植的关键问题:(1)临界区访问:uC/OS-II需要先禁止中断再访问代码临界段,并且在访问完毕后重新允许中断,这就使得uC/OS-II能够保护临界段代码免受多任务或ISR的破坏。

嵌入式操作系统μC/OS-Ⅱ的运行机制与移植

嵌入式操作系统μC/OS-Ⅱ的运行机制与移植

( ) c语言可以打开和关闭中断。 2用
收到本 文时间 : 0 2 6年 2月 1 0 4日
维普资讯
结构和严谨的代码风格 , 非常适合嵌入式操作系统
的初学者。它可 以让我们 以最快 的速度来 了解操
作系统的概念、 结构 和模块工作原理 , 并可 由浅人
们以各 自不同的特色分布于通信 、 航空航天、 汽车、 医疗、 电子消费等不同领域 ; 它们性能卓越 、 功能完
备、 技术成熟 、 服务周全。通过使用这样的操作系 统。 可以缩短产品的开发周期 , 降低开发成本 , 同时
S iS iu n Ch n Yu qa h h g a g e n i
( eat n f l t nc n o m n ao n i eig u a e nvrt, unzo 50 7 ) D pr t e r i adC m u i tnE g er ,SnY t nU ie i G agh u 25 me o E c o s ci n n s s移植  ̄ / S需要 的条件 CO
I / S I是专 门为中低端嵌入式应用设计  ̄ 0 —I C
的可剥夺型实时操作系统内核, 主体用标准的 A . N s c语言写成 , I 可移植性好。 目 已被成功地移植 前 到 MC 、 S 、P U D P C U上 , 包括 8位 、 l 6位、2位及 6 3 4 位。要成功移植  ̄ / S I, C O — I处理器必须满足以下 要求 : () 1处理器的 c编译器能产生可重人代码。
深逐步推广到商用操作系统上。 自 19 92年以来 ,
v / S I 已经被应用到数 以百计 的产品中。对  ̄ O —I C 于那些对操作系统感兴趣的爱好者来说 ,C O — I/ S  ̄ I也是一个很好 的研究样本。 I

ucos_II移植总结

ucos_II移植总结

Ucos_II移植总结:之前已经基本算是成功的移植过ucos-II(内存管理部分没有处理),但是由于可恶的硬盘故障,让我的劳动成果付诸东流。

其间的一些移植经验没有及时总结,现在想来颇有点从头再来的悲壮!鉴于之前的教训,这次,边移植边总结,以防重蹈覆辙。

还好之前的移植过程已经解决了部分棘手的难题,现在复现一下权当是复习一下arm和ucos_II了。

这次的移植还是基于SEP4020芯片,其中的一些引导代码和中断处理代码还是照搬已经写好的代码吧,现在已经没有自己动手写的激情了!下面按照自己的移植步骤一步步总结吧:第一步:创建工程,将基本的启动代码照搬过来,建立一个最小系统,能够在开发板上运行成功。

第二步:将ucos-II源代码copy过来。

第三步:对基本的语法错误进行改正。

对工程进行编译,根据提示进行基本语法的改正。

主要包括:INCLUDES.h中头文件的调用第四步:对需要自己手动编写的函数首先要清空,防止编译报错,然后一步步手动编写代码。

1、临界段代码:os_cpu.h中OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏重新定义为我们自己写的开关中断函数。

Os_cpu_a.s文件添加如下代码:AREA MCUINIT , CODE, READONLYENTRY;/* 开启IRQ中断*/;voidEnableInterrupt(void);{EXPORT EnableInterruptEnableInterruptmrs r0,CPSRbic r0, r0, #0x80 ;set bit7 to 0msr CPSR_cxsf,r0movpc,lr ;Return to caller;};/* 关闭IRQ中断*/;voidDisableInterrupt(void);{EXPORT DisableInterruptDisableInterruptmrs r0,CPSRorr r0, r0, #0x80 ;set bit7 to 1msr CPSR_cxsf,r0movpc,lr ;Return to caller;}END2、OS_CPU_A.S文件代码编写AREA MCUINIT , CODE, READONLYENTRY;/* 开启IRQ中断*/;voidEnableInterrupt(void);{EXPORT EnableInterruptEnableInterruptmrs r0,CPSRbic r0, r0, #0x80 ;set bit7 to 0msr CPSR_cxsf,r0movpc,lr ;Return to caller;};/* 关闭IRQ中断*/;voidDisableInterrupt(void);{EXPORT DisableInterruptDisableInterruptmrs r0,CPSRorr r0, r0, #0x80 ;set bit7 to 1msr CPSR_cxsf,r0movpc,lr ;Return to caller;};任务切换代码OSCTXSWEXPORT OS_TASK_SW_ARMOS_TASK_SW_ARMSTMFD sp!, {lr} ; save pcSTMFD sp!, {lr} ; save lrMRS r14, SPSRSTMFD sp!, {r14} ; save current PSRSTMFD sp!, {r0-r12} ; save register file and ret address ;; OSPrioCur = OSPrioHighRdyIMPORT OSPrioCurIMPORT OSPrioHighRdyLDR r4, =OSPrioCurLDR r5, =OSPrioHighRdyLDRB r6, [r5]STRB r6, [r4]; Get current task TCB addressIMPORT OSTCBCurLDR r4, =OSTCBCurLDR r5, [r4]STR sp, [r5] ; store sp in preempted taskss TCB; Get highest priority task TCB addressIMPORT OSTCBHighRdyLDR r6, =OSTCBHighRdyLDR r6, [r6]LDR sp, [r6] ; get new tasks stack pointer; OSTCBCur = OSTCBHighRdySTR r6, [r4] ; set new current task TCB address;LDMFD sp!, {r0-r12} ; YYY+LDMFD sp!, {r14} ; YYY+; LDR r14, =0x000000D3MSR CPSR_cxsf, r14 ; YYY+;调试时屏掉此句才会跑的通,待解决LDMFD sp!, {lr,pc} ; YYY+;OS启动时开始运行创建的最高优先级任务; void OSStartHighRdy(void); ; Start the task with the highest priority;;EXPORT OSStartHighRdyOSStartHighRdyIMPORT OSTCBCurIMPORT OSTCBHighRdyIMPORT OSRunningLDR r4, =OSTCBCur ; Get current task TCB addressLDR r5, =OSTCBHighRdy ; Get highest priority task TCB addressLDR r5, [r5] ; get stack pointerLDR sp, [r5] ; switch to the new stackSTR r5, [r4] ; set new current task TCB address;OSRunning = 1 'TURE'LDR r4, =0x01 ; Get current task TCB addressLDR r5, =OSRunning ; Get highest priority task TCB addressSTRB r4, [r5];LDMFD sp!, {r0-r12} ; start the new taskLDMFD sp!, {r14} ; get new state from top of the stackMSR CPSR_cxsf, r14 ; CPSR should be SVC32ModeLDMFD sp!, {lr,pc};中断级任务切换EXPORT OSIntCtxSwOSIntCtxSwIMPORT OSTCBCurIMPORT OSPrioCurIMPORT OSTCBHighRdyIMPORT OSPrioHighRdyIMPORT OSTaskSwHookBL OSTaskSwHook;OSTCBCur = OSTCBHighRdyLDR r4, =OSTCBCurLDR r5, =OSTCBHighRdyLDR r6, [r5]STR r6, [r4];OSPrioCur = OSPrioHighRdyLDR r4, =OSPrioCurLDR r5, =OSPrioHighRdyLDRB r6, [r5]STRB r6, [r4];sp = OSTCBHighRdy->OSTCBStkPtrLDR r6, =OSTCBHighRdyLDR r6, [r6]LDR sp, [r6] ; get new tasks stack pointerLDMFD sp!,{r0, r1};在timedly中断服务程序中,函数开始压栈两个寄存器,为保证堆栈中数据一致,需出栈对齐;resume registersLDMFD sp!, {r0-r12} ; start the new taskLDMFD sp!, {r14} ; get new state from top of the stack; LDR r14, =0x000000D3MSR CPSR_cxsf, r14 ; CPSR SVC32Mode调试时屏掉此句才会跑的通,待解决LDMFD sp!, {lr,pc}END中断服务程序代码IRQ_DOstmfd sp!, {r0,r1}ldr r0, =IRQ_R1str r1, [r0]ldmfd sp!, {r0}ldr r1, =IRQ_R0str r0, [r1] ;保存R0和R1寄存器(因为这两个寄存器再后面要用到)add r13, r13, #4 ;restore the sp_irq top to original irq topsub r14, r14, #4mov r0, r14 ;LR_irq(R14)减4并保存在R0mrs r1, spsrorr r1, r1, #0x80 ;将SPSR_irq的中断屏蔽位置‘1’(屏蔽中断),并保存再R1 中msr cpsr_cxsf, r1 ;将模式切换到中断前的模式;---------------------------------------------------------------------------------------------bic r1, r1, #0x80 ;将原先保存的SPSR_irq的R1的中断屏蔽位清零(允许中断)stmfd sp!, {r0}stmfd sp!, {r14}stmfd sp!, {r1} ;依次将R0,R14,R1的值压入中断前模式下的堆栈(当前R0,R14,R1中存放的分别是LR_irq-4,中断前模式下的LR,SPSR_irq)ldr r0, =IRQ_R1ldr r1, [r0]stmfd sp!, {r1}ldr r1, =IRQ_R0ldr r0, [r1]stmfd sp!, {r0}ldmfd sp!, {r0,r1} ;恢复原先保存的R0和R1stmfd sp!, {r0-r12} ;将r0--r12全部压入中断以前模式下的堆栈;; Get current task TCB addressIMPORT OSTCBCurLDR r4, =OSTCBCur;及时保存当前任务中断,因为可能会进行任务切换LDR r5, [r4]STR sp, [r5] ; store sp in preempted taskss TCB;-----------------------------IMPORT int_vector_handlerbl int_vector_handler ;跳转到中断源判断和中断处理程序;----------------------------- ;restore the registerldmfd sp!, {r0-r12} ;恢复原先保存的R0-R12ldmfd sp!, {r14}msr cpsr_cxsf, r14ldmfd sp!, {r14} ;将原先保存的SPSR_irq恢复到CPSR中ldmfd sp!, {pc}3、堆栈初始化函数OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt) {unsignedint *stk;opt = opt; /* 'opt' is not used, prevent warning */stk = (unsigned int *)ptos; /* Load stack pointer *//* build a context for the new task */*--stk = (unsigned int) task; /* pc */*--stk = (unsigned int) task; /* lr */*--stk = (0x60000053); /* cpsr IRQ, FIQ disable*/*--stk = 0; /* r12 */*--stk = 0; /* r11 */*--stk = 0; /* r10 */*--stk = 0; /* r9 */*--stk = 0; /* r8 */*--stk = 0; /* r7 */*--stk = 0; /* r6 */*--stk = 0; /* r5 */*--stk = 0; /* r4 */*--stk = 0; /* r3 */*--stk = 0; /* r2 */*--stk = 0; /* r1 */*--stk = (unsigned int) pdata; /* r0 */// *--stk = (0x0); /* spsr IRQ, FIQ disable */return ((void *)stk);}4、timertick函数void Timer_IRQ_Service1(void){U32 dummyread;U8 y;dummyread = *(RP)TIMER_T1ISCR;/* timerflag = 1;*///OSIntNesting = OSIntNesting + 1;clear_reg( TIMER_T1CR, 0);//关闭通道1中断OSTimeTick ();set_reg( TIMER_T1CR, 0);//使能通道1中断OS_ENTER_CRITICAL();if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Sched. only if all ISRs done & not locked */y = OSUnMapTbl[OSRdyGrp]; /* Get pointer to HPT ready to run */OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);if (OSPrioHighRdy != OSPrioCur) { /* No CtxSw if current task is highest rdy */OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];OSCtxSwCtr++; /* Increment context switch counter *///OS_TASK_SW(); /* Perform a context switch */OSIntCtxSw();}}OS_EXIT_CRITICAL();}第五步:对移植好的代码进行调试。

嵌入式操作系统μCoS-Ⅱ的移植

嵌入式操作系统μCoS-Ⅱ的移植

2 I S Ⅱ的 移 植 分 析  ̄ CO -
2. 移 植 概 述 1
Байду номын сангаас
1 C 一 oS Ⅱ简 介
/ O 一  ̄ S Ⅱ是 一 个 基 于 优 先 级 的抢 占式 实 时 多 C
所谓 移植 , 就是 使一 个实 时 内核能 在其 他 的微 处理 器或 微控 制器 上运 行 。为 了方便 移植 , 大部 分
任务 操作 系统 , 它包含 了实时 内核 、 任务 管理 、 间 时
C S Ⅱ是 用 C语 言编写 的 , O一 但与 硬 件 有关 的 代码
仍需要 用 汇 便 语 言 编 写 。t O — 在 设 计 之 初 已  ̄ SI C I
管理 、 信号 量 、 内存管 理等 , 用 于 8位 1 可 6位 和 3 2
维普资讯
第2 卷 第1 3 期
金 陵 科 技 学 院 学 报
Vo12 N o. . 3. 1
27 月 0 年3 0
JU N LO N IGIS I E O R A F LN T1 T 里 J I N =

Ma.2 0 r ,0 7
随着 现代化 技术 的发 展 , 入式 系统 的应用 范 嵌 围越来 越广 泛 , 于嵌 入式 技术 的产 品从尖 端 复杂 基
自己 的 需 要 对 C S Ⅱ进 行 裁 剪 。t O —I 代 O  ̄ S I源 C
码 公开 , 部分 是 用 A IC编 写 的 , 有 与 处 理 大 NS 只
T ePo tn fEmb d e e ai gS se p h ri go e d d Op r tn y tm  ̄ COS Ⅱ -
GAO iyig Cu — n
( hnd n e i e nl y C egu 109 C i ) C egu i rt o T c o g, hnd 05 , h a U v sy f h o 6 n

嵌入式实时操作系统μCOS-Ⅱ的移植

嵌入式实时操作系统μCOS-Ⅱ的移植

嵌入式实时操作系统μCOS-Ⅱ的移植1、引言嵌入式系统由于它具有软件代码小、高度自动化、响应速度快等特点已经使它在许多领域得到广泛的应用[3]。

从家里的洗衣机、电冰箱,到作为交通工具的自行车、小汽车,到办公室里的远程会议系统等。

嵌入式系统通常由硬件环境和操作系统构成。

在嵌入式操作系统的统一调度管理下实现对所有系统资源的合理利用和分配,达到提高系统性能和有效利用有限资源的目的。

μCOS-Ⅱ作为一个源码开放的嵌入式实时操作系统,同时具有良好的可移植性、可裁剪性、可剥夺性、稳定性和可靠性等优点,使其成为许多嵌入式操作系统的首选。

本文将μCOS-Ⅱ在Freescale的8位处理器芯片HC9S08上移植实现。

2、μCOS-Ⅱ系统结构μCOS-Ⅱ是一个完整的可移植可固化可裁剪的抢占式实时多任务内核。

可以在不需要做很大修改的基础上方便的移植到多种处理器上。

条件是:该处理器要具有一定数量的堆栈,能够使用软件中断,产生定时器中断,此外,编译器要支持可重入代码,并且要能使用汇编实现对处理器内部寄存器的相关操作[2][4]。

通过μCOS-Ⅱ的管理,使多个任务之间相互协调,分时的占用CPU,实现充分利用资源和实时等相应的功能。

任务通常是一个死循环,用来完成某一特定的功能;一个任务相当于一个线程。

μCOS-Ⅱ可以管理多达64个任务,每个任务都具有一个唯一的合法优先级。

但是,优先级最低的那个任务已经被系统定义为空闲任务,用户不能使用。

用户可以通过函数OSTaskCreate()来创建任务,通过OSTaskDel()来删除任务。

任务可能有以下五种状态:睡眠态、就绪态、运行态、等待状态、中断服务态。

利用不同的系统函数可以实现任务在各状态之间的转换。

μCOS-Ⅱ通过对就绪表的操作总是选择在就绪任务中优。

μCOS-II移植

μCOS-II移植

图标按钮(或者选择 (6)单击 )单击Context Variable图标按钮 或者选择 图标按钮 【Processor Views】->【Variables】)打开变量观 】 【 】 打开变量观 察窗口, 察窗口,通过此窗口可以观察局部变量和全局变 量。 取消断点, (7)可以单步运行程序,可以设置 取消断点, )可以单步运行程序,可以设置/取消断点 或者全速运行程序,停止程序运行, 或者全速运行程序,停止程序运行,观察变量的 判断蜂鸣器及LED1~LED4的控制是否正 值,判断蜂鸣器及 ~ 的控制是否正 确。
步骤 仿真器和MagicARM2410 (1)连接 )连接EasyJTAG-H仿真器和 仿真器和 实验箱,然后安装EasyJTAG-H仿真器 若已经安 实验箱,然后安装 仿真器(若已经安 仿真器 装过,此步省略),短接蜂鸣器跳线JP9。 装过,此步省略 ,短接蜂鸣器跳线 。 (2)启动 )启动ADS 1.2,打开实验工程文件 , Demo_uCOSII。(本范例在ADS文件夹中操作 Demo_uCOSII。(本范例在ADS文件夹中操作) 。(本范例在 文件夹中操作) (3)Make ug (4)Debug (5)全速运行程序,程序将会在 )全速运行程序,程序将会在main.c的主函 的主函 数中停止(因为 因为main函数起始处默认设置有断点。 函数起始处默认设置有断点。 数中停止 因为 函数起始处默认设置有断点

/************************************ ** Function name: DelayNS *************************************/ void DelayNS(uint32 dly) { uint32 i; for(; dly>0; dly--) for(i=0; i<50000; i++); }

UCOS-II的详细移植笔记两种处理器的移植比较(S1C33209S3C44BOX)

UCOS-II的详细移植笔记两种处理器的移植比较(S1C33209S3C44BOX)

UCOS-II的详细移植笔记两种处理器的移植比较(S1C33209S3C44BOX)UC/OS-II的详细移植笔记两种处理器的移植比较(S1C33209&&S3C44BOX) [原创 2007-05-20 23:03:21] 字号:大中小UC/OS-II的移植步骤分析zqcumt 07-4-15关于UC/OS-II的移植网上介绍的已经很多了,比较流行的几款处理器(例如ARM)在网上都可以直接下载移植好的代码。

由于最近选修了一门嵌入式系统的课,用的处理器是EPSON公司的S1C33系列,做实验的时候要进行操作系统的移植,这个周末花了一天半的时间学习了一下,因为毕业设计的时候做过ARM上的移植,于是将两者比较了一下,给出一般的移植要点。

由于将来实验还要设计到GUI的移植以及文件系统的移植和网络协议的移植,我会将自己的学习笔记都记录下来。

大家下载到源码后,针对Intel 80x86的代码在uCOS-II\Ix86L目录下。

代码是80x86实模式,且在编译器大模式下编译的。

移植部分的代码可在下述文件中找到:OS_CPU.H, OS_CPU_C.C, 和OS_CPU_A.ASM。

大家可以参考这个例子,对它进行修改。

INCLUDES.H 是主头文件,在所有后缀名为.C的文件的开始都包含INCLUDES.H文件。

使用INCLUDES.H的好处是所有的.C文件都只包含一个头文件,程序简洁,可读性强。

缺点是.C文件可能会包含一些它并不需要的头文件,额外的增加编译时间。

与优点相比,多一些编译时间还是可以接受的。

用户可以改写INCLUDES.H文件,增加自己的头文件,但必须加在文件末尾。

/////////////////////////////////////////////////////////////////// ////////////一、(1)OS_CPU.H文件的移植 (针对S1C33209)//////////////////////////////////////////////////////////////////////////OS_CPU.H 文件中包含与处理器相关的常量,宏和结构体的定义。

嵌入式操作系统μC/OS—Ⅱ的移植分析

嵌入式操作系统μC/OS—Ⅱ的移植分析

C OSI / -设置 I 与 应用有关的代码
o s CF H G

oS M BOX C 0S 0 C oS 1AS C 1 K oS S EM C OS TI E C M
I NCL UDE S H
O 一Ⅱ为每个任务设 置独立堆栈 , 以快速实现 任务切换 。 S 可
软件
CU P
I I
时钟
图 1 应 用 g / 一Ⅱ 的 系 统 结 构 C OS
22 1 编 写 0S CP H 文 件 -_ U.
OS

移植  ̄ / S CO 一Ⅱ的S M、 P 或DS 等必须 满 足 以下条件 :① 处 C / U C P
理器 的C 编译 器能 产 生可 重入代 码 ;② 能用C 言打 开 和关 闭 语
软件 的编 写 , 分析 归纳 了 ̄ / S 并 C O 一Ⅱ移 植 要 点 。
关 键 词 : C O — I移 植 ; 译 器 ;  ̄ / S I; 编 目标 系统
中 图 分 类 号 :P 编 号 :6 2 7 0 (O 8 0 — 10 0 17 — 8 0 2O )4 0 3 — 2

⑤编写4 个汇编语言函数( SC U AA M) O — P _ .S 。
COSI / — 的应用程序或软件 I
“c0 — 与处 理 器无 关 的 代码 ,sI I
U Co S IH I UCoS I I C 0S CoDER C
作 系统 。 含了实 时内核 、 务管理 、 间管 理 、 务 间通 信同步 包 任 时 任
( SC UH)②声明9 O— P . ; 个数据类 型( S C UH ; O _ P .)③用#en声 df e i

uCOS-II移植总结

uCOS-II移植总结

u C/OS-II移植总结RTOS移植牵涉到软件平台—编译器、硬件平台—CPU,移植前需要了解CPU及编译器的一些基本特点。

1、编译器a、堆栈运行原理本次移植的软件平台为CodeVision编译器,它的堆栈由两部分组成:硬件堆栈(HardStack)用来保存中断及函数调用的返回地址,它的大小将影响函数调用嵌套的深度,实际大小应根据中断及函数嵌套的深度来决定,并留有一定的裕度。

硬件堆栈由CPU中的指针SP实现。

软件堆栈(SoftStack)用来分配局部变量及传递参数。

在此次移植中,由CPU中的Y指针模拟实现。

b、堆栈指针所指向的单元是否为可用单元大多数编译器生成的代码,其堆栈指针所指向的单元为可用单元,也就是说在将数据压入堆栈前不用再调整堆栈指针,堆栈指针在上一次使用完后已经调整好了。

前面所说的硬件堆栈(HardStack)即为这种类型。

还有一种堆栈,其指针所指向的单元为不可用单元,在向堆栈压入数据前需调整堆栈指针,软件堆栈(SoftStack)即为这种类型。

软件堆栈设计为这种形式完全是为了适应A VR指令和软件堆栈增长方向与硬件堆栈增长方向相同。

软件堆栈(SoftStack)由Y指针模拟实现,但在A VR的指令集中只有:LD Rd,Y+ LD Rd,–Y ST Y+,Rr ST –Y,Rr要实现向下增长的堆栈就只能使用ST –Y,Rr和LD Rd,Y+。

指针指向的单元已压入数据,因此使用前需调整指针,而ST –Y,Rr正好能完成这个动作。

c、多字节变量在宽度为单字节的存储器中的分配规则多字节变量指定义为int、long int、float、double等类型的变量。

在CodeVision编译器遵循的原则是:变量低字节部分分配在内存的低地址单元,变量高字节部分分配在内存高地址单元。

如:int a a为双字节变量,其低字节保存在内存的0x24H,则高字节保存在内存的0x25H。

了解这些变量在内存中存储形式是为了能够在在线汇编中正确操作它们。

μC/OS-Ⅱ嵌入式实时操作系统面向ARM处理器的移植

μC/OS-Ⅱ嵌入式实时操作系统面向ARM处理器的移植

1 R A M7微处理器体系结构
9 O年代 ,R 3 A M 2位嵌人式 RS ( I 精简指令集计算 C 机) 处理器扩展到世界范 围, 占据了低功耗、 成本和 低 高性能 的嵌入 式 系统应用 领域 的领先 地位。3 2位 RS I C处理器受到青睐, 领先的是 A M( dacdRS R A vne I C M ci s 嵌入式微处理器系列。A M公司专注于设 ah e) n R 计, 其内核耗电少 、 成本低、 功能强 , 特有 1/ 2 6 3 位双指
李 娜, 夏靖波 , 王 航 , 冯奎胜
( 军工程 大 学电讯工 程 学院 , 西省 西安 市 707 ) 空 陕 10 7 摘 要: 分析 了 A M 体 系结 构特 点 和 t / S I R z O .I内核 结构 , C 讨论 了支持 t / S I移 植 的 处理 器 z O .I C
A M7 D —、 R 70 、 R 7 J 型号 。 R T MI A M 2 T A M E 等 S
嵌入式系统起 源于微型计算机 时代。2 0世纪 7 0
年代 , 微处理器 的出现使计算机发生 了历史 性变化。
以微处理器为核心 的微型计算机深入千家万户 , 人们 称之为 P c时代。嵌入式系统 的全面发展是从 2 0世 纪9 0年代开始 , 主要受分布式控制 、 数字化通信、 信息 家电、 网络应用等强烈的应用需求所牵引。现在 , 人们 可以随处发现嵌 入式 系统 的应用 , 如手机 、 P M 3播放 器、 数码相机 、 C 、 V D 机顶盒、 路由器、 交换机等。嵌入
OS M匝M C OS 0 C
OS E C S M O S 1 K _ AS OS Tl M匝 C
A M 处理器作为内核生产芯片的公司最多。 R7 A M7系列 为低 功耗 3 R 2位核 , 适用 于 对 价位 和 最 功耗敏感的消费类产 品。A M R 7系列 的特点是 : 具有 嵌入式 IER C —T逻辑 ; 非常低 的功耗 ; 能提供 09×1 . 0 条指令/ H 的3级流水线和冯 ・ M z 诺依曼结构。 AM R 7的主要应用领域为 : 因特网设备 、 网络和调

嵌入式实时操作系统μcos_Ⅱ的移植探讨

嵌入式实时操作系统μcos_Ⅱ的移植探讨

计算机应用Computer Application《自动化技术与应用》2003年第22卷第5期嵌入式实时操作系统μc/os-Ⅱ的移植探讨雷必成,吴高标,吴永良(台州学院计算机系 台州 317000)摘要:介绍一种嵌入实时操作系统———μc/os-Ⅱ的特点和基本组成。

以μc/os-Ⅱ在MCS-51上的移植为例,着重讨论μc/os-Ⅱ在移植过程中必须注意的几个问题。

并讨论其它处理器对同一问题的不同处理方式。

关键词:实时操作系统;嵌入式;移植;MCS-51中图分类号:TP31612 文献标识码:A 文章编号:100327241(2003)0520069203Transplanting of The Embedded Real T ime OperationSystem-μcΠo s-ⅡLEI Bi-cheng,WU G ao-biao,WU Yong-liang(Computer Department o f Taizhou Univer sity,Taizhou317000,China)Abstract:To introduce the characteristics and basic constitution o f the embedded Real Time Operation System-μcΠos-Ⅱ,it puts an emphasis on sever2 al problems on the transplanting process o fμcΠos-Ⅱ,taking“μcΠos-Ⅱtransplanting into MCS-51”for example.And it also involves different approaches to the same issue on other processor s.K ey words:RTOS;Embedded;Transplanting;MCS-511 引言在嵌入式应用系统的设计中,实时操作系统的应用越来越受到重视。

uCOS-II在嵌入式平台的移植技巧

uCOS-II在嵌入式平台的移植技巧
#define O S _ E N T E R _ C R I T I C A L () Disable_int()
#define OS_EXIT_CRITICAL() Enable_int()
Disable_int和Enable_int是用汇编 语言编写的两个函数。在这里使用了控 制状态寄存器( C S R ) 的一个特性—— C S R 中除了控制全局中断的 G I E 位之 外,还有一个 PGIE 位,可用于保存之前
└─ TI_C6711 // 系统核心
=(OS_STK*)
├─ CCS // 开发工具
DSP_C6x_GetCurrentSP(); // 服务

OS_CPU.H
函数


// 获取当前 SP 的值
OS_CPU_A.ASM
// 允许中断嵌套 则在此处开中断

----
S T W B4,*+SP(4) / /
a=0
NOP 2
//-----
-----
B IRP // 中断返回 L D W *++SP(8),B4/ / 出栈 NOP 4 与前一段代码相比,对于中断函数 的编译,有两点不同: ● 函数的返回地址不再使用B3 寄存 器,相应地也无需将 B3 入栈。(IRP 寄 存器能自动保存中断发生时的程序地址) ● 编译器会自动统计中断函数所用 到的寄存器,从而在中断一开始将他们 全部入栈保护——例如上述程序段中, 只用到了 B4 寄存器。
函数

(类似 80x86 版本的 PC.C 和 PC.H) C 语言开发工具
在 C C S 中编译后生成的 A S M 代码
系统核心
无论所使用的系统核心是什么,C 为:
无 论 项 目 所 采 用 的 系 统 核 心 是 语言开发工具对于μC/OS-II 是必不可

嵌入式系统rtosucos-ii原理及应用-5

嵌入式系统rtosucos-ii原理及应用-5

2
节拍
了解不同类型任务的实时性要求,如何在UCOS-II中进行协作操作以满足这些需 求?掌握UCOS-II中节拍的基本概念,以及如何实现节拍的同步、异步和互斥。
3
定时器和超时
UCOS-II如何实现定时器、超时和等待机制,以及如何在应用中灵活应用?
U C O S-II:信号量、互斥量和事件标志
信号量
RTO S 的应用开发和市场趋势
1
RTO S 的应用开发流程
从开发到部署,RTOS应用开发的整个流程是怎样的?您如何提高开发效率和减少开发时间?
2
RTO S 的市场趋势
RTOS市场正在迅速发展。它们将如何重塑未来的嵌入式应用行业?哪些新技术将推动RTOS的 应用发展?
3
未来的发展趋势
随着嵌入式系统日益广泛地应用在日常生活和工作中,RTOS也在迅速发展。未来的发展趋势 和创新技术是什么?它们将如何推动嵌入式系统的革新和发展?
实时操作系统的定义和意义
定义
什么是实时操作系统?什么是实时和非实时的区别? 在嵌入式系统的应用中,实时系统扮演了什么角色?
意义
行业中对实时系统的需求越来越高,其价值和重要 性是什么?作为一个嵌入式系统的工程师,你将需 O S-II:任务调度算法和内核结构
任务调度算法
什么是任务调度算法,为什么它对UCOS-II如此重要?在哪些场景下,UCOS-II采用任务调度 算法?
内核结构
什么是UCOS-II的内核结构,其模块分为哪几部分?你如何可以根据设计需求,自定义内核 结构?
U C O S-II:任务管理和节拍
1
任务管理
UCOS-II是如何管理任务的?有哪些方法可以在UCOS-II中实现任务管理以控制可 靠性和稳定性?

μCOS-II嵌入式操作系统移植和实时性测量

μCOS-II嵌入式操作系统移植和实时性测量

μC/OS-II嵌入式操作系统移植和实时性测量一、实验目的●通过向Sitsang实验板移植μC/OS-II操作系统,学习它的结构和移植方法,体会操作系统移植与目标机体系结构和编译器的关系;●学习操作系统中的中断概念,分析μC/OS-II的中断处理过程,通过分析和测量μC/OS-II的中断处理时间,理解操作系统的实时性;●学习ARM指令集和汇编语言程序设计,理解ARM处理器的异常处理模式;●学习使用AXD和ARMulator仿真、调试系统程序;●培养查阅硬件手册、调试底层软件的能力。

二、实验内容I.μC/OS-II嵌入式操作系统移植1.μC/OS-II正常运行,需要处理器满足以下条件:●处理器的C编译器能产生可重入代码;●用C语言就可以打开和关闭中断;●处理器支持中断,并且能产生定时中断(通常在10至100Hz之间);●处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈;●处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存中的指令。

Sitsang和ADS1.2开发环境均满足上面的要求,因此μC/OS-II可以正常运行。

2.需要修改的与处理器相关的三个文件说明:我们选择移植较新的uC/OS-II v2.80版,但移植步骤与v2.52版无别。

●OS_CPU.H在该头文件中定义了操作系统需要的数据类型和在内存中占用的位数、堆栈的增长方向以及开关中断的方法。

针对ARM编译器说明,定义了如下的数据类型和位数描述:typedef unsigned char BOOLEAN;typedef unsigned char INT8U;typedef signed char INT8S;typedef unsigned short INT16U;typedef signed short INT16S;typedef unsigned int INT32U;typedef signed int INT32S;typedef float FP32;typedef double FP64;对于ARM处理器,每一个堆栈的表项都是32位,因此需要将OS_STK定义如下:typedef unsigned int OS_STK;且堆栈的增长方向是高地址向低地址增长,因此定义#define OS_STK_GROWTH 1而ARM处理器上的状态寄存器(CPSR和SPSR)也都是32位,因此typedef unsigned int OS_CPU_SR;我们选择OS_CRITICAL_METHOD #3作为进出临界区的实现方法,即进入时保存CPSR、退出时恢复CPSR。

uCOS-II嵌入式操作系统介绍与移植

uCOS-II嵌入式操作系统介绍与移植

OSStartHighRd
1、该函数是在OSStart函数中调用 2、负责从最高优先级任务的TCB中获得该任务的堆
栈指针sp,并依次将cpu现场恢复,这时系统就将 控制权交给用户创建的该任务进程,直到该任务被 阻塞或者被其他更高优先级的任务抢占cpu 3、该函数仅在多任务启动时被执行一次,用来启 动之前创建的第一个,也就是最高优先级的任务执 行
3、可从网站上获 得全部源码及其在各种体系结构平 台上的移植范例。
uC/OS-II特点
1、uC/OS-II内核具有可抢占的实时 多任务调度功能
2、提供了许多系统服务,如信号量、 消息队列、邮箱、内存管理、时间 函数等
3、这些功能可以根据不同的需求进 行裁减。
uC/OS-II的移植
ARM处理器相关宏定义
1、退出临界区
#defineOS_ENTER_CRITICAL() ARMDisableInt()
2、进入临界区
#defineOS_EXIT_CRITICAL() ARMEnableInt()
堆栈增长方向
1、堆栈由高地址向低地址增长,这个也 是和编译器有关的,当进行函数调用时, 入口参数和返回地址一般都会保存在当 前任务的堆栈中,编译器的编译选项和 由此生成的堆栈指令就会决定堆栈的增 长方向。
#define OS_STK_GROWTH 1
OS_CPU.c的移植
1、任务堆栈初始化 2、系统hook函数 3、中断级任务切换函数
任务堆栈初始化OSTaskStkInit
1、由OSTaskCreate或OSTaskCreateExt调用 2、用来初始化任务的堆栈并返回新的堆栈指针stk。
退出/进入临界区函数 ARMDisableInt/ARMEnableInt

嵌入式操作系统μCOS-II实验ok

嵌入式操作系统μCOS-II实验ok

7.2.2实验设备
硬件:Embest S3CEV40实验平台, Embest ARM标准/增强型仿真器套件, PC机。 软件:Embest IDE 2003集成开发环境, Windows 98/2000/NT/XP。
7.2.3实验内容
编写程序创建三个任务,分别完成八 段数码管的循环显示,LED指示灯的 闪烁和从串行口发送数据功能。
cosii移植条件715实验操作步骤1基本的配置和定义2移植oscpuaasm汇编代码文件3移植oscpucc标准c代码文件72cosii应用实验721实验目的722实验设备723实验内容724实验原理725实验操作步骤721实验目的通过实验掌握cosii的启动流程
第七章 嵌入式操作系统μCOS-II实验
7.1.4实验原理
μC/OS-II文件体系
实验原理
μC/OS-II移植条件
1. 2. 3. 4. 5. 处理器的C编译器能产生可重入代码 用C语言就可以打开和关闭中断。 处理器支持中断并且能产生定时中断。 处理器支持容纳一定量数据的硬件堆栈。 处理器有将堆栈指针和其他CPU寄存器读出 和存储到堆栈或内存中的指令。
7.1 μC/OS-II 移植实验 7.2 μC/OS-II 应用实验
7.1 μC/OS-II 移植实验 7.1.1实验目的 7.1.2实验设备 7.1.3实验内容 7.1.4实验原理 7.1.5实验操作步骤
7.1.1实验目的
了解μC/OS-II移植条件和内核基本结构。 掌握将μC/OS-II内核移植到ARM7处理器 上的方法和步骤。
7.1.5实验操作步骤
1、基本的配置和定义 2、移植 OS_CPU_A.ASM汇编代码文件 3、移植 OS_CPU_C.C标准C代码文件

嵌入式实时操作系统UCOSⅡ的移植

嵌入式实时操作系统UCOSⅡ的移植

3应用软件的编写
在操作系统移植成功后,主要的工作便是应用 软件的编写。应用软件可以使用C语言,也可使用 C语言与汇编语言混合编程,在对时间要求比较高 的地方使用汇编语言。在使用C和汇编语言混合编 程的应用软件中,采用C语言和汇编语言分别编译 的方法。由于uc/0s—II的进程调度是基于优先级 的,所以根据控制系统的要求将应用软件分成多个 任务,并分配不同的优先级。这样,应用软件便在 操作系统的调度下运行。多任务运行使CPU的利用 率得到最大的发挥,并使应用程序模块化,以及使 应用程序更容易设计和维护。下面仅给出RS一485发 送中断程序流程图图l。
作系统固有的函数内容,只需直接调用即可。 2.3.3中断任务级切换函数OSIntCtxSw()
UC/OS—II中,中断的产生可能会引起任务的切 换,在中断服务程序的最后会调用0SIntExit()检查
任务就绪状态。如果需要进行任务切换,将调用 OSIntCtxSw0。 2.3.4多任务启动函数中调用的OSStartHighRdy()
/*任务创建扩展外挂函数
4/
void OSTaskSwHook(void)f}
/+任务切换扩展外挂函数
4/
void OSTaskDelHook(OS—TCB+ptcb){)
/4任务删除扩展外挂函数
+/
void OSTaskStatHook(void){}
/+统计任务扩展外挂函数
+/
void OSTimeTickHook(void){) /+时钟节拍创建扩展外挂函数+/
(1)硬件进入中断处理:全局中断使能位置1, 返回地址压栈(系统自动完成);
32四万方圆数据2005年2期
(2)寄存器值压入当前任务堆栈,如:C a ll I¥¥SAVE:

基于ARM9的μCOSⅡ嵌入式系统移植设计

基于ARM9的μCOSⅡ嵌入式系统移植设计

基于ARM9的μCOSⅡ嵌入式系统移植设计ARM9是一种广泛应用于嵌入式系统的处理器架构。

μCOSⅡ是一款适用于小型嵌入式系统的实时操作系统。

本文将讨论基于ARM9的μCOSⅡ嵌入式系统的移植设计。

首先,移植设计需要考虑硬件平台和目标嵌入式系统的特性。

ARM9处理器架构具有高性能、低功耗和低成本等特点,适用于各种应用领域,例如智能手机、数字相机和家电产品。

μCOSⅡ是一款轻量级的实时操作系统,具有快速启动、低内存占用和可配置性高等特点。

因此,基于ARM9的μCOSⅡ移植设计可以在各种嵌入式应用中发挥其优势。

其次,移植设计需要进行硬件平台的选择和准备工作。

ARM9处理器具有多种型号和厂商,例如Atmel、Freescale和Texas Instruments等。

选择适合的ARM9处理器和开发板是移植设计的第一步。

同时,需要根据目标嵌入式系统的需求,选择合适的外设和接口,例如LCD显示屏、键盘、串口和以太网接口等。

这些外设和接口的选择与硬件平台选型紧密相关。

第四,移植设计需要根据硬件平台的特性进行相关配置和适配工作。

μCOSⅡ是可配置的,可以根据嵌入式系统的实际需求进行相应的配置。

配置内容包括任务管理、内存管理、中断管理和设备驱动等。

根据硬件平台的特性,需要适配μCOSⅡ的相关配置,以确保系统的正常运行和稳定性。

例如,设置任务的优先级、栈大小和时间片长度等。

最后,移植设计需要进行系统的测试和优化工作。

对于嵌入式系统而言,可靠性和性能是关键指标。

通过编写测试程序和使用调试工具,可以对嵌入式系统进行功能测试和性能评估。

在测试过程中,需要注重系统的稳定性和响应速度。

如果发现问题或者性能瓶颈,需要进行相应的优化工作,例如调整任务的调度策略、优化驱动程序和减少内存占用等。

总结起来,基于ARM9的μCOSⅡ嵌入式系统移植设计需要进行硬件平台的选择和准备、软件包的安装和配置、相关适配工作以及系统的测试和优化。

通过合理的移植设计,可以将μCOSⅡ操作系统成功移植到ARM9处理器上,并实现嵌入式系统的功能需求。

《ARM嵌入式接口技术应用》第八章 μCOS-Ⅱ嵌入式操作系统的移植

《ARM嵌入式接口技术应用》第八章 μCOS-Ⅱ嵌入式操作系统的移植



2.OSStartHighRdy() OSStartHighRdy()是由OSStart()调用,它实现任务建 OSStartHighRdy()是由OSStart()调用,它实现任务建
立以后(但还没有任务调度),使最高优先级的任务 取得内核的使用权.
定的时间内执行其功能并对外部的异步事件做出响应的计算机 系统.
实时操作系统主要满足以下两个领域的需要: 实时操作系统主要满足以下两个领域的需要:
1,实时控制: 能实时采集现场数据,对所采集的数据进行处理,进而自动 的控制 相应的执行机构. 2,实时信息处理: ,实时信息处理: 对信息进行实时处理的系统称为实时信息处理系统.


5.OSTickISR()
OSTickISR()函数是时钟中断处理函数,主要任务是负责处理 OSTickISR()函数是时钟中断处理函数,主要任务是负责处理
时钟中断.
在实时操作系统中,时钟节拍一般为10~100HZ.假定,时 在实时操作系统中,时钟节拍一般为10~100HZ.假定,时
OSStart ()调用OSStartHighRdy()的程序清单 void OSStart (void) { 找出在就绪表种进入就绪态的最高优先级任务; 将运行指针指向最高优先级任务; 调用OSStartHighRdy()运行最高优先级任务; }


1.定义可移植性强的数据类型
typedef typedef typedef typedef typedef typedef typedef typedef (32位长度) 32位长度) typedef (64位长度) 64位长度) typedef unsigned char unsigned char signed char unsigned short signed short unsigned int signed int float double INT32U FP64; OS_STK; BOOLEAN; INT8U; INT8S; INT16U; INT16S; INT32U; INT32S; FP32; //布尔类型 //布尔类型 //无符号8位整型 //无符号8 //有符号8位整型 //有符号8 //无符号16位整型 //无符号16位整型 //有符号16位整型 //有符号16位整型 //无符号32位整型 //无符号32位整型 //有符号32位整型 //有符号32位整型 //单精度浮点类型 //单精度浮点类型 //双精度浮点类型 //双精度浮点类型 //堆栈是32位宽度 //堆栈是32位宽度
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

可重入代码举例
程序1:可重入型函数 void swap(int *x, int *y) { int temp; temp=*x; *x=*y; *y=temp; }
非可重入代码举例
程序2:非可重入型函数 int temp; void swap(int *x, int *y) { temp=*x; *x=*y; *y=temp; }
OSStartHighRdy()
函数
*OS_CPU_A.ASM
进入多任务环境时运行优先 级最高的任务,
OSIntCtxSw()
函数
*OS_CPU_A.ASM 中断退出时的任务切换函数
OSTic实kIS际R(上) ,还有一个文件中很断重服务要程,序它就*O是S_ICRPQU_.AIN.ACSM,它时定钟节义拍了中一断个服务汇程编序宏,
移植规划(续)
支持的指令集
带T变量的ARM7处理器核具有两个指令集: 标准32位ARM指令集 16位Thumb指令集
两种指令集有不同的应用范围。 为了最大限度地支持芯片的特性,任务应当可以使 用任意一个指令集并可以自由切换,而且不同的任务 应当可以使用不同的指令集
移植μC/OS-II
概述
要移植一个操作系统到一个特定的CPU体系结 构并不是一件很容易的事情,它对移植者有以下 要求:
2.要移对参植O考S一A原RM个公理司操要的作《有A系R较M体统深系到结入构一的》个文了档特解定;的CPU体系结构 上并不是一件很容易的事情,它对移植者有以下要求:
31.参对考《所目嵌使标入式用 体实的系时操编结作译构系统器要μ要有C/O有很S-I较深I 》深了一入解书 的;了解; 2. 对OS原理要有较深入的了解; 43.. 对对需所参要使考移 用ADS植的软件的编自操译带的作器编系要译器统有和要较连接有深器相入手册当的的了了解解;; 4. 对需要移植的操作系统要有相当的了解; 55.. 对对具具参考体体《使 使嵌入用用式的的实时芯芯操片片作系也也统要要μC一一/OS定定-II的的》了了一书解解。。
OS_STK_GROWTH
常量
OS_CPU.H
定义堆栈的增长方向
OS_TASK_SW
函数
OS_CPU.H
任务切换时执行的代码
OSTaskStkInit()
函数
OS_CPU_C.C 任务堆栈初始化函数
OSInitHookBegin()、 OSInitHookEnd()、

函数
OS_CPU_C.C
μC/OS-II在执行某些操作时 调用的用户函数,一般为空
不可重入函数被中断破坏
如何使函数具有可重入性
使Swap()函数具有可重入性的条件:
把Temp定义为局部变量 调用Swap()函数之前关中断,调用
后再开中断 用信号量禁止该函数在使用过程中
被再次调用
概述 ——移植需要编写的文件
根据μC/OS-II的要求,移植μC/OS-II到一个新的体 系结构上需要提供2个或3个文件:
因为第4点的影响是全局性的,它决定移植代码的框架和功能。 参考具所体以芯片重的点数介据绍手第册4和点使。用手册
主要内容
移植规划 μC/OS-II的移植 嵌入式系统的初始化
C/OS-II的文件结构
μC/OS-II移植 ——μC/OS-II硬件软件体系结构
应用程序 (用户代码)
μC/OS-II (与处理器无关代码)
OS_CORE.c OS_FLAG.c
...
μC/OS-II配置 (与应用相关)
OS_CFG.H INCLUDES.H
μC/OS-II移植 (与处理器相关代码)
软件
硬件
CPU定时器移植时需要 Nhomakorabea写的代码
用于产生 系统时钟
移植C/OS-II满足的条件
处理器的C编译器能产生可重入代码 在程序中可以打开或者关闭中断 处理器支持中断,并且能产生定时中断(通常在10—
100Hz之间) 处理器支持能够容纳一定量数据的硬件堆栈(通常是几
千字节) 处理器有将堆栈指针和其他CPU寄存器的内容存储和读
出到堆栈(或者内存)的指令
什么是可重入代码
可重入的代码指的是一段可以被多个任 务同时调用,而不必担心会破坏数据的 代码(比如:一个函数)
即:可重入型函数在任何时候都可以被 中断执行,过一段时间以后又可以继续 运行,而不会因为在函数中断的时候被 其他的任务重新调用,而影响函数中的 数据
1. 对目标体系结构要有很深了解; 2. 对OS原理要有较深入的了解; 3. 对所使用的编译器要有较深入的了解; 4. 对需要移植的操作系统要有相当的了解; 5. 对具体使用的芯片也要一定的了解
概述
要移植一个操作系统到一个特定的CPU体系结构 上并不是一件很容易的事情,它对移植者有以下要求:
1. 对目标体系结构要有很深了解;
它是μC/OS-II for ARM7通用的中断服务程序的汇编与C函数接口代码。时钟
OS_CPU.H(C语言头文件) OS_CPU_C.C(C程序源文件) OS_CPU_A.ASM(汇编程序源文件)
其中OS_CPU_A.ASM在某些情况下不需要,但极 其罕见。不需要OS_CPU_A.ASM的必须满足以下苛 刻条件:
1.可以直接使用C语言开关中断; 2.可以直接使用C语言编写中断服务程序; 3.可以直接使用C语言操作堆栈指针; 4.可以直接使用C语言保存CPU的所有寄存器。
概述 ——移植代码包括的主要内容
移植内容
类型
所属文件
描述
BOOLEAN、INT8U、INT8S、 …
数据类型
OS_CPU.H
与编译器无关的数据类型
OS_STK
数据类型
OS_CPU.H
堆栈的数据类型
OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()

OS_CPU.H
开关中断的代码
移植规划(续)
任务模式的取舍
ARM7处理器核具有上述七种模式,其中除用户 模式外其它均为特权模式。其中管理、中止、未定义、 中断和快中断模式与相应异常相联系,任务使用这些 模式不太适合。
系统模式除了是特权模式外,其它与用户模式一样, 因而可选为任务使用的模式只有用户模式和系统模式。
为了尽量减少任务代码错误对整个程序的影响,缺 省的任务模式定为用户模式,可选为系统模式,同时 提供接口使任务可以在这两种模式间切换。
相关文档
最新文档