uC/OS—Ⅱ在80x86上的移植

合集下载

μCOSⅡ在X86保护模式下的移植与开发

μCOSⅡ在X86保护模式下的移植与开发

ex[O T B i R y a, S C Hg d] _ h ap仁a] s,cx
; 指向要运行的最高优先级的任务的T B C
; 将其指针赋给 E P S ; 从堆栈中弹出所有的寄存器
; 回 返
p pd oa
ied rt
() t t i d E P Hg R y D Sa Sr h N
的内核 kre ig e lm 拷贝到软盘根目录。 n .
O S t t i R y O N A Sa Hg d P C R r h R E
I [OS unn] c _ Rnig n a c l l
n】 V O
O S ak w ok T sS H o
; 调用 ( Tak wH o o ) sS ok ; S
; S un g I O R ni 加 n
; 下面是获取处理的堆栈指针
刀 E t pi nr o t y n
/ AX /E / C /E X 刀 E X D / B /E X
/ S 目前 未用 ) /E P(
刀 EP B / S /E I
/ /EDI
" - k 0 t = ; - s
rtr sk eu n ; t
4 扩展I / S I内核, ,O 一 C 使其成为一个R O TS
建立自举系统并对内核进行测试
并利用 3 位的优点, 2 将其 D SWi o s O / n w 支撑下运行, d 没有自主性。为了实现一个可以独立运行的操作系统,
改为可从软盘 自举 的 3 位保护模式下的操作系统.其步骤是: 2
k re. . en lm g
将其转换为引导程序映像文件 Bo ig和内核映像文件 ot m ① 对编好的引导程序和内核分别进行编译 , 使其成为可引导盘, 再将编译好 ②在D S 环境下使用dbg O eu 命令将 Bo ig otm 装载到 A盘的引导扇区, ,

uC-OS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧

uC-OS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧

uC/OS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧引言---实时操作系统的使用,能够简化嵌入式系统的应用开发,有效地确保稳定性和可靠性,便于维护和二次开发。

μC/OS-II是一个基于抢占式的实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性,除此以外,μC/OS-II的鲜明特点就是源码公开,便于移植和维护。

在μC/OS-II官方的主页上可以查找到一个比较全面的移植范例列表。

但是,在实际的开发项目中,仍然没有针对项目所采用芯片或开发工具的合适版本。

那么,不妨自己根据需要进行移植。

本文则以在TMS320C6711DSP上的移植过程为例,分析了μC/OS-II在嵌入式开发平台上进行移植的一般方法和技巧。

μC/OS-II移植的基本步骤在选定了系统平台和开发工具之后,进行μC/OS-II的移植工作,一般需要遵循以下的几个步骤:●深入了解所采用的系统核心●分析所采用的C语言开发工具的特点●编写移植代码●进行移植的测试●针对项目的开发平台,封装服务函数(类似80x86版本的PC.C和PC.H)系统核心无论项目所采用的系统核心是MCU、DSP、MPU,进行μC/OS-II的移植时,所需要关注的细节都是相近的。

首先,是芯片的中断处理机制,如何开启、屏蔽中断,可否保存前一次中断状态等。

还有,芯片是否有软中断或是陷阱指令,又是如何触发的。

此外,还需关注系统对于存储器的使用机制,诸如内存的地址空间,堆栈的增长方向,有无批量压栈的指令等。

在本例中,使用的是TMS320C6711DSP。

这是TI公司6000系列中的一款浮点型号,由于其时钟频率非常高,且采用了超常指令字(VLIW)结构、类RISC指令集、多级流水等技术,所以运算性能相当强大,在通信设备、图像处理、医疗仪器等方面都有着广泛的应用。

在C6711中,中断有3种类型,即复位、不可屏蔽中断(NMI)和可屏蔽中断(INT4-INT15)。

可屏蔽中断由CSR寄存器控制全局使能,此外也可用IER寄存器分别置位使能。

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();}第五步:对移植好的代码进行调试。

#uCOS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧

#uCOS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧

