存储器管理系统以及在多任务系统中的任务控制器的制作方法

文档序号:6382812阅读:164来源:国知局
专利名称:存储器管理系统以及在多任务系统中的任务控制器的制作方法
技术领域
本发明涉及一种对软件堆栈存储器的管理方法,具体地说,本发明涉及一种在执行多任务系统时用于减少堆栈存储器可利用量的程序结构。
背景技术
随着程序中控制的复杂化,可以用计算机一次将两个或多个任务分别处理为工作单元的多任务系统已经得到普遍应用。多任务系统的采用可以有效转换和执行多个任务。
图3示意性示出了一个在常见多任务系统中处于使用状态的RAM例子。图3中用参考数字标注的区域表示用在各项任务中的堆栈存储器区域(以下称为堆栈)。特别的,在RAM上,构造了具有多项任务1、任务2、...和任务n的多个堆栈,一个用于空闲任务的堆栈,和一个只用于处理由多任务系统执行的中断的堆栈。
这些堆栈分别由堆栈301、311和321、返回PC存储区域302、312和322、PSW存储区域303、313和323以及CPU寄存器存储区域314、324和304组成。此外,用于处理中断的堆栈包括在产生中断时存储任务SP的返回SP存储区域305以及处理用在中断处理序列中的中断的堆栈区域306。
在这里,中断处理表示每隔规定的时间,在例如定时器控制下通过在一任务或处理由外部因素执行时临时中断该任务(普通处理)而执行的处理。
例如,在任务1运行期间产生中断时,通过使用堆栈311来执行的任务1被临时中断。此时,PC寄存器的当前值存储在返回PC存储区域312。PSW寄存器的当前值存储在PSW存储区域313中。此外,任务1中使用的CPU寄存器值存储在CPU寄存存储区域314中。然后,任务1的SP寄存器值存储在返回SP存储区域305中,该区域位于处理中断时使用的堆栈区域中。设置SP寄存器的值,以标明用于处理中断的返回SP存储区域305和堆栈区域306的边界,即堆栈区域306的末端区域。因此,堆栈区域从任务堆栈转换为处理中断的堆栈。
完成中断处理后,将存储在SP存储区域305的值设置到SP寄存器,以便将堆栈区域转换为任务区域。此后,将存储在CPU寄存器存储区域314中的值设置到每个CPU寄存器,并将存储在PSW存储区域313和返回PC存储区域312中的值也返回到PSW寄存器和PC寄存器,使得堆栈区域可以返回到初始任务1。在这样的结构中,当多任务系统执行多项任务时,可以执行规定的中断处理(例如,参考专利文献1 JPA8123698)。
然而,在图3所示的堆栈结构中,确定产生中断时存储的CPU寄存器的释放能力大体上与处理任务的内容无关。很多无需存储数据的寄存器可能包括在其中,使得存储器被多余地消耗掉了。为了适应这一点,一种方法是在例如中断处理的第一部分就区分各种存储数据的CPU寄存器。然而,该方法的缺点是恶化了中断响应性能。

发明内容
本发明解决了上述问题,包括用于执行多任务系统的n个任务堆栈、一个用于处理中断并由每个任务堆栈共享功能的堆栈,以及分别与产生中断处理时执行的任务堆栈并联的PC、PSW和CPU寄存器。用于处理中断的堆栈区域由n个任务堆栈中的任何一个共享和使用。在产生中断处理时,PC、PSW和CPU寄存器的值并列放入当前任务堆栈之后,堆栈指针跳转到中断处理端。完成中断处理之后,堆栈指针跳转到任务堆栈,存储在该任务堆栈中的PC、PSW和CPU寄存器值从该任务堆栈返回以重新开始任务运行。
如上所述,本发明的效果是,使用实时OS(操作系统)的系统任务堆栈区域和中断堆栈区域同时以双重方式使用,从而在整个系统中减小了存储器的可利用量。因此,多任务系统可以在小容量存储器下有利地运行。


图1为示意性表示本发明实施方式的堆栈结构的框图;图2为示意性表示常规多任务系统中堆栈结构的框图;图3为特别地表示常规多任务系统中堆栈使用状态的框图;图4为特别地表示本发明的多任务系统中堆栈使用状态的框图;
图5为表示常规多任务系统中产生中断时堆栈转换处理内容的流程图;图6为表示本发明的多任务系统中产生中断时堆栈转换处理内容的流程图;图7为表示一个模式跳转到本发明的低功率消耗运行模式时堆栈转换处理内容的流程图;图8为表示在完成中断时堆栈转换处理内容的流程图;图9为表示在空循环情况下空闲任务处理内容的流程图;图10为表示一个模式转换到低功率消耗运行模式时的空闲任务处理内容的流程图;图11为特别地表示一个模式转换到低功率消耗运行模式时用于空闲任务的堆栈结构和用于处理中断的堆栈结构的框图;图12表示第一和第二实施方式中的任务控制器;图13表示第三实施方式中的任务控制器。
具体实施例方式
下面根据附图描述本发明的实施方式。
(第一实施方式)图1为表示一种根据本发明的多任务系统中堆栈的使用途径的框图。就设置处理中断的堆栈107的位置而言,该多任务系统比图2所示的常规多任务系统更有特色。
在图2所示的常规多任务系统中,三个任务102、104和106以及一个中断处理程序108在操作系统109(以下称之为OS)上运行。堆栈区域101、103、205和207分别独立的为任务或程序做准备。三个任务中具有最低优先级的任务称为空闲任务106。在执行该空闲任务时,表明一种该系统没有任务可处理以及外部中断等待进入的状态。
在图1所示的根据本发明的多任务系统中,三个任务102、104和106以及一个中断处理程序108也在OS 109上运行,堆栈区域101、103、105和107分别独立的为任务或程序做准备。此外,也准备好三个任务中具有最低优先级的空闲任务106。在这种情况下,将处理中断的堆栈107的位置设置为与用于空闲任务的堆栈区域105重叠。在中断处理时的堆栈区域通过覆盖(堆栈破坏)用在空闲任务处理中的该堆栈区域来运行。
图3表示在常规多任务系统中的堆栈内容,包括两个普通的任务堆栈区域,一个用于空闲任务的堆栈区域和一个用于处理中断的堆栈区域。
在图3中,最初在任务1运行时,堆栈指针(以下称为SP)指向用于任务1的堆栈区域311,任务1利用该区域处理程序。在此状态下,鉴于硬件原因,当产生中断以及CPU接收该中断时,程序计数器(以下称为PC)和处理器状态字(以下称为PSW)的内容分别存储在堆栈区域312和313中。SP的值自动减去PC和PSW的大小。然后,CPU将PC值移动到中断处理程序的第一位置,以执行OS中断输入处理。
图5表示常规多任务系统中,在执行任务期间接收中断时的OS中断输入处理的流程图。在执行任务1期间产生中断的情况将在下面描述。最初,在步骤S501中,CPU寄存器值存储在堆栈区域314中。CPU寄存器的数量根据CPU种类而有所不同。最简单的安装方法是存储所有安装在CPU上的CPU寄存器。然后,在步骤S502中,SP的当前值(其等于相关任务堆栈的最后一个地址)存储在位于处理中断的堆栈区域末端的返回SP存储区域305中。在完成中断处理后,该处理对于再次将SP指定的位置返回到任务堆栈是必要的。然后,在步骤S503中,处理中断的堆栈区域306的末端地址代替了SP,以便将该堆栈从任务堆栈区域314转换为处理中断的堆栈区域306。此时,要注意设置SP的值,使得用于任务的返回SP存储区域305不会被覆盖。最后,在步骤S504中,调用由应用程序定义的中断处理程序函数,以便在步骤S505中执行该应用程序的中断控制程序。该处理以函数返回的形式从步骤S505返回OS中断输入处理,以便在此后跳转到OS中断退出处理。
图8是中断处理完成返回任务时OS中断退出处理的流程图。在该OS中断退出处理中,存储在用于任务的返回SP存储区域305中的值在步骤S801中最初返回到SP。因此,用于处理中断的堆栈区域306保持为不使用。在普通OS中,在步骤S802执行延迟发送处理。延迟发送处理的运行如下所述。在该处理从中断处理返回到任务时,要确定该任务是否需要被转换。然后,如果任务需要被转换,则更改SP的值,以便从当前任务1中指明其它任务(例如任务2)的适当堆栈地址。在本发明中,由于延迟发送处理的内容不是本发明的主要目的,因此不在这里特别提及。在步骤S803中,存储在步骤S501中的CPU寄存器值从堆栈区域314返回各CPU寄存器。最后,在步骤S804中,处理返回被中断打断的任务处理。此时,执行由CPU发出的将该处理从中断处理返回的指令,以便从堆栈中将PC和PSW的内容复位。
在任务运行过程中接收中断以便将处理通过退出处理从OS中断输入处理返回任务的步骤完全与图3中示出的任务2或空闲任务的步骤相同。上述任务1可能不会被使用。也就是说,图3中任务1使用的堆栈区域311至314可以直接由堆栈区域321至324或堆栈区域301至304代替。
图4为表示根据本发明的多任务系统中堆栈内容的框图,该堆栈包括两个普通任务堆栈区域和一个用于空闲任务的堆栈区域。
在图4中,最初当运行任务1时,SP指明用于任务1的堆栈区域311,任务1使用该区域来处理程序。在此状态下,鉴于硬件的原因(in view of hardware),当产生中断和CPU接收该中断时,PC和PSW的内容分别存储在堆栈区域312和313中。此时,SP的值自动减去PC和PSW的大小。然后,CPU将PC的值移动到中断处理程序的第一位置,以执行OS中断输入处理。
图6表示任务运行过程中接收中断时的OS中断输入处理的流程图。开始在步骤S501中,CPU寄存器的值存储在堆栈区域314中。CPU寄存器的数量根据CPU的种类而有所不同。最简单的安装方法是存储所有安装在CPU上的CPU寄存器。然后,在步骤S602中,SP的当前值(其等于相关任务堆栈的最后一个地址)存储在位于处理中断的堆栈区域末端的返回SP存储区域405中。在完成中断处理后,该处理对于再次将SP指定的位置返回到任务堆栈是必要的。在此,注意以下事实,返回SP存储区域405与空闲任务的CPU寄存器存储区域404重叠,这与图5所示的常规多任务系统不同。然后,在步骤S603中,处理中断的堆栈区域406的末端地址代替了SP,以便将该堆栈从任务堆栈转换为仅用于处理中断的堆栈。此时,要注意使用于任务的返回SP存储区域405不会被覆盖。最后,在步骤S504中,调用由应用程序定义的中断处理程序函数,以便在步骤S505中执行该应用程序的中断控制程序。该处理以函数返回的形式从步骤S505跳转到OS中断退出处理。该OS中断退出处理与图8以类似方式描述的过程相同。因此省略对其的详细描述。
这里,在任务运行过程中接收中断以便将处理通过OS中断退出处理从OS中断输入处理返回任务的步骤完全与图4所示的任务2的步骤相同。上述任务1可能不会被使用。也就是说,图4中所示任务1使用的堆栈区域311至314可以直接由堆栈区域321至324代替。
然而,在堆栈区域用于空闲堆栈时,情况有所不同。在常规多任务系统中,空闲任务使用的堆栈区域301至304可以直接由任务1的堆栈区域311至314代替。然而,在本发明中,由于图4所示用于处理中断的堆栈区域404、返回SP存储区域405和堆栈区域406设置为重叠,因此需要加以注意。现在将在下面特别描述运行空闲任务时接收中断的操作。
首先,当空闲任务运行时,SP指明一个在空闲任务堆栈区域401中的地址。空闲任务使用该区域处理程序(然而该区域有时无需出现,可以具有0字节)。在此状态下,当产生中断和CPU接收该中断时,鉴于硬件原因,PC和PSW的内容分别存储在PC存储区域402和PSW存储区域403中。在此,SP的值自动减去PC和PSW的大小。也就是说,如果PC和PSW分别具有4字节,为存储它们堆栈要消耗8字节。这相当于SP减去8字节。然后,CPU将PC的值移动到中断处理程序的第一地址上,以执行OS中断输入处理。OS处理输入过程在空闲任务运行期间接收中断时按照图6所示的流程图运行。
另一方面,OS中断退出处理和图8以相关方式描述的过程相同。然而,由于在步骤S803中复位的CPU寄存器的值已经被覆盖,因此需要注意以下事实,该值与在OS中断输入处理时存储的值不同。
图9为表示根据第一实施方式的空闲任务运行的流程图。如图9所示,安装第一实施方式中的空闲任务以便能由自无穷循环S901形成。因此,在图8所示的步骤S803中,即使除PC和PSW之外的所有CPU寄存器都被覆盖以确定中断处理中的值,空闲任务程序还是能在不使用CPU寄存器的条件下运行。因此,中断复位后不会出现任何问题。
图12表示根据本发明用于实现上述多任务系统的任务控制器。在任务控制器中,PC 1205指明当前执行程序的指令地址1209。该值通过总线控制单元(以下称为BCU)1212从外部存储器(ROM)1213获得指令数据1210。在指令执行控制部分1206中对指令数据1210进行解码,以便根据解码指令的类别确定任务控制器1200的整个操作。当指令数据是将数据记录到外部存储器的指令时,指令执行控制部分1206从CPU寄存器1201读取所需地址值,以便将该地址值传送到计算单元(以下称为ALU)1204。指令执行控制部分将操作数地址1207作为地址数据通过BCU 1212传送到外部存储器(RAM)中。指令执行控制部分同时读取CPU寄存器1201中的操作数数据1208,以便将该数据通过BCU 1212记录到外部存储器(RAM)1214中。任务控制器具有安装于其上的中断控制部分1211,并具有用于从外围设备函数1215接收中断请求、向指令执行控制部分1206通知中断请求以及终端当前执行程序的功能。
此外,任务控制器具有用于在中断处理时控制堆栈地址的SP差值常量1250。当运行一项任务期间产生中断时,SP 1202的值作为任务堆栈的地址通过操作数地址1207和BCU 1212提供给外部存储器(RAM)1214。在PC1205和PSW 1203的值存储在任务堆栈中之后,SP的值由这些值更新。随后,如图6的流程图所示,CPU寄存器的内容存储在任务堆栈中,以利用其内容更新SP的值。
然后,SP 1202的最终值存储在用于处理中断的堆栈的返回SP存储区域405中。对于OS中断输入处理程序或中断控制部分1211,空闲任务堆栈的CPU寄存器存储区域404的第一地址以前已经作为目标地址给出,用于处理中断的堆栈叠加在该地址上。对于SP差值常量1250,处理中断的堆栈的第一地址相对于空闲任务堆栈的CPU寄存器存储区域404的第一地址的地址差值已给出。
用于处理中断的堆栈所在的目标被重叠,也就是说,由OS中断输入处理程序或中断控制部分1211提供空闲任务堆栈的CPU寄存器存储区域的第一地址。在ALU 1204中计算第一地址和SP差值常量1250的值。所计算的值通过操作数地址1207和BCU 1212作为存储SP最终值的地址提供给外部存储器(RAM)1214。在此,在本实施方式中对SP差值常量1250赋予0。因此,允许用于处理中断的堆栈的返回SP存储区域405的第一地址与空闲任务堆栈的CPU寄存器存储区域的第一地址相对应。第一地址由部分SP存储区域更新,以设置到SP。由此,用于处理中断的堆栈可以用来提前中断处理。
如上所述,处理中断的堆栈与空闲任务的任务堆栈重叠,使得空闲任务的任务堆栈的未使用CPU寄存器存储区域可以被有效利用。
(第二实施方式)本发明第一实施方式中描述的多任务系统可以在包括图10中流程图所示的其它处理的空闲任务中实现,也可以在仅包括图9所示简单无限循环的空闲任务中实现。图10中,如步骤S1001所示,空闲任务程序执行将CPU的操作模式跳转到低功率消耗模式的处理。在此,当CPU跳转到低功率消耗模式之后,随后的指令直到接收了中断之后才执行。在中断请求进入CPU且低功率消耗模式被释放的时候,CPU返回普通操作模式,并执行图7中流程图所示的OS中断输入处理。
当CPU的操作模式跳转到低功率消耗模式时,r0寄存器作为一个CPU寄存器使用。在这种情况下,r0寄存器的值甚至需要在中断处理之前和之后都进行存储。
图11表示在该情况下利用空闲堆栈和处理中断的堆栈的方法。首先,当空闲任务运行时,SP为空闲任务指明堆栈区域1101。空闲任务利用该区域处理程序。当终端产生和CPU接收该中断时,上述程序利用r0寄存器,而鉴于硬件原因,PC和PSW的内容则分别存储在堆栈区域1102和1103中。此时,SP的值自动减去PC和PSW的大小。然后,CPU将PC值移动到中断处理程序的第一地址,以执行图7所示的OS中断输入处理。
在图7所示的OS中断输入处理中,在步骤S701,CPU寄存器的值首先存储在堆栈区域1107和1104中。在这种情况下,在步骤S701,r0寄存器的值需要存储在恰好位于PSW存储区域1103之上的r0寄存器存储区域1107中。其它CPU寄存器可以与顺序无关地存储在任何地方。然后,在步骤S702,SP的当前值存储在处理中断的堆栈区域末端1105。返回SP存储区域1105需要放置在r0寄存器存储区域1107未被覆盖的位置,这与第一实施方式不同。然而,返回SP存储器区域的位置要设置为重叠在在CPU寄存器存储区域1104上,以便存储除r0寄存器以外的其它CPU寄存器。在步骤S703,SP由处理中断的堆栈区域1106的末端地址代替,以便将堆栈从空闲任务堆栈转换到处理中断的堆栈区域1106。处理中断的堆栈区域1106重叠在上述CPU寄存器存储区域1104上。因此,存储在堆栈区域1104的CPU寄存器值以与第一实施方式相似的方式被覆盖。最后,在步骤S504,调用由应用程序定义的中断控制函数,以便在步骤S505中执行应用程序的中断控制程序。该处理从步骤S505以函数返回的形式跳转到图8所示的OS中断退出处理。
另一方面,OS中断退出处理与图8以相关方式描述的处理相同。然而,由于在步骤S803复位的CPU寄存器值除r0寄存器存储区域1107之外都已被覆盖,因此需要注意以下事实,该值不同于OS中断输入处理时存储的值。作为r0寄存器的值,将存储在r0寄存器存储区域1107中的正确值复位。当r0寄存器用于空闲任务时接收最初产生的中断。在空闲任务程序从中断中复位后,空闲任务程序可以利用r0寄存器的内容将CPU转换为低功率消耗模式。
在上述说明中,说明了在空闲任务运行期间产生中断时的OS中断输入处理。然而,由于处理中断的堆栈重叠在空闲任务堆栈上,在执行任意任务期间产生中断时,OS中断输入处理中都执行与第一实施方式中描述的相同处理。也就是说,其中产生中断的该任务的CPU寄存器内容存储在任务堆栈中,然后,SP 1202的最终值存储在处理中断的堆栈的返回SP存储区域1105中。
因此,处理中断的堆栈所在的目标位置被重叠,也就是说,空闲任务堆栈的CPU寄存器存储区域的第一地址由OS中断输入处理程序或中断控制部分1211提供。在ALU 1204中计算SP差值常量1250的第一地址和其值。所计算的值作为存储SP最终值的地址通过操作数地址1207和BCU1212提供给外部存储器(RAM)1214。在此,在本实施方式中,其中考虑了r0寄存器存储区域1107的并联部分的值作为地址差值提供给SP差值常量1205。因此,处理中断的堆栈的SP存储区域1105的第一地址可以在空闲任务堆栈中确定为r0寄存器存储区域1107的并联区域的下个地址。
如上所述,处理中断的堆栈重叠在空闲任务的任务堆栈上。因此,即使部分CPU寄存器用于空闲任务,也能有效利用空闲任务的任务堆栈的未使用的CPU寄存器存储区域。
(第三实施方式)第一实施方式和第二实施方式是通过注意空闲任务而描述的。然而,当确定无疑地识别出任务使用的CPU寄存器时,相同的方法可以应用于除空闲任务之外的普通任务。此外,任务使用的CPU寄存器不是静态确定的。即使在这种情况下,通过将信息保留在任务处理的变量等之中,第二实施方式中描述的方法也可以应用于数据可以被覆盖的CPU寄存器以及数据无需被覆盖的CPU寄存器。此外,当使用例如C语言的高级语言时,第二实施方式中描述的方法可以这样采用,即,编译器存储与变量形式的CPU寄存器或CPU上提供的SP差值信息存储寄存器相关的信息。
图13表示本发明用于实现上述多任务系统的任务控制器。本发明的任务控制器不同于第一实施方式和第二实施方式中的任务控制器,其不同点在于安装了SP差值信息存储寄存器1300。SP差值信息存储寄存器1300是任意使用的。在步骤S502中参照的任务运行时存储SP最终值的地址值可以事先由编译器计算,并存储在SP差值信息存储寄存器1300中。按照这种方式,在任意任务运行期间产生中断时,由ALU 1204计算在任务堆栈中的CPU寄存器存储区域的第一地址,其中该任务堆栈上重叠了处理中断的堆栈,且该第一地址事先提供给OS中断输入处理程序或中断控制部分1211,并且由ALU 1204计算SP差值信息存储寄存器1300的值,所计算的值作为地址通过操作数地址1207和BCU 1212提供给外部存储器(RAM)1214。由此,当其中产生中断的任务的CPU寄存器内容存储在任务堆栈中之后,SP 1202的最终值可以作为操作数1208记录在外部存储器(RAM)1214中。也就是说,处理中断的堆栈的起始地址可以由编译器等改变设置到SP差值信息存储寄存器1300的任意值。应当理解,除编译器之外的例如普通应用程序的程序可以将该值设置到SP差值信息存储寄存器1300。硬件可以将该值设置到SP差值信息存储寄存器1300。作为设置模式,可以采用多种方法而不背离本发明的原则。
在上述实施方式中,说明了PC和PSW的值存储在任务堆栈上的例子。然而,运行任务期间的寄存器组和用于处理中断的寄存器组可以根据CPU的种类而分开安装。在这种CPU中,当接收到中断时,PC和PSW的值没有存储在任务堆栈上,而是可以复制到位于仅用于处理中断的寄存器组内的存储区域中。在这种情况下,鉴于硬件原因,将存储在仅用于处理中断的寄存器组中的PC和PSW值存储到任务堆栈上,从而获得与上述实施方式相同的效果。
根据本发明的多任务系统中的存储器管理系统和任务控制器以双重方式利用使用实时OS的系统的任务堆栈区域和中断堆栈区域。因此,在整个系统中可以减小存储器的可利用量。由此,多任务系统能以小容量存储器有利地运行。当执行软件(具体地说是多任务系统)的堆栈存储器的管理方法时,该系统作为减小堆栈存储器可利用量的程序结构将非常有效。
权利要求
1.一种用于管理多任务系统堆栈的方法,包括下列步骤根据中断的产生,将CPU的内部信息存储在一个被中断任务的任务堆栈中作为第一区域;在存储所述内部信息之后,将堆栈指针的值存储在中断处理堆栈的指定第一位置;将所述堆栈指针设置到所述中断处理堆栈的指定第二位置;以及开始中断处理,其中,所述中断处理堆栈的指定第二位置对应于特定任务的堆栈区域中的所述第一区域的指定位置。
2.如权利要求1所述的管理堆栈的方法,其中,所述第一区域包括用于存储从中断处理返回控制所需的任务控制信息的第二区域;和直接设置在该第二区域之后的第三区域,以便存储除所述任务控制信息之外的CPU内部信息,以及在所述特定任务的任务堆栈的第一区域中的指定位置对应于所述第一区域中第三区域的顶端地址。
3.如权利要求1所述的管理堆栈方法,其中,所述中断处理堆栈的指定第一位置是所述中断处理堆栈的顶端地址。
4.如权利要求1所述的管理堆栈方法,其中,所述中断处理堆栈的指定第二位置直接位于所述中断处理堆栈的指定第一位置之后。
5.如权利要求1所述的管理堆栈方法,其中,所述第一区域包括用于存储从中断处理返回控制所需的任务控制信息的第二区域;和直接位于该第二区域之后的第三区域,以便存储除所述任务控制信息之外的CPU内部信息,以及在所述特定任务的任务堆栈的第一区域中的指定位置是通过将第一区域中所述第三区域的顶端地址通过指定的地址差值的校正获得的。
6.如权利要求5所述的管理堆栈方法,其中,所述地址差值是用于指定存储在所述特定任务中使用的CPU内部信息所需的区域。
7.如权利要求5所述的管理堆栈方法,其中,所述地址差值事先给定为一常量。
8.如权利要求5所述的管理堆栈方法,其中,所述地址差值通过执行所述特定任务来设置。
9.如权利要求2所述的管理堆栈方法,其中,所述任务控制信息包括至少一个程序计数器和一个指示CPU状态的程序状态字(PSW)。
10.如权利要求1所述的管理堆栈方法,其中,所述特定任务是无需使用CPU内部信息而自循环的空闲任务。
11.如权利要求1所述的管理堆栈方法,其中,所述特定任务是用于控制跳转和返回到低功率消耗模式的任务。
12.如权利要求2所述的管理堆栈方法,其中,没有信息存储在所述第二区域,位于指定范围内的所述CPU任务控制信息和内部信息没有存储在被中断的所述任务的任务堆栈中,而是存储在不同于所述任务堆栈的存储区域中,除位于所述指定范围内的CPU内部信息之外的CPU内部信息存放在所述第三区域。
13.一种多任务系统的堆栈控制器,在该系统中根据中断的产生将CPU内的信息存储在被中断的任务的任务堆栈中,以便具有第一区域,在所述第一区域中进行存储之后的堆栈指针值被存储在中断处理堆栈的指定第一位置,所述堆栈指针设置到该中断处理堆栈的指定第二位置以便开始中断处理,其中,控制机制这样提供中断处理堆栈的顶端地址允许对应于在特定任务的任务堆栈的第一区域中的指定位置。
14.如权利要求13所述的堆栈控制器,其中,所述第一区域包括用于存储从中断处理返回控制所需的任务控制信息的第二区域;和直接位于该第二区域之后的第三区域,以存储除所述任务控制信息之外的CPU内部信息,以及所述特定任务的任务堆栈的第一区域中的指定位置对应于所述第一区域中的第三区域的第一地址。
15.如权利要求13所述的堆栈控制器,其中,所述第一区域包括用于存储从中断处理返回控制所需的任务控制信息的第二区域;和直接位于该第二区域之后的第三区域,以存储除所述任务控制信息之外的CPU内部信息,以及在所述特定任务的任务堆栈的第一区域中的指定位置是通过将第一区域中所述第三区域的第一地址通过指定的地址差值的校正获得的。
16.如权利要求15所述的堆栈控制器,其中,所述地址差值保存在地址差值存储单元中,该单元表示存储所述特定任务中使用的CPU信息所需的区域。
17.如权利要求15所述的堆栈控制器,其中,所述地址差值事先给定为一常量。
18.如权利要求15所述的管理堆栈方法,其中,所述地址差值通过执行所述特定任务来设置。
19.一种用在根据权利要求5至8中任一项的方法中或在以根据权利要求15至18中任一项的堆栈控制器中的、用于自动形成地址差值的编译器。
全文摘要
当在空闲任务运行期间产生中断时,在将CPU寄存器的值存储在当前堆栈区域中之后,该当前堆栈区域转换为仅用于处理中断的堆栈区域。此时,堆栈具有将堆栈区域重叠在仅用于处理中断的堆栈区域之上的结构。当空闲处理期间产生中断时,使用处理中断的堆栈,以便覆盖其中存储CPU寄存器值的区域。因此,通过一般的使用中断处理中使用的堆栈来减小RAM的使用量,其中在多任务系统中将堆栈用于空闲处理。
文档编号G06F9/48GK1584840SQ200410005428
公开日2005年2月23日 申请日期2004年2月18日 优先权日2003年7月30日
发明者小玉将义, 小林圭太 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1