




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C/OS-操作系统在各种处理器上的移植 长江大学 杨青胜 徐爱钧摘要 介绍C/OS-II操作系统的应用和移植条件;阐述C/OS-操作系统在普通的51单片机,NXP公司的LPC2210,ALTERA公司的Nios II 三种处理器上的移植。关键字 C/OS-II 移植 51单片机 LPC2210 Nios II PortingC/ OS - to Various processor Yangtze University Yang Qingsheng Xu AijunAbstract : Introduced the C/OS-II operating system application and transplant conditions;Explained the C/OS-II operating system on 51 common microprocessor ,NXPs LPC2210, ALTERAs Nios II three processors transplant.Key Words: C/OS-II port 51 microprocessor LPC2210 Nios IIC/OS-II操作系统是一种抢占式多任务、单内存空间、微小内核的嵌入式操作系统,具有高效、紧凑的特点。它具有执行效率高、占用空间小、可移植性强、实时性能良好和可扩展性强 等特点。采用c/osii实时操作系统可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应,而且采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。非常适合应用在一些小型的嵌入式产品应用场合,在家用电器,机器人,工业控制,航空航天,军事科技等领域有着广泛的应用。单片机ARM, FPGA与C/OS-II操作系统的结合,实现一些具体功能是目前嵌入式应用中比较常见。在这些应用中基础性的工作就是操作系统的移植,故而本文选取使用较多的51单片机,LPC2210, NiosII三种处理器做介绍必定有一定的意义。1 C/OS-II操作系统移植条件C/OS-II操作系统的大部分源代码都是用C语言书写的,但仍需使用C语言和汇编语言来完成一些和处理器相关的操作,例如读写处理器,寄存器时只能使用汇编语言来实现。因此,C/OS-II操作系统的移植在目标处理器上,需要从硬件和软件两方面来考虑。硬件方面,目标处理器需满足以下条件: 处理器的 C编译器能产生可重入代码 ; 用 C 语言可以开,关中断 ; 处理器支持中断 ,并且能够产生定时中断( 通常在l01000 Hz之间) ; 处理器能够支持容纳一定量数据的硬件堆栈 ; 处理器有将堆栈指针和其它寄存器读出和存储到堆栈或内存中的指令 。 软件方面,主要关注的是一些与处理器相关的代码移植,其分布在 OS-CPU. H,OS-CPU-C. C和OS-CPU-A. ASM 这3个不同的文件中。2 目标处理器硬件支持 51单片机,LPC2210, NiosII三种处理器在硬件方面上均能满足C/OS-II操作系统的移植要求。 51单片机:选择 Keil 公司的集成开发环境作为开发工具 ,因为该集成开发环境的 C51 编译器能产生可重入型代码 ,且用 C语言就可以开/关中断。同时具有一定数量的堆栈和操作相关要求的寄存器的指令。LPC2210:采用ARM7微控制器可以满足上述,而ADS1.2的C编译器可以满足,的要求。NiosII处理器: Nios 处理器可以配置成最 多支持 6 4个中断 ,包括外部硬件中断 、内部中断以及 T R AP ( 调试中断) 。Nios II处理器可以配置使用32位内部定时器,通过用软件控制写入几个控制寄存器的内容来获得定时工作,与一般的定时器工作原理相同,可以产生定时中断 。Nios处理器可以外接存储器,以使用的DE2开发板为例,外接512S R AM资源,可以提供足够的数据硬件堆栈。NiosII 8.0 IDE采用GNU编译器,支持CC +的编译、连接产生重入代码 ,允许在 C语言中嵌入汇编语言。3 软件移植过程3.1 OS-CPU. H的实现OS_CPU.H文件包括了用#define语言定义的与处理器相关的常数、宏以及数据类型。数据类型,在上述三种处理器采用的不同编译器中的定义是相同的,在此不做具体介绍。在OS_CPU.H中定义与处理器相关的宏,主要是进入临界区的OS_ENTER_CRITICAL( )和退出临界区的OS_EXIT_CRITICAL( )。 在Keil编译器中:EA是总中断 #define OS_ENTER_CRITICAL( ) EA=0; /关中断 #define OS_EXIT_CRITICAL( ) EA=1; /开中断 在ADS编译器中:定义为软件中断函数,并编写软件中断处理代码实现开关中断_swi(0x00)viod OS_TASK_SW(viod);/任务级任务切换函数_swi(0x00)viod OS_ENTER_CRITICAL(viod ) /关中断 _swi(0x00)viod OS_EXIT_CRITICAL( viod) /开中断 在 NiosII 8.0 IDE编译器中: #define OS_ENTER_CRITICAL( ) asm(“PFX 8n WRCTLg0;”) /关中断 # define OS_EXIT _CRITICAL( ) asm( “PFX 9n WRC T Lg 0 ;”) /开中断 定义堆栈的增长方向 堆栈的增长方向通过设置OS_STK_GROWTH为0或者1来确定51单片机中只能设置为0,表示堆栈是从下往上增长的。 LPC2210中则可以设置成0或者1,都可以。 Nios II 中则只能设置成1,表示堆栈是从上往下增长的。3.2 OS-CPU-C. C的实现OS_CPU_C.C中主要应改写堆栈初始化函数OSTaskStkIint(),必须根据移植时统一定义的任务堆栈结构进行初始化,其他9个钩子函数只需说明即可,也可根据移植时用户自己的需要编写相应的操作代码。以LPC2210为例,堆栈空间从高到低依次存放着 PC, LR, R12, R11, R1, R0, CPSR, OsEnterSum (如下图)。每个任务都有独立的 Os-EnterSum, 在任务切换时保存和恢复各自的 OsEnter-Sum值。各个任务开关中断的状态可以不同,这样实现了开关中断的嵌套。 PC LC R12 R11 R1 R0 CPSROs-EnterSumOS_STK*OSTaskStkInit(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT16U opt)OS_STK*stk;opt=opt;stk=stk;*stk=(OS_STK)task;*-stk=(OS_STK)task;*-stk=0;*-stk=0;*-stk=0;*-stk=0;*-stk=0;*-stk=0;*-stk=0;*-stk=0;*-stk=0;*-stk=0;*-stk=0;*-stk=0;*-stk=(unsigned int)pdata;*-stk=(USER_USING_MODE|0x00);*-stk=0;return(stk);关于51单片机和Nios II处理器的这部分移植,限于篇幅,请参看文后参考文献。3.3 OS-CPU-A. S的实现这部分需要对处理器的寄存器进行操作,所以必须用汇编语言来编写 。C/OS-II移植要求用户编写 4个简单的汇编语言函数 : OSStartHighRdy( ) ,OSCtxSw( ),OSIntCtxSw( ) ,OSTickISR( )。 OSStartHighRdy()的任务是进行任务调度和切换;OSCtxSw()的任务是强制CPU进行寄存器和程序计数器的切换;OSIntCtxSw()的任务是在中断返回时进行任务切换;OSTickISR()是时钟节拍中断服务程序,用来实现时间的延迟和超时功能。以OSStartHighRdy()任务调度和切换函数为例介绍三种处理器移植代码 51单片机:OSStartHighRdy:;-; OSRunning = TURE;-;because EA is not enabled. where in OSStartHighRdy set OSRunning to true is not importantMOVDPH,#HIGH (OSRunning)MOVDPL,#LOW (OSRunning)MOVA,#1MOVXDPTR,A;-; TR0 = 1;-SETBTR0 LPC2210:_OSStartHighRdy MSR CPSR_c, #(NoInt | SYS32Mode) ;告诉uC/OS-II自身已经运行 LDR R4, =OSRunning MOV R5, #1 STRB R5, R4 BL OSTaskSwHook ;调用钩子函数 LDR R6, =OSTCBHighRdy LDR R6, R6 B OSIntCtxSw_1 END Nios II处理器:OSStartHighRdy: ; C function starts with save %sp,xx ; Call OSTaskSwHook() .if (OS_CPU_HOOKS_EN = 1) MOVI32 %g0, OSTaskSwHookh CALL %g0 NOP .endif ; OSRunning = TRUE; inc8 OSRunning ; Switch to the highest priority task. ; %sp = OSTCBHighRdy-OSTCBStkPtr MOVI32 %g0, OSTCBHighRdy ; %g0 = &OSTCBHighRdy LD %g1, %g0 ; %g1 = &OS_TCB LD %sp, %g1 ; stack is the first element LOAD_CONTEXT TRET %o7 ; ISTATUS - STATUS (no change in fact) NOP4 结语51单片机,LPC2210, NiosII三种处理器在我们的目前的嵌入式应用方面有着广泛的市场前景。将C/OS-II操作系统移植到其处理器上,能够更好地保证系统运行的稳定性和实时性,而且该操作系统代码少,易于掌握和移植。本文所介绍的C/OS-II操作系统在三种处理器上的移植是在本人在实际学习过程中,进行的一些梳理和小结,相信能给初学者一定的参考价值。 参考文献1 Jean J. Labrosse. 嵌入式实时操作系统 C/OS-II. 第2版M. 邵贝贝译. 北京:北京航空航天大学出版社,20032 周立功 等.ARM嵌入式系统基础教程. 北京:北京航空航天大学出版社,20053 胡大可 ,李培弘 ,方路平.基于单片机8051的嵌入式开发指南M .
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北3年级下数学试卷
- 动态自适应应用配置的多层级自主性管理-洞察及研究
- 汉川小学考试数学试卷
- 混凝土质量培训
- 江苏包版小毕考数学试卷
- 广西中学冀教版数学试卷
- 霍邱县期末数学试卷
- 桂电小升初数学试卷
- 河南七上数学试卷
- 广西文科理科数学试卷
- 医疗设备维护服务行业可行性分析报告
- CNAS-CL01-2018内审检查记录表
- 2024年中级经济师考试题库含答案(a卷)
- 八年级下册物理计算题专练(解析版)
- 原生质体的分离培养与细胞培养-原生质体的分离培养
- 湘美版小学二年级下册美术全册教案
- 山东农业工程学院辅导员考试试题2024
- 《会计学》课程中的思政案例诚信为本与职业道德的坚守
- 新生儿低血糖相关课件
- 物业安全生产培训
- 严重精神障碍患者家庭护理培训课件
评论
0/150
提交评论