许璐璐 郑吉洲 彭夏鹏 李 悦
北京航天自动控制研究所,北京100854
基于SPARC的嵌入式实时操作系统移植
许璐璐 郑吉洲 彭夏鹏 李 悦
北京航天自动控制研究所,北京100854
基于嵌入式实时操作系统进行应用开发时,首先需要将其移植到对应的硬件平台上。SPARC架构处理器是航天工程中常用的一款处理器,本文首先简要介绍了SPARC体系结构、寄存器窗口等相关概念,然后对嵌入式实时操作系统的SPARC移植进行了分析和实现。最后进行了测试验证,结果表明移植后的操作系统运行稳定正常,性能满足应用需求。 关键词 SPARC;寄存器窗口;嵌入式实时操作系统;移植
由于嵌入式硬件体系的多样性,在基于嵌入式实时操作系统进行应用开发时,首先需要将其移植到对应的硬件平台上。
SPARC处理器是航天工程中常用的一款处理器,寄存器窗口是其一个重要概念,在进行基于SPARC的嵌入式实时操作系统移植时需要对其进行相关处理。本文对嵌入式实时操作系统的SPARC移植进行了研究和实现。
1.1 寄存器窗口
SPARC体系结构继承伯克利RISC结构,寄存器窗口是其一个重要概念。1个寄存器窗口包含32个寄存器,通常记为%g0,…,%g7;%l0,…,%l7;%i0,…,%i7;%o0,…,%o7。其中%g0,…,%g7为全局寄存器,其余24个为当前窗口寄存器,只对当前程序可见[1]。当调用子程序时,会分配一个全新的窗口。寄存器窗口简化了函数调用过程。
图1 寄存器窗口
SPARC架构规定一个基于SPARC的处理器可以包含N=2**n(1≤n≤5)个窗口。在一个寄存器窗口组中,相邻寄存器窗口存在寄存器公用。CWP(Current Window Pointer)指向当前窗口,SAVE指令将分配一个全新的窗口CWP-1,其中8个ins寄存器继承窗口CWP的outs寄存器的值。RESTORE指令则将CWP加1,使之前的窗口为当前窗口。
特别的,%o6为%sp即栈顶指针,%i6为%fp即栈帧指针(相当于栈底),%fp与%sp之间的堆栈即为当前堆栈帧。编译器通常用save %sp,-96,%sp之类的语句为新的程序分配一个新的堆栈帧。
图2 N=8的寄存器窗口结构
1.2 控制/状态寄存器
处理器状态寄存器(%PSR):Bit0~Bit4为当前窗口指针(CWP)。Bit5为Trap使能位(ET),Bit8~Bit11为处理器中断级别(PIL)。
无效窗口标识寄存器(%WIM):因为窗口数N固定,为防止窗口溢出,设置了WIM寄存器。N=8时,Bit0~Bit7分别对应窗口0~7,当某位为1时表示对应窗口为无效窗口。WIM只能有1位为1。
其他的还有陷阱基址寄存器(%TBR),乘除法寄存器(%Y),浮点状态寄存器(%FSR),浮点寄存器(%f 0~%f 31)。
1.3 窗口上溢、下溢
上溢(overflow):当前为SAVE指令,并且CWP-1对应窗口无效时,发生overflow trap。在程序调用时,每调用1个新子程序就对应1个SAVE语句,当子程序调用层数大于窗口数时,发生窗口溢出,需要进行overflow trap处理,通常是将无效窗口的下一个窗口寄存器值保存到对应堆栈中,然后将%WIM下移。
下溢(underflow):调用RESTORE指令,并且CWP+1对应窗口为无效窗口时,发生underflow trap。通常RESTORE的窗口内容是之前overflow trap处理时保存到堆栈中的,当恢复到原来窗口时需要从堆栈中读出原寄存器值。
移植工作主要是重建嵌入式实时操作系统的硬件抽象层(HAL)[2],包括:数据类型重定义、任务堆栈结构设计、实现任务切换及中断处理等。数据类型重定义是针对不同微处理器的字长不同,移植时需要与处理器匹配。针对32位SPARC,将堆栈数据类型定义为32位整型。
2.1 临界区互斥
临界区互斥是通过开关中断来实现的,进入临界区前先关闭中断,退出临界区后重新打开中断。关中断时,先将当前PIL保存,再将PIL置为0x0F(只有中断号大于当前PIL值时才会响应中断,因此通过将PIL置为15可实现关中断),开中断时即恢复原来的PIL值。
2.2 任务堆栈帧设计
发生任务切换时,需要保存当前任务环境(处理器当前各寄存器值),因此需要根据SPARC结构设计任务堆栈帧。当任务切出时,按照此帧结构保存当前处理器各寄存器值;任务切入时,再将此帧中保存的值恢复到各对应寄存器中。任务栈帧如图3所示。
图3 任务栈帧结构
2.3 任务切换实现
对于一个支持多任务的实时内核,实现任务切换功能是移植时需要完成的最基本任务。
任务切换分为任务级切换和中断级切换,当前任务主动让出CPU时发生任务级切换,当退出最后一层中断时,如果有更高优先级任务就绪则会发生中断级切换。
对于SPARC处理器,PC和nPC无法直接读取,但发生trap时,PC和nPC会自动存入%l1和%l2寄存器,trap返回时CPU再自动将%l1和%l2的值写入PC和nPC,所以通过软中断0进行任务级切换。对于每个任务,逻辑上都有一组寄存器窗口,即当前used态的窗口内容都应保存。所以保存任务上下文时,先保存%PSR等状态寄存器、globals寄存器及任务current窗口的outs寄存器,再做windows flush处理,保存used态的各寄存器窗口的locals和ins寄存器。
图4 任务切换流程
根据当前CWP和%WIM的值可将寄存器窗口划分到4个状态中[3]:Current,Invalid,Used,Unused。假设CWP为4,%WIM为0x01,那么寄存器窗口组可以如下划分:W0:Invalid;W1-W3:Unused;W4:Current;W5-W7:Used。
据此,windows flush处理过程如下:从Current窗口开始,保存locals和ins寄存器到对应的堆栈帧中,再RESTORE退到上一个窗口,保存locals和ins寄存器的值,直到退到%WIM所指的无效窗口。再将%WIM的值设置为Current的上一个窗口,这样当恢复该任务时,RESTORE指令将发生underflow trap,把堆栈中保存的locals和ins寄存器恢复。
恢复新任务上下文时,将新任务PC和nPC存入%l1和%l2,调用jmp %l1;rett %l2退出trap,CPU将跳转到新任务执行,实现任务切换。由于发生中断时,中断处理过程会对被中断的任务进行现场保护,所以中断级切换直接从任务级切换的windows flush处开始执行。
2.4 中断处理
时钟心跳是操作系统必不可少的,需要根据硬件平台设置相应的定时器,产生周期性的时钟中断来实现时钟心跳。
提供中断注册函数供用户注册外部中断的中断服务程序,是否允许中断嵌套交由用户决定。同时,使用独立的中断堆栈,提高系统可靠性。
中断处理流程与一般的处理器中断处理类似,不再赘述(见图5)。需要注意的是,进入中断时,SPARC不会自动检测是否发生窗口上溢,因此,中断处理过程需要检测是否进行窗口上溢处理,同样退出中断时也需检测是否进行窗口下溢处理。
图5 中断处理流程
硬件平台使用的是S698-T芯片,S698-T是珠海欧比特控制工程股份有限公司面向嵌入式控制领域研制的一款高性能、高可靠的SoC芯片,以高性能的SPARC V8(IEEE-1754)架构标准的32位RISC整型单元IU为主控内核,配以IEEE-754标准的64位双精度浮点处理单元FPU,内部集成DSU支持在线硬件调试[4]。测试时,主机上运行集成开发调试工具,通过DSU与目标机相连,进行在线调试。
图6 测试环境
设计了详细的测试用例,对任务切换、任务运行环境的保存恢复、中断处理等进行了测试验证,测试结果与预期相符,系统运行稳定正常。在主频100MHz下,任务切换时间为11us,中断响应时间为5us,可以满足对实时性有要求的应用。
介绍了航天工程中常用的SPARC处理器的体系结构,对嵌入式实时操作系统的SPARC移植进行了研究和实现,并在S698-T开发板上进行了测试验证。测试结果表明,系统运行稳定正常,可靠性和实时性满足航天工程的应用要求。
[1] The SPARC Architecture Manual:Version 8[M]. CA: SPARC International,Inc, 1998.
[2] 魏淳,魏雷. Uc/OS-II在TMS320C6713上的移植[J]. 太原师范学院学报(自然科学版), 2012, 11(2): 91-94.(Wei Chun, Wei Lei. The Transplant of Uc/OS-II on TMS320C6713[J]. Journal of Taiyuan Normal University(Natural Science Edition), 2012, 11(2): 91-94.)
[3] 冯磊. SPARC结构与实时内核移植[D]. 北京: 中国科学院研究生院, 2006.(Feng Lei. The SPARC Architecture and Real-Time Kernel Porting[D]. Beijing: University of Chinese Academy of Sciences, 2006.)
[4] S698-T芯片用户手册[Z]. 广东: 欧比特控制工程股份有限公司, 2010.(The S698-T User Mannual[Z]. Guangdong: Orbita Embedded, Inc, 2010.)
The Transplant of Embedded Real-time Operating System for SPARC Architecture
Xu Lulu, Zhen Jizhou, Peng Xiapeng, Li Yue
Beijing Aerospace Automatic Control Institute, Beijing 100854, China
Duringtheapplicationdevelopmentofembeddedreal-timeoperationsystem,theoperatingsystemportingtocorrespondinghardwareplatformisfirstlyapplied.TheSPARCarchitectureprocessoriscommonlyusedinaerospaceengineering.TheSPARCarchitectureconcepts,registerwindowandetcarebrielflyintroduced.Andthen,theembeddedreal-timeoperatingsystemportingtoSPARChardwareplatformisanalyzedandrealized.Finally,thetestsareimplementedtoverifytheperformance,andtheresultshowsthattheoperatingsystemisrunningsteadlyanditsperformancemeetstherequirementofapplications.
SPARC;Registerwindow;Embeddedreal-timeoperatingsystem;Porting
2016-01-18
许璐璐(1988-),男,江苏人,硕士研究生,主要研究方向为嵌入式软件;郑吉洲(1970-),男,湖北人,研究员,主要研究方向为计算机应用技术;彭夏鹏(1988-),男,湖南人,工程师,主要研究方向为嵌入式软件;李 悦(1984-),男,河北人,工程师,主要研究方向为嵌入式软件。
TP319
A
1006-3242(2016)05-0077-04