1 / 16
文档名称:

高速铁路桥梁混凝土施工技术解析.doc

格式:doc   大小:53KB   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

高速铁路桥梁混凝土施工技术解析.doc

上传人:w8888u 2020/2/6 文件大小:53 KB

下载得到文件列表

高速铁路桥梁混凝土施工技术解析.doc

相关文档

文档介绍

文档介绍:基于堆栈结构一致性实现的ΜC/OS-Ⅱ在ARM7上的移植[摘要]讨论源代码开放的实时操作系统μC/OS-Ⅱ在目前流行的嵌入式微控制器ARM7上的移植,从非运行态任务的堆栈一致性这个角度来联通分析各个主要移植函数的编写。通过分析能更透彻的理解任务堆栈结构在操作系统移植中的重要性,对把操作系统移植到不同的处理器具有一定的参考价值。本文来源于网络,本站发布的论文均是优质论文,供学****和研究使用,文中立场与本网站无关,版权和著作权归原作者所有,如有不愿意被转载的情况,请通知我们删除已转载的信息,如果需要分享,请保留本段说明。[关键词]移植堆栈结构μC/OS-ⅡARM7 中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0920066-02 一、引言在微处理器上引入操作系统代替传统的单片机前后台系统来管理整个系统,可以使系统整体性能得到明显优化。μC/OS-II是一个完整、可固化、可裁剪、可移植的占先式实时多任务内核,非常适合于在微处理器上进行移植。ARM7系列微处理器是目前使用最为广泛的微处理器之一,本文讨论的μC/OS-II在ARM7上的移植有着较为典型的意义。二、μC/OS-Ⅱ移植概述移植就是使一个内核能够在某个微处理器上或者控制器上运行,也就是要为特定的CPU编写特定的底层代码。操作系统的移植涉及到处理器体系结构和编译器以及操作系统本身,是一项比较复杂的工作。μc/OS-Ⅱ的大部分代码是用C语言编写的,但移植时候还是需要用汇编语言编写一些与CPU硬件相关的代码。移植μC/OS-Ⅱ到一个微处理器上一般需要编写三个文件:,其中定义一些与编译器无关的数据类型以及与处理器有关的常量和宏;,其中定义了μC/OS-Ⅱ任务堆栈初始化函数以及钩子类函数;,其中定义了中断服务函数以及任务切换函数。这些移植文件的编写在很多文章中都有过详细的介绍[3][4],本文不再赘述。本文将从非运行态任务的堆栈一致性这个角度来联通各个主要移植函数的编写,以加深对μC/OS-II移植的理解。三、移植难点操作系统能够稳定的运行,关键在于任务能够稳定的切换。在μC/OS-Ⅱ中,任务通过模仿中断的方式来运行,并且拥有自己单独的任务堆栈;处于非运行态任务的堆栈结构看起来就像刚发生过中断一样,并且所有的寄存器都已经保存到堆栈中[2]。非运行态任务堆栈的一致性指任务没有处在运行态时其任务堆栈中保存的任务环境顺序具有一致性,这是任务切换能够稳定进行的最主要因素。大部分的处理器会通过提供软中断或者是陷阱的方法来实现任务的切换。而涉及到任务切换或者说是任务堆栈变化的移植函数则是移植的难重点,这些移植函数都要参考非运行态任务的堆栈结构来编写,以保证任务堆栈结构的一致性。本文将以μC/OS-Ⅱ在ARM7系列微处理器上的移植代码来分析讨论μC/OS-Ⅱ的移植难点,。注:移植程序来自周立功公司产品easyarm2200m[1]。四、移植函数分析涉及到任务堆栈的函数主要有堆栈初始化函数OSTaskStkInit(),任务级代码中的任务切换函数OS_TASK_SW(),中断退出时候的任务切换函数OSIntCtxSw(),首次进入多任务环境的OSStartHighRdy()以及中断汇编宏。(一)函数OSTaskStkInit() 堆栈初始化函数OSTaskStkInit()由创建任务的函数调用,初始化非运行态任务的堆栈结构,它与cpu的体系结构有着密切的关系。这个堆栈结构一旦确立,以后所有的任务环境的压栈和出栈操作都必须参照这个堆栈结构来处理堆栈。在ARM7系列处理器上的任务堆栈结构如图1所示: 图1中的任务其它入栈数据是任务运行之后才有的,堆栈刚初始化后的任务堆栈栈底指向PC。堆栈初始化的一般顺序是先模拟中断到来时候处理器的动作,这里是保存中断返回地址PC以及连接寄存器LR;然后保存剩余的CPU寄存器,但是SP没有被保存在堆栈环境中,SP保存在任务控制结构TCB中以用于任务的切换。SPSR是没有必要保存在堆栈中的,因为任何中断或者异常打断的任务的状态都保存在堆栈的CPSR中。OsEnterSum是保存开关中断次数的变量,它的入栈使得各个任务开关中断的状态互不影响。(二)函数OS_TASK_SW() 任务级代码中的任务切换函数OS_TASK_SW()是通过软件中断0号功能来实现的,软件中断向量直接指向汇编语言程序段OSIntCtxSw(程序段B+C)。在讨论切换函数之前先确定软件中断时候的堆栈结构(参考程序段A),软件中断将使系统进入管理模式。 SoftwareInterrupt LDRSP,StackSvc;设置管理模式下的堆栈指针 STMFDSP!,{R0-R