微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > SPARC结构与实时内核的移植

SPARC结构与实时内核的移植

时间:05-17 来源:互联网 点击:

当前窗口对应的32个寄存器的值即可。任务堆栈相对中断堆栈结构更简单。

当前任务的SP,FP保存在%sp(%o6)和%fp(%i6)中,并且SPARC支持对%sp和%fp的读写操作,可以将当前的%sp值读出由 WR指令写入%i6,再将(%sp-0x148)的值写入%o6,这样通过分配一个大小为148H的堆栈帧完成新任务堆栈指针的初始化。

任务级切换

uC/OS中任务切换函数是由软中断(TA指令)来实现的。SPARC不支持对PC的直接操作,但在发生软中断时,CPU会自动将当前PC,NPC 的值写入到%l1,%l2寄存器。而在中断结束返回时,CPU再自动将%l1,%l2的值写入PC,NPC。根据CPU这一操作,可以将任务的入口地址以及入口地址的下一个地址分别写入%l1,%l2。这样在中断返回后的下一条指令就是要切换任务的入口地址,从而实现了任务切换。

uC/OS中的两个变量OSTCBCur和OSTCBHighRdy 分别指向当前任务和新任务的任务控制块,查考其数据结构可以发现它们实际上是两个分别为指向当前任务和新任务的任务堆栈的指针。在实现任务级切换时,由于当前任务已经执行完毕,没有保存当前环境变量的必要,所以切换函数主要任务是更新OSTCBCur的值为OSTCBHighRdy,并将更新后的 OSTCBCur所指向的任务堆栈,即在上一节中初始化好的任务堆栈中的值写入对应的寄存器,这一操作好比“恢复现场”。

在切换函数执行完,中断返回时执行语句“JMP %l1;RETT %l2”将新任务的入口地址写入到CPU的PC和NPC,完成任务级切换。

中断级切换

如果内核为可抢占实时内核,任务调度(通常在中断中被调用)将高优先级的任务置为有效时,需要在当前中断中完成任务的切换,使高优先级任务尽快得到CPU使用权,并在该高优先级任务执行完,且没有其它高优先任务被响应时,继续执行之前被中断的任务。

中断级切换函数必须对被中断的任务进行“现场保护”,因为每个中断函数都有“保护现场”功能,所以这一操作不难实现。此外,中断级切换函数还需要为新任务分配一组新的寄存器窗口,即保存当前所有Used态的窗口寄存器的值到堆栈对应的帧中。可以称之为Windows_flush,这也是寄存器窗口相关的操作。最简单的flush就是在%WIM中将当前窗口置为无效窗口,通过SAVE语句将当前窗口对应的inputs和locals寄存器的值写入堆栈。通过循环控制,可以将8个寄存器窗口的值全部保存,并且SAVE指令通过将%o6的值写入%i6,能自动实现栈帧的切换。在执行 Windows_flush后,当前任务以及其中调用的各线程的堆栈帧才全部被填充,成为一个连续堆栈,这样才做好了到更高优先级切换的准备。中断级任务切换的流程图如图3。

4.系统中断

时钟节拍

对于一个多任务系统,时钟节拍是必不可少的。ERC32CPU提供2个定时器,根据系统硬件采用的晶振源频率,可通过设置对应定时器控制寄存器的计数值,通过产生一定周期的系统中断来实现时钟节拍。对于时钟节拍的处理子程序,所选内核不同,其自带子程序也不同。在定时中断到来,只需将子程序入口地址添加到中断服务子程序中即可。

中断嵌套

当在系统开发中需要不同优先级中断,并可能发生中断嵌套的情况时,需要在进入中断服务子程序之前设置中断优先级,然后打开Trap,以允许在较长的中断服务子程序中响应更高优先级的中断。在退出中断服务子程序后,关闭Trap,将该中断优先级屏蔽掉,然后退出中断。

堆栈段

在堆栈的管理上存在堆栈帧的概念,并且每个帧的分配与产生都对应一个新的窗口和一个新的线程或者中断。根据中断的栈结构和线程栈结构的不同,可在程序初始化部分分配两个堆栈段。一个堆栈段对应普通线程的堆栈分配和管理,一个对应中断栈的分配和管理。这样在每个段中各帧的大小一致,不会在 Overflow Trap和Underflow Trap时读写内存出错。可以通过增加两个变量LEVEL,SKP来协调两个堆栈段的使用。使用两个堆栈的中断嵌套服务子程序流程图如图4。

5.总结

SPARC结构中比较复杂的部分就是寄存器窗口的概念,但在使用中,效率也高很多。如果能了解寄存器窗口的工作原理,并能正确使用Window flush操作,在软件设计上将会得到高的可靠性。

本文作者的创新点为,将能实现自动控制需求的小型uC/OS内核移植到具有高可靠性SPARC结构的ERC32 CPU。ERC32 CPU是专门针对航天应用而设计的CPU,采用SPARC V7指令集。航天工程的控制不像消费电子的控制那么复杂,但在可靠性和实时性方面要求比较苛刻,能够移植满足需求的小型内核,如uC/OS到ERC32,在工程上有很大的应用价值。

参考文献:

1.The SPARC Architecture Manual Version 8,SPARC International,Inc.1998.

2.Jean J.Labro

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top