引言---实时操作系统地使用,能够简化嵌入式系统地应用开发,有效地确保稳定性和可靠性,便于维护和二次开发.μC/OS-II是一个基于抢占式地实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性,除此以外,μC/OS-II地鲜明特点就是源码公开,便于移植和维护.在μC/OS-II官方地主页上可以查找到一个比较全面地移植范例列表.但是,在实际地开发项目中,仍然没有针对项目所采用芯片或开发工具地合适版本.那么,不妨自己根据需要进行移植.本文则以在TMS320C6711 DSP上地移植过程为例,分析了μC/OS-II在嵌入式开发平台上进行移植地一般方法和技巧.μC/OS-II移植地基本步骤在选定了系统平台和开发工具之后,进行μC/OS-II地移植工作,一般需要遵循以下地几个步骤:● 深入了解所采用地系统核心● 分析所采用地C语言开发工具地特点● 编写移植代码● 进行移植地测试● 针对项目地开发平台,封装服务函数<类似80x86版本地PC.C和PC.H)系统核心无论项目所采用地系统核心是MCU、DSP、MPU,进行μC/OS-II地移植时,所需要关注地细节都是相近地.首先,是芯片地中断处理机制,如何开启、屏蔽中断,可否保存前一次中断状态等.还有,芯片是否有软中断或是陷阱指令,又是如何触发地.此外,还需关注系统对于存储器地使用机制,诸如内存地地址空间,堆栈地增长方向,有无批量压栈地指令等.在本例中,使用地是TMS320C6711 DSP.这是TI公司6000系列中地一款浮点型号,因为其时钟频率非常高,且采用了超常指令字<VLIW)结构、类RISC指令集、多级流水等技术,所以运算性能相当强大,在通信设备、图像处理、医疗仪器等方面都有着广泛地应用.在C6711中,中断有3种类型,即复位、不可屏蔽中断<NMI)和可屏蔽中断<INT4-INT15).可屏蔽中断由CSR寄存器控制全局使能, 此外也可用IER寄存器分别置位使能.而在C6711中并没有软中断机制,所以μC/OS-II地任务切换需要编写一个专门地函数实现.此外,C6711也没有专门地中断返回指令、批量压栈指令,所以相应地任务切换代码均需编程完成.因为采用了类RISC核心,C6711地内核结构中,只有A0-A15和B0-B15这两组32bit地通用寄存器.C语言开发工具无论所使用地系统核心是什么,C语言开发工具对于μC/OS-II是必不可少地. 最简单地信息可以从开发工具地手册中查找,比如:C语言各种数据类型分别编译为多少字节;是否支持嵌入式汇编,格式要求怎样;是否支持“interrupt”非标准关键字声明地中断函数;是否支持汇编代码列表(list>功能,等等.上述地这样一些特性,会给嵌入式地开发带来很多便利.TI地C语言开发工具CCS for C6000就包含上述地所有功能.而在此基础上,可以进一步地弄清开发工具地一些技术细节,以便进行之后真正地移植工作.首先,开启C编译器地“汇编代码列表(list>”功能,这样编译器就会为每个C 语言源文件生成其对应地汇编代码文件.在CCS开发环境中地方法是:在菜单“/Project/Build options”地“Feedback”栏中选择“Interlisting:Opt/C and ASM(-s>”;或者,也可以直接在CCS地C编译命令行中加上“-s”参数.然后分别编写几个简单地函数进行编译,比较C源代码和编译生成地汇编代码.例如:void FUNC_TEMP (void>{Func_tmp2(>。

uCOS-II移植实验

uCOS-II移植实验

17

基础知识
OS_CPU.S的移植 -OSStartHighRd
OSStartHighRd()函数是在OSStart()多任务启动之后,从最高优先 级任务的TCB控制块中获得该任务的堆栈指针sp,通过sp依次将cpu现 场恢复,这时系统就将控制权交给用户创建的该任务进程,直到该任 务被阻塞或者被其他更高优先级的任务抢占cpu.该函数仅仅在多任务 启动时被执行一次,用来启动第一个,也就是最高优先级的任务执行.
void OSIntCtxSw(void) { need_to_swap_context = 1; }
12

基础知识
OS_CPU.S的移植 -时钟节拍中断服务函数
时钟节拍是特定的周期性中断.这个中断可以看作是系统 心脏的脉动. 时钟的节拍式中断使得内核可以将任务延时若干个整数时 钟节拍,及当任务等待事件发生时,提供等待超时的依据. 时钟节拍率越快,系统的额外开销就越大.中断之间的时 间间隔取决于不同的应用,本系统使用S3C44B0的timer 0 作为时钟节拍源,产生间隔10mS的时钟节拍. OSTickISR()就是时钟节拍中断服务函数,也就是S3C44B0 的timer 0的中断处理函数.
jx44b0实验系统教案ucosii移植实验jx44b0实验系统教案ucosii移植实验武汉创维特信息技术有限公司201969提纲11113333222244445555基础知识实验目的实验内容预备知识实验设备6666实验过程7777实验报告要求实验目的实验目的了解ucosii内核的基本原理和主要结构掌握将ucosii内核移植到arm处理器上的基本方法掌握ucosii下基本多任务应用程序的编写实验内容实验内容学习ucosii再arm处理器上的移植过程编写简单的多任务应用程序同时实现跑马灯和数码管显示的功能预备知识预备知识了解嵌入式操作系统的构架以及具体的ucosii的组成了解操作系统的移植方法实验设备实验设备jx44b0教学实验箱adt1000仿真器和adtide集成开发环境串口连接线基础知识ucosii概述ucosii在特定处理器上的移植工作绝大部分集中在多任务切换的实现上因为这部分代码主要是用来保存和恢复处理器现场许多操作如读写寄存器操作不能用c语言只能使用特定的处理器的汇编语言来完成

uCOS-II多核移植

uCOS-II多核移植

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的破坏。

VC环境下UCOS-II移植

VC环境下UCOS-II移植

1VC下时钟的获得《嵌入式实时操作系统uC/OS-II》这本书已经安排了大量篇幅来专门讲解uC/OS-II的移植:第13章移植uC/OS-II,第14章uC/OS-II在80x86上的移植,第15章uC/OS-II在带有硬件浮点运算单元的80x86上的移植。

所以本文只是重点讲解移植到VC下和其他处理器上的不同地方,更详细的介绍读者可以参考《嵌入式实时操作系统uC/OS-II》这本书。

和所有其他的移植一样,本文所做的移植也只需要修改uC/OS-II处理器相关代码,一共包括3个文件:OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C。

考虑到VC可以嵌入汇编代码,并不需要专门的汇编代码文件,所以OS_CPU_A.ASM是多余的,最终只有OS_CPU.H和OS_CPU_C.C两个文件。

所以这两个文件成了移植的关键,首先要解决的问题就是时钟“滴答”的获得。

移植到BC下的uC/OS-II是通过修改DOS下的硬件时钟中断来得到时钟滴答的,VC下时钟滴答从哪里来呢?这是移植uC/OS-II到VC下第一个要考虑的问题。

在windows的保护模式下不能像DOS下面那么容易,直接通过一个函数调用就能够修改中断。

windows下要修改中断涉及到驱动程序,这样就加大了移植的困难度与复杂度,但好处是只有真正硬件时钟的“滴答”才能够保证uC/OS-II的实时性。

另外一种解决方法是采用windows下的软件定时器,通过定时器来产生模拟时钟“滴答”。

考虑到本移植只是为了教学和学习,并没有应用到对实时性要求高的产品,所以最终决定采用软件定时器来模拟时钟中断。

Windows下软件定时器种类很多,下面分别简要介绍一下这些定时器:1.SetTimer()函数有windows下编程经验的最先想到的应该是SetTimer这个API函数,但本文采用的移植程序是基于控制台的,也就是说最开始建立VC工程的时候选择的是创建win32 console application,控制台下的程序是没有消息循环的,所以要使用SetTimer函数则必须再创建一个线程来专门处理消息循环,这样一来事情就复杂了,而且这个函数定时精度非常不高。

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

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

退出/进入临界区函数 ARMDisableInt/ARMEnableInt

1、直接操作CPSR的I、F位
2、 ARMDisableInt将CPSR的I、F位设置为1, 关闭所有中断


3、 ARMEnableInt将CPSR的I、F位设置为0, 打开中断
任务级上下文切换函数 OS_TASK_SW
ARM处理器相关宏定义

1、退出临界区

#defineOS_ENTER_CRITICAL() ARMDisableInt()

2、进入临界区

#defineOS_EXIT_CRITICAL() ARMEnableInt()
堆栈增长方向


1、堆栈由高地址向低地址增长,这个也 是和编译器有关的,当进行函数调用时, 入口参数和返回地址一般都会保存在当 前任务的堆栈中,编译器的编译选项和 由此生成的堆栈指令就会决定堆栈的增 长方向。 #define OS_STK_GROWTH 1


1、该函数当任务因为被阻塞而主动请求cpu 调度时被执行,由于此时的任务切换都是在 非异常模式下进行的,因此区别于中断级别 的任务切换。 2、它先将当前任务的cpu现场保存到该任务 堆栈中,然后获得最高优先级任务的堆栈指 针,从该堆栈中恢复此任务的cpu现场,使之 继续执行。这样就完成了一次任务切换。
多任务应用程序、调用函数ARMTargetInit初始化ARM处理器; 2、调用OSInit进行操作系统初始化; 3、调用OSTaskCreate函数两个任务:TaskLED 和TaskSEG; 4、调用ARMTargetStart函数启动时钟节拍中断; 5、调用OSStart启动系统任务调度。
OS_CPU_A.S的移植

μC-OS-Ⅱ移植

μC-OS-Ⅱ移植

移植 µC/OS-Ⅱ Ⅱ这一章介绍如何将 µC/OS-Ⅱ移植到不同的处理器上。

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

为了方便移植,大部分的 µC/OS-Ⅱ代码是用 C 语言 写的;但仍需要用 C 和汇编语言写一些与处理器相关的代码,这是因为 µC/OS-Ⅱ在读写处 理器寄存器时只能通过汇编语言来实现。

由于 µC/OS-Ⅱ在设计时就已经充分考虑了可移植 性,所以 µC/OS-Ⅱ的移植相对来说是比较容易的。

如果已经有人在您使用的处理器上成功 地移植了 µC/OS-Ⅱ,您也得到了相关代码,就不必看本章了。

当然,本章介绍的内容将有 助于用户了解 µC/OS-Ⅱ中与处理器相关的代码。

要使 µC/OS-Ⅱ正常运行,处理器必须满足以下要求: 1. 处理器的 C 编译器能产生可重入代码。

2. 用 C 语言就可以打开和关闭中断。

3. 处理器支持中断,并且能产生定时中断(通常在 10 至 100Hz 之间)。

4. 处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈。

5. 处理器有将堆栈指针和其它 CPU 寄存器读出和存储到堆栈或内存中的指令。

像 Motorola 6805 系列的处理器不能满足上面的第 4 条和第 5 条要求,所以 µC/OS-Ⅱ 不能在这类处理器上运行。

图 8.1 说明了 µC/OS-Ⅱ的结构以及它与硬件的关系。

由于 µC/OS-Ⅱ为自由软件,当用 户用到 µC/OS-Ⅱ时,有责任公开应用软件和 µC/OS-Ⅱ的配置代码。

这本书和磁盘包含了所 有与处理器无关的代码和 Intel 80x86 实模式下的与处理器相关的代码(C 编译器大模式下 编译) 。

如果用户打算在其它处理器上使用 µC/OS-Ⅱ,最好能找到一个现成的移植实例,如 果没有只好自己编写了。

μC/OS-II操作系统在各种处理器上的移植

μC/OS-II操作系统在各种处理器上的移植

μC/OS-II操作系统在各种处理器上的移植信息来源: 维库开发网发布时间:2009年12月29日μC/OS-II操作系统是一种抢占式多任务、单内存空间、微小内核的嵌入式操作系统,具有高效紧凑的特点。

它执行效率高,占用空间小,可移植性强,实时性能良好且可扩展性强。

采用μC/OS-II实时操作系统,可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应;采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。

μC/OS-11非常适合应用在一些小型的嵌入式产品应用场合,在家用电器、机器人、工业控制、航空航天、军事科技等领域有着广泛的应用。

单片机、ARM、FPGA与μC/OS-II操作系统相结合,实现一些具体功能,是目前嵌入式应用中比较常见的。

在这些应用中,基础性的工作就是操作系统的移植。

本文选取使用较多的51单片机、LPC2210、NiosII三种处理器进行介绍。

1 μC/OS-II操作系统移植条件μC/OS-II操作系统的大部分源代码都是用C语言书写的,但仍需使用汇编语言来完成一些和处理器相关的操作,例如读写处理器、寄存器时只能使用汇编语言来实现。

因此,将μC/OS-II操作系统移植到目标处理器上,需要从硬件和软件两方面来考虑。

硬件方面,目标处理器需满足以下条件:①处理器的C编译器能产生可重入代码;②用C语言可以开/关中断;③处理器支持中断,并且能够产生定时中断(通常在10~1 000 Hz之间);④处理器能够支持容纳一定量数据的硬件堆栈;⑤处理器有将堆栈指针和其他寄存器读出和存储到堆栈或内存中的指令。

软件方面,主要关注的是一些与处理器相关的代码移植,其分布在OS_CPU.H、OS_CPU_C.C和OS_CPU_A.ASM这3个不同的文件中。

2 目标处理器硬件支持51单片机、LPC2210、NiosII三种处理器在硬件方面均能满足μC/OS-II操作系统的移植要求。

51单片机:选择Keil公司的集成开发环境作为开发工具,因为该集成开发环境的C51编译器能产生可重入型代码,且用C语言就可以开/关中断。

uCOS_II安装调试指南

uCOS_II安装调试指南

μC/OSII安装调试指南前言μC/OS是一种体积小巧而实用的实时操作系统,由于其代码的开放性,近年来普遍受到人们的关注,许多人开始从事这一操作系统的学习及应用工作,但由于其文档较少,特别是关于安装和使用方面的指导性文章不够充足,使很多初学者,特别是刚刚接触嵌入式操作系统的朋友们不知道如何进行系统的安装及调试,为此我结合自己使用的切身体会,谈一谈它的安装及调试问题,希望对大家能起到一定的帮助作用。

使用的工具文中的开发工具及开发包如下:* 开发包:μC/OS2.51* 文中开发工具:Borland C 3.1所有相关工具在此处下载/folder/fetcxypq#其中开发工具是经过剪裁过的,只适用于此项目开发。

1.开发包的安装步骤* 1.1 下载软件包μCOS_V2.52.rar* 1.2 解压缩,建议解压到C盘根目录,这样文件将安装在C:\SOFTWARE,需要空间2.12MB * 1.3 安装完毕* 1.4 以默认安装路径为例,目录结构为:C: \SOFTWARE这是根目录,是所有软件相关的文件都放在这个目录下。

+ C:\SOFTWARE\BLOCKS子程序模块目录。

笔者将例子中μC/OS-II用到的与PC相关的函数模块编译以后放在这个目录下。

+ C:\SOFTWARE\HPLISTC这个目录中存放的是与范例HPLIST相关的文件(请看附录D,HPLISTC和TO)。

HPLIST.C 存放在C:\SOFTWARE\HPLISTC \SOΜRCE目录下。

DOS下的可执行文件(HPLIST.EXE)存放在C:\SOFTWARE\TO\EXE中。

+ C:\SOFTWARE\TO这个目录中存放的是和范例TO相关的文件(请看附录D,HPLISTC和TO)。

源文件TO.C 存放在C:\SOFTWARE\TO\SOΜRCE中,DOS下的可执行文件(TO.EXE)存放在 C:\SOFTWARE\TO\EXE中。

uCOS-II的移植及使用

uCOS-II的移植及使用

uC/OS-II 概述-性能特点
• 源代码公开 • 可移植(Portable) – 大部分代码用ANSI C写,与处理器无关,移植时不 需修改 – 少量与微处理器硬件相关的部分用C与汇编编写, 移植时需修改:
• OS_CPU.H //与硬件相关,移植时需修改 • OS_CPU_A.ASM //集中了所有与处理器相关的汇编语言 代码 • OS_CPU.C //集中了所有与处理器相关的汇编语言代码
uC/OS-II 概述--文件结构
应用软件 (用户代码) μC/OS-II (与处理器类型无关的代码) μC/OS-II配置文件 (与应用程序有关) OS_CFG.H INCLUDES.H
体系 结构
OS_CORE.C OS_FLAG.C OS_MBOX.C OS_MEM.C OS_MUTEX.C
OS_Q.C OS_SEM.C OS_TASK.C OS_TIME.C uC/OS-II.C uC/OS-II.H
任务控制块就相当于是一个任务的身份证,没 有任务控制块的任务是不能被系统承认和管理 的。
任务控制块的结构
typedef struct os_tcb { OS_STK *OSTCBStkPtr;
//指向当前任务堆栈栈顶的指针。每个任务的堆栈容量可以是任意的。
#if OS_TASK_CREATE_EXT_EN
为了有效的对中断进行控制,在任务的代码里可使用UC/OS-II定义的宏 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来控制何时响应中断, 何时屏蔽中断。在运行这两个宏之间的代码时是不会响应中断的,这种受保 护的代码段叫临界段。
2.1.2 uC/OS-II的任务—任务控制块(TCB)
uC/OS-II 概述-性能特点

第14章 ucos-II在80x86上的移植

第14章 ucos-II在80x86上的移植

µC/OS-II在80x86上的移植本章将介绍如何将µC/OS-II移植到Intel 80x86系列CPU上,本章所介绍的移植和代码都是针对80x86的实模式的,且编译器在大模式下编译和连接。

本章的内容同样适用于下述CPU:80186802868038680486PentiumPentium II实际上,将要介绍的移植过程适用于所有与80x86兼容的CPU,如AMD,Cyrix,NEC (V-系列)等等。

以Intel的为例只是一种更典型的情况。

80x86 CPU每年的产量有数百万,大部分用于个人计算机,但用于嵌入式系统的数量也在不断增加。

最快的处理器(Pentium系列)将在2000年达到1G的工作频率。

大部分支持80x86(实模式)的C编译器都提供了不同的内存使用模式,每一种都有不同的内存组织方式,适用于不同规模的应用程序。

在大模式下,应用程序和数据最大寻址空间为1Mb,程序指针为32位。

下一节将介绍为什么32位指针只用到了其中的20位来寻址(1Mb)。

本章所介绍的内容也适用于8086处理器,但由于8086没有PUSHA指令,移植的时候要用几条PUSH指令来代替。

图F14.1显示了工作在实模式下的80x86处理器的编程模式。

所有的寄存器都是16位,在任务切换时需要保存寄存器内容。

图F14.1 80x86 实模式内部寄存器图.80x86提供了一种特殊的机制,使得用16位寄存器可以寻址1Mb 地址空间,这就是存储器分段的方法。

内存的物理地址用段地址寄存器和偏移量寄存器共同表示。

计算方法是:段地址寄存器的内容左移4位(乘以16),再加上偏移量寄存器(其他6个寄存器中的一个,AX ,BP ,SP ,SI ,DI 或IP )的内容,产生可寻址1Mb 的20位物理地址。

图F14.2表明了寄存器是如何组合的。

段寄存器可以指向一个内存块,称为一个段。

一个16位的段寄存器可以表示65,536个不同的段,因此可以寻址1,048,576字节。

uCOS-II嵌入式实时操作系统原理与移植

uCOS-II嵌入式实时操作系统原理与移植
任务调度前上下文切换
1,决定是否进行上下文切换 2,保存当前执行进程的上下文
包括程序计数器PC、通用寄存器、 与任务有关的数组、表格、链等。
uC/OS-II采用可
剥夺实时内核,
含义是最高优先
0
级任务一旦就绪,
总能得到CPU使
1
用权。
系统保留4个
2
最高优先级
3
4
5
执行该任务
6
7
……
uC/OS-II 的中断(ISR)
任务2—TCB--就绪—任务堆栈
任务3--TCB--等待—任务堆栈
任务4--TCB --睡眠—任务堆栈
uC/OS-II的任务之间通信
任务之间共享的信息成为事件,同一时刻只能有一个任务使 用共享信息,因此为每个事件构建一个事件控制块ECB来保 证任务之间安全共享信息。事件控制块总数由OS_CFG.H中的 OS_MAX_EVENTS定义。事件包括信号量、邮箱、消息队列。
内存组配置文件 储存器映射MMU初始化与操作 Nand flash控制器初始化与操作
与CPU相关的配置选项 开机画面BMP文件 开机画面BMP文件 开机画面BMP文件 初始化mini2440目标板 定义任务优先级、堆栈大小及函数原型声明 初始化操作系统定时器0 开机画面BMP文件
关于信号量和等待的API功能函数
//任务循环
{
OSPrintf("\nEnter Main Task\n");
OSTimeDly(OS_TICKS_PER_SEC); //将任务延迟一段时间,进入等待态
}
}
uC/OS-II的任务都运行在无限循环中。
欢迎访问机电技术博客:/spurtltl@126/

ucos ii移植过程详解

ucos ii移植过程详解

uCOS-II移值过程实例讲解我将uCOS-II 移植到了EPONS 的C33209的平台上,接下来我就基于我移植好的代码讲解如何将uCOS-II从一种MCU移植到另一种MCU。

首先介绍uCOS-II的文件,如下表:ucos_ii.hos_cfg.hos_cpu.hos_core.cos_dbg_r.cos_flag.cos_mbox.cos_mem.cos_mutex.cos_q.cos_sem.cos_task.cos_time.cucos_ii.cos_cpu_c.cos_cpu_a.asm其中我们和硬件平台相关的文件的文件名被加粗了,也就是说若要将uCOS-II移植到新的平台上只要关心被以上四个文件就行了。

当然你也可以根据需要再添加你自己的和平台相关的文件,事实上我也是这么做的。

在我移植的例子中就添加了四个和平台相关的文件,文件如下表:crt0.cdrv_rtc.cvector.cext.scrt0.c是用来初始化系统的比如说MCU的一些特殊寄存器、设置外围的总线接口,等。

drv_rtc.c是用来初始化系统中的一个RTC的,这个RTC可以为内核提供必要的基于时间片调度的时基。

同时提供了对RTC开始和停止的操作函数。

在我的例子中RTC会每秒产生32次中断。

vector.c顾名思义,它是系统上电后为系统提供矢量入口表的文件,当然也包括中断向量表。

ext.s是为uc/OS-II 提供OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()函数的具体实现以及在用户程序的中断函数出入时要调用的状态保护和状态恢复函数OS_SA VEALL ()和OS_RESTOREALL ()。

前面两个函数的功能是:OS_ENTER_CRITICAL()屏蔽中断;OS_EXIT_CRITICAL()恢复原来的中断使能状态。

1. os_cpu_a.asm的说明要想顺利的移植首先要了解uCOS-II的一些基本概念。

uCOSⅡ内核在80C51系列单片机上的移植

uCOSⅡ内核在80C51系列单片机上的移植

;以下代码完成第①步操作
万方数据
·——2097·——
PUSHALL:用户定义的宏,将全部CPU寄存器保存到 3.2实验的过程和结果
系统堆栈
实验过程主要镪括以下3个步骤:@创建两个任务Taskl
MOV A,SP;淤下3匍蜜现获褥堆筏戆长度
秘Task2,验涯OSTaskStldnit袭OSStartHighRdyoi蕊数;◇刳建
save_stack: ;以下实现从系统堆棱到用户堆栈豹拷贝 INC DFFR:撵自惩产臻筏
巍输出的不同结聚,验证OSIntCtxSw鞠OSTicklSR函数。 主要测试健弱黧下:
0引言
近年来,嵌入式系统已成为后PC时代一个广阔的研发领 域,其应用范围越来越广。实际应用中,由于移植所花费代价 最小,原有操作系统无法支持新增应用功能时,常会采用系统 移植来解决问题。uC/OS.II作为一个高可靠,开源的嵌入式实 时操作系统,具有广泛的应用;而利用廉价的80C51实现众多 传感器、控制器等电子设备的网络互联,更是具有先天优势。 因此在80C51上移植uC/OS.II具有重要的意义。本文以uC/ OS.II为移植对象,以80C51为移植目标来详细讨论移植的过 程,其中自己设计了一个堆栈结构;最后给出移植测试实验, 分析了移植中要注意的一些问题,总结了移植的一般方法。
1移植前的准备工作
移植前首先要对移植对象,移植目标及其结构,以及移植 的编译环境进行了解。这样才会起到事半功倍的效果。以下 便是从这几个方面进行简单分析。 1.1 移植对象——uc,os.Ⅱ

uC/OS.II具有很强的可移植性,可以广泛应用于各类8 位,16位,32位微控制器或DSP中。它具有完全可剥夺型的 实时内核,其核心工作原理是让最高优先级的就绪任务处于 运行状态;它具有多任务的特点,可以管理64个任务,其中56

移植 UCOS II到X86 PC上

移植 UCOS II到X86 PC上

移植UCOS II到X86 PC上
一、关于软件的安装及环境设置
●安装编译软件BORLAND C++ 4.5,安装路径位于C:\BC45根
目录下,也可以选择其它路径安装。

●安装汇编编译软件TASM5.0,安装路径位于C:\TASM,此软件
用于UCOS II中的汇编文件的编译。

●在“我的电脑--->属性--->高级--->环境变量--->弹出“环
境变量”--->在“用户变量”列表中找到path,在变量值末
尾添加“;C:\TASM\BIN;”,软件的安装及环境的初步设置就
已完成了。

二、移植过程
2.1 建立文件夹
APP(存储应用相关的代码)
CORE(存储uC/OS II内核代码)
MGT(存储与硬件相关的移植代码)
2.2 在BORLAND C++ 4.5中建立工程
建立后添加文件到工程中,删除系统自动建立的.CPP文件删除。

2.3 编译
尝试编译,会提示错误。

因为重新建立了APP、CORE、MGT 目录,编译器会找不到一些文件。

修改代码中的文件引用即可解决。

例如:
修改为:
再编译就没有问题了,移植成功了。

如果还有错误还需要依次排除。

运行成功后的界面如下。

VC环境下UCOS-II移植

VC环境下UCOS-II移植

1VC下时钟的获得《嵌入式实时操作系统uC/OS-II》这本书已经安排了大量篇幅来专门讲解uC/OS-II的移植:第13章移植uC/OS-II,第14章uC/OS-II在80x86上的移植,第15章uC/OS-II在带有硬件浮点运算单元的80x86上的移植。

所以本文只是重点讲解移植到VC下和其他处理器上的不同地方,更详细的介绍读者可以参考《嵌入式实时操作系统uC/OS-II》这本书。

和所有其他的移植一样,本文所做的移植也只需要修改uC/OS-II处理器相关代码,一共包括3个文件:OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C。

考虑到VC可以嵌入汇编代码,并不需要专门的汇编代码文件,所以OS_CPU_A.ASM是多余的,最终只有OS_CPU.H和OS_CPU_C.C两个文件。

所以这两个文件成了移植的关键,首先要解决的问题就是时钟“滴答”的获得。

移植到BC下的uC/OS-II是通过修改DOS下的硬件时钟中断来得到时钟滴答的,VC下时钟滴答从哪里来呢?这是移植uC/OS-II到VC下第一个要考虑的问题。

在windows的保护模式下不能像DOS下面那么容易,直接通过一个函数调用就能够修改中断。

windows下要修改中断涉及到驱动程序,这样就加大了移植的困难度与复杂度,但好处是只有真正硬件时钟的“滴答”才能够保证uC/OS-II的实时性。

另外一种解决方法是采用windows下的软件定时器,通过定时器来产生模拟时钟“滴答”。

考虑到本移植只是为了教学和学习,并没有应用到对实时性要求高的产品,所以最终决定采用软件定时器来模拟时钟中断。

Windows下软件定时器种类很多,下面分别简要介绍一下这些定时器:1.SetTimer()函数有windows下编程经验的最先想到的应该是SetTimer这个API函数,但本文采用的移植程序是基于控制台的,也就是说最开始建立VC工程的时候选择的是创建win32 console application,控制台下的程序是没有消息循环的,所以要使用SetTimer函数则必须再创建一个线程来专门处理消息循环,这样一来事情就复杂了,而且这个函数定时精度非常不高。

嵌入式实时操作系统μC/OS—Ⅱ在Intel 80x86上的移植

嵌入式实时操作系统μC/OS—Ⅱ在Intel 80x86上的移植

嵌入式实时操作系统μC/OS—Ⅱ在Intel 80x86上的移植刘雷;胡军锋;裴亮
【期刊名称】《山东科学》
【年(卷),期】2005(018)005
【摘要】介绍了移植μC/OS-Ⅱ对CPU的要求及移植μC/OS-Ⅱ的一般方法。

实现了μC/OS-Ⅱ在Intel 80x86系列(包括80186,80286,80386,80486,Pentiums以及Celeron,AMD,NEC-V系列等生产的多数80x86处理器)CPU 上的移植。

【总页数】6页(P52-57)
【作者】刘雷;胡军锋;裴亮
【作者单位】山东省科学院海洋仪器仪表研究所,山东青岛266001
【正文语种】中文
【中图分类】TP316.2
【相关文献】
1.嵌入式实时操作系统smartOSEK OS在ARM9上的移植 [J], 刘昕奇;于景洋
2.嵌入式实时操作系统IJLC/OS-H在LPCI788上的移植及应用 [J], 薛睛
3.嵌入式实时操作系统μC/OS一Ⅱ在DSP芯片上的移植与测试 [J], 刘凯;郑吉洲
4.实时操作系统μC/OS-Ⅱ在80X86上的移植 [J], 李庆义
5.嵌入式实时操作系统μC/OS-Ⅱ在MPC5604B上的移植 [J], 罗先银;吴光强
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在调用 O Sat  ̄前 。 户已经至少创建 了 0 1 。 9) 个 任 务 。 S tr ih d0 认 指 针 O T B ih d O Sat g R y 默 H S C H gR y指 向优 先级 最 高 4处 理 器 支 持 能 够 容 纳 一 定 量 数 据 ( 能 是 几 千 字 节 ) 硬 件 堆 . 可 的 就 绪 任 务 的 任 务 控 制 块 ( S T B) 在 这 之 前 O T B gR y已 由 O _C ( S C Hi d h 栈。 S tr 0 。 5 理 器 有 将 堆 栈 指 针 和其 它 C U 寄 存 器 读 出 和 存 储 到 堆 栈 或 O Sat设 置 好 了 ) 函数 原 型 为 : .处 P V i S tr g R yvl1 odO Sa Hi d(od t h 内存 中 的指 令
优 点 , 合 于 小 型 控 制 系 统 。其 内 核提 供 任 务 调 度 与 管 理 、 问 管 理 、 适 时 8 x6处 理 器 的堆 栈 是 由高 地 址 向低 地 址 方 向增 长 的 , 以常 量 o8 所 : 任 务 间 同 步 与通 信 、 内存 管 理 和 中 断 服 务 等 功 能 . 小 可 编 译 至 2 B, 0 T R WT 必 须设 置 为 1 最 K SS K G 0 H # e n OS S df e i TK G O R WT 1 / 堆 栈 由 高 地 址 向低 地 址 增 H 包 含全 部 功能 ( 号 量 、 息 邮 箱 、 息 队 列 以 及 相 关 函 数 )编 译 后 的 信 消 消 , 长 / 。  ̄ /S I CO —I内核 仅 有 6 1KB ~0 。 3.. 14 OS T K s AS 本 文 介绍 了 如何 将 I /S I 植 到 ltl o8 x O —I移 C ne x6系 列 C U上 。 8 P 实 wo 在 I /S I 中 。 x O —I C 就绪 任 务 的 堆 栈 初 始 化 应 该 模 拟 一 次 中断 发 生 际 上 , 移植 过程 同样 适 用 于 A 其 MD,yi,E (一 系 列) C U。 C r N Cv x 等 P 后 的样 子 .堆 栈 中 应 该 按 进栈 次序 设 置 好 各 个 寄存 器 的内 容 。 2 移 植 的 条 件 . A K_W 函 在 移 植 。就 是 使 一 个 实 时 内核 能 在 某 个 微 处 理 器 或 微 控 制 器 上 运 OS T S s 0 数 模 拟 一 次 中断 过 程 , 中断 返 回 的 时 候 进 行 任 务 08 5 中断 服 务程 序 的 入 E l 行 。 移 植 的 时候 内核 是 不变 的 . 发 者 根 据 自 己应 用 系统 的需 要来 选 切 换 。 8 x6提 供 了 2 6个 软 中断 源 可 供 选 用 , 开 S t 0。 S 择 实 时 操 作 系 统 内核 【。 由 于在 设 计 时就 已 经 充 分 考 虑 了 可 移 植 性 , 点 必 须 指 向 汇 编 函数 O Cxw l 】
_ — — —

I /S I 对 来 说 是 比 较 容 易 移 植 的 。 要 使 I /S I 常 运 行 , x O —I相 C x O —I正 C 处
3. 2 0S CPU A. M AS
— — —
I / S I 移 植 需 要 用 户 改 写 O CP AA M 中 的 四个 函 数 : x O —I的 C S U .S 理器必须满足以下要求 : O Sat ih d 0 O Cxw O Itt w 和 O Tc IR S tr gR y . S tS 0, SnCx 0 H S S ikS 0。 1 理 器 的 c编 译 器能 产 生可 重 入 代 码 。 . 处 321O Sa Hi R y .. S tr g d 0 t h 2用 C语 言 就 可 以 打开 和关 闭 中断 。 . 该 函数 由 S t 0函数 调 用 。 能 是 运 行 优 先 级 最 高 的 就绪 任 务 , Sa t r 功 3处 理 器 支 持 中 断 。 且 能 产 生 定 时 中断 ( 常 在 1 . 并 通 0至 10 z之 0H
维普资讯
科技信息
。计算机 与信息技术 O
S ENC NF MA I CI E I OR T ON
20 0 7年
第 6期
ICOS l在 8x 6 J / —I 0 8 上的移植 L
婷 朱 宇 ( 西安科 技大 学计 算机 系 陕 西 西 安 王
70 5 1 0 41
摘 要 : C OS 1 一 款 优 秀 的嵌 入 式 实 时操 作 系统 , 年 来应 用 广 泛 。 本 文 主要 介 绍 了其 在 8 x 6系 列 处理 器 上 的 移 植过 程 。 且 其 移 I / —I 是 x 近 08 并
植 方 法 具 有 一般 性 , 同样 适 用 于许 多其 它处 理 器 。
关键词 : 嵌入 式 实 时操 作 系统 ; C/ —I ; 植 ;0 8 I OS 1 移 x 8x 6
然 后 禁 止 中断 。 相 比之 下 , 一 种 方 法 简 单 、 行 速 度 快 , 此 类 操 作 第 执 在 1概 述 . I /S I 免 费 的嵌 入 式 实 时 操作 系 统 。 仅 性 能 优 良 , 且 源 频 繁 的 时 候 其 优 点 更 为 突 出 。 x O —I是 C 不 并 31 .. 栈 增 长 方 向 3堆 码 公 开 , 有 执行 效 率 高 、 具 占用 空 间 小 、 时 性 能 优 良 、 扩 展 性 强 等 实 可
相关文档
最新文档