开源嵌入式RTOS-T-Kernel在Blackfin处理器的移植

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

开源嵌入式RTOST-Kernel在Blackfin处理器上的移植张纹霖1中科院研究生院,中科院沈阳自动化所辽宁省沈阳市南塔街114号R429,110016Tel:02423970140E-mail:Wenlin-Zhang@ustc.edu缪磊2董再励3中科院沈阳自动化所机器人学重点实验室摘要随着嵌入式计算技术的飞速发展,多种功能强大的微处理器和相应嵌入式操作系统也相继问世。选择合适的嵌入式操作系统和处理器平台进行移植成为嵌入式开发的重要技术环节。本文介绍了开源嵌入式实时操作系统RealTimeOperatingSystem(RTOS)T-Kernel和Blackfin(BF)533处理器及其开发环境VisualDSP++4.5Environment,给出了中断管理,任务切换和系统调用入口三个模块的移植方法,并讨论了相应的系统稳定性和实时性测试方法。日本T-Engine组织推出的T-KernelRTOS拥有高实时性,小体积的内核,并强调对底层处理器全面封装;ADIBlackfin系列微处理器同时具有DSP和MCU的特点,非常适合于移植RTOS。所以T-Kernel在BF533上的移植是一个典型的开发应用实例,其移植分析方法对于其他嵌入式RTOS移植也具有参考价值。关键字T-KernelBF533T-Engine嵌入式RTOS移植嵌入式微处理器1概述随着嵌入式技术的蓬勃发展,嵌入式RTOS已逐渐成为软件系统中一个重要部分,选用优秀的开源免费RTOS(如RT-linux等),既可以免去购买商用操作系统的高额License费用,又节省了自主开发的研发成本和时间,对于目前国内的嵌入式开发是一个较好的选择。T-Kernel源自于日本东京大学坂村健博士于1984年提出的计算机操作系统规范TRON(TheReal-timeOperatingSystemNucleus)。凭借其强实时性,小体积,和开源免费等特点,RTON占据了全球微处理器市场60%份额。T-Engine组织在IRON优越的实时性内核基础上推出的T-Kernel规范,进一步强调了统一的上层接口规范、对象数据格式以及标准的中间件结构,使上层应用软件能从底层硬件结构中独立出来,可以不依赖于硬件处理器而移植,大1张纹霖:男,1982年生,2001年毕业于中国科技大学自动化系,中科院沈阳自动化所05届在读硕士,模式识别与智能系统专业。研究领域:嵌入式RTOS,基于DSP和FPGA的嵌入式AFM控制器设计。2缪磊:男,中科院沈阳自动化研究员助理。主要研究领域:微纳视觉观测技术,光电传感技术,微机电系统。Email:miaolei@sia.cn3董再励:男,副研究员,研究生导师,微纳自动化技术研究实验室负责人。E-mail:dzl@sia.cn本论文受国家自然科学基金(60575060)辽宁省优秀人才培养基金(3050002)支持大加快嵌入式软件的开发速度[1]。AnalogDeviceInc.Blackfin系列处理器在嵌入式控制和数字信号处理领域应用非常广泛,其昀大的特点就是同时结合了Microcontroller(MCU)和DSP特点,即能100%运行在MCU状态,也能100%运行在DSP状态,非常适合于运行RTOS[2]。本文分析和归纳了T-Kernel在Blackfin533(BF533)处理器上移植过程中的三个主要问题:中断管理,任务切换和系统调用入口三个模块的移植,并讨论了系统稳定性和实时性的测试方法。上述T-Kernel和Blackfin的特点,使移植和测试过程非常具有代表性,本文所讨论的方法,对于其他RTOS的移植也具有参考价值。在以下第2节和第3节分别对T-Kernel和Blackfin处理器对于移植相关的部分进行简要的分析;第4节具体讨论了移植的主要问题;第5章介绍了对于移植以后的稳定性和实时性的测试方法,昀后进行总结。2T-Kernel概述2.1T-Kernel的系统结构T-KernelStructureMCUorDSPHardwareMiddlewareSubsystemsApplicationsT-Kernel(DefaultSubsystem)图2.1T-Kernel的位置T-Kernel的系统结构如图2.1所示,各功能模块是以子系统(subsystem)的形式存在的,如设备管理模块。T-Kernel的内核是系统默认的子系统,它为应用层提供系统服务(SVC)接口,同时管理着其他子系统。子系统为应用层提供扩展服务(ExtendedSVC)调用接口。系统中各子系统运行在相互独立的地址空间中,保证了系统的模块化,易于扩充和裁减。2.2T-Kernel的系统状态和任务调度T-Kernel规范[3]中对系统状态做了明确的划分和定义,这里主要分析如下两种状态:(1)任务态(TaskPortion)运行在应用层昀高优先级的就绪任务中为任务态。(2)任务无关态(TaskIndependentPortion)任务无关态指系统的中断和异常处理过程。在所有状态中,优先级昀高的是任务无关态。操作系统(OS)定义的中断和软中断异常可以抢先临界区之外的任何状态;与OS不相关的不可屏蔽中断NMI可以中断临界区,但NMI处理程序中不能调用OS的服务。除了任务无关态,任务态具有被执行的优先权。T-Kernel内核采用了基于优先级的可抢先调度策略,优先级相同的任务采用先进先出的时间片轮转调度,允许任务动态更改优先级。T-Kernel的任务调度和切换是分离的过程。内核中维护着按照优先级排列的就绪任务TCB(TaskControlBlock)指针链表队列,任务调度的过程就是将新的就绪任务TCB指针按照优先级放到表中相应的位置。比当前运行任务(其TCB指针存放在ctxtsk变量中)优先级更高的任务就绪时,就更新schedtsk(存放需要调度的任务的TCB指针)变量。可以看到,调度过程是一个查表的操作,其复杂度独立于就绪任务数目,从而保证了T-Kernel内核的实时性。任务调度发生后,在进行任务切换的条件(任务无关态结束,并且系统允许任务调度)达到时,系统触发软中断异常进行任务切换,将ctxtsk更新为schedtsk,程序转入新任务运行。3VisualDSP++4.5开发环境和BF533处理器移植使用的开发环境是ADIVisualDSP++4.5Environment,程序运行在bf533的Simulator环境。图形化程序调试环境VisualDSP++4.5,提供了项目管理,程序调试,编译连接,下载模拟等软件开发的全部功能。其针对Blackfin处理器的Built-inFunctionslibrary,可以很方便的读取和配置处理器的硬件相关的寄存器,请参考[2]。BF533的处理器内核包含了两个16-bit乘法器,两个40-bit累加器,两个40-bit算术运算单元(ALUs),四个8-bitvideoALUs和一个40位移位器,如图3.1[2]所示:图3.1Blackfin的处理器结构在上下文切换过程中,需要保存的寄存器主要有:(1)堆栈和返回地址寄存器:SP(StackPointer),FP(FramePointer),RETS(SubroutineReturnAddressRegister),RETI(InterruptReturnAddressRegister);(2)通用数据寄存器R0~R7,通用地址寄存器P0~P7.其它寄存器:L0~L3,LB0~LB1,LC0~LC1,LT0~LT1,ASTAT,A0~A1,I0~I3,B0~B3,M0~M3,其中在进入新的上下文之前,L0~L3需要清零。Blackifn处理器内核支持15个优先级的中断。在中断处理过程中,ILAT寄存器中为1的位表示当前触发的中断,查询这个寄存器,可以得到当前需要执行的昀高的优先级中断号;IMASK寄存器的每一位的状态则代表相应优先级中断的使能和禁止,在移植中,IMASK寄存器作为系统的全局中断状态寄存器;IPEND寄存器的第4位IPEND[4]是全局中断的使能和禁止位,其余的位是相对应优先级的中断响应标志位。T-Kernel系统运行在BF533的第15号(昀低优先级)软中断处理程序中,这样可以获得对处理器内核的supervisor权限,请参考[4]Blackfin编译器提供两种禁止全局中断的方式,一是通过关闭IMASK寄存器中的所有标志位;另一种是通过对RETI寄存器的压栈和弹栈更改IPEND[4]状态。前者易于用C语言操作,主要用在进出临界区的操作,后者不会改变IMASK寄存器的状态,在中断前后处理和任务切换中的汇编程序使用。从汇编函数调用C函数时,R0~R2保存前三个参数,大于三个的参数保存在堆栈中,从[SP+0xC]开始,返回时R0存放返回值。P3~P5,R4~R7可以用于存放调用C语言函数前后的不变量如(SP等),实际的情况还与编译器的设置有关。4T-Kernel在BF533上的移植4.1系统中断的管理T-Kernel对于处理器的中断资源采取动态管理的方法,在运行中任务(task)可以动态的更改中断向量表,注册和取消中断,通过系统调用tk_def_int(DefineInterruptHandler)来实现这个功能。在中断管理模块的移植中,主要解决两个问题:(1)保证全局中断状态寄存器IMASK在动态管理中断向量表的过程中,需要保证全局中断状态IMASK寄存器为全局变量,如果每个任务都各自拥有一个局部的IMASK值,则会出现一个任务等待的中断在另一个任务运行时被禁止的情况,造成系统对中断无法实时响应处理。(2)延迟任务切换在T-Kernel系统中,中断处理属于taskindependentportion,比taskportion的优先级要高,所以在中断处理程序中发生的任务调度,并不能得到及时的切换,需要延迟到中断结束才能进行。所以在中断后理中需要判断是否进行从中断到任务的上下文切换,如果是则调用T-Kernel系统服务tk_ret_int(ReturnfromInterruptHandler)。下面将讨论在BF533处理器上实现T-Kernel对中断的动态管理的方法以及中断前后处理的流程。4.1.1临界区和全局IMASK问题保证IMASK寄存器为全局变量的一个关键部分是如何设计进出临界区的操作。在临界区中通过关闭IMASK寄存器中所有中断使能位禁止所有OS定义的任何中断。在临界区中一旦发生了任务调度,那么在出临界区之后需要进行任务切换,这样临界区的设计需要实现下面两个功能:(1)进入临界区之前取出当前的IMASK寄存器进行保存,关闭所有的中断使能标志,在出临界区之前把保存的IMASK值重新设置,打开中断。(2)出临界区之后判断,如果有任务调度发生,而且当前系统状态允许任务切换,则调用dispatch()函数触发软中断,开始任务切换。这样,只要在任务切换过程和中断的响应过程中,不保存和更改IMASK寄存器,那么IMASK寄存器在所有task中为一个全局变量。同时,tk_def_int(UINTdintno,T_DINT*pk_dint)函数要保证三点:只有在intno号中断处于空闲的状态下可以定义;只有定义intno号中断的task才能取消intno号中断的定义;在tk_def_int函数中进行了定义中断或取消中断操作的同时,对IMASK寄存器进行操作,打开或关闭相应的中断使能位,这一步骤是在临界区中进行的。通过上述方法,可以有效地管理全局中断状态标志寄存器IMASK,安全稳定实时地实现了T-Kernel动态重构中断向量表的功能,对处理器中断资源进行昀大限度的利用。4.1.2中断前后处理在T-Kernel系统中,中断是独立且优先于任务被执行的模块,需要被快速的响应和执行,在中断前后处理中主要进行以下四项操作:(1)保存和恢复上下文;(2)设置标志变量表示进出和嵌套TaskIndependentPortion;(3)更改堆栈指针使中断子程序运行在位于处理器内部RAM的中断堆栈;(4)取得当前触

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功