本发明一般涉及多任务处理控制器,它包含用于通过分时处理各含一系列指令的多个任务的微处理器,用于存储多个所述任务的任务存储装置,比如ROM,以及用于存储所述微处理器产生和使用的多种数据的数据存储装置,例如RAM。该多任务处理控制器适于用在钟表领域中,下文中对应列举的实际应用来公开本发明将是方便的。然而,可以理解的是本发明并不限于该应用。 在钟表领域的许多应用是基于含有一系列顺序指令的任务。通常用微计算机来执行这种任务以此形成具备其要求功能的手表。现有微计算机包含用于存储待执行的每一个任务的指令地只读存储器或ROM,用于实现执行这些指令所需的操作的微处理器,以及用于存储该微处理器形成和使用的多种数据的随机存取存储器或RAM。值得注意地该微处理器包含用于执行算术和逻辑运算的算术一逻辑单元或ALU和用于存储这些运算的结果的一系列寄存器。控制、数据和地址总线连接该微处理器、ROM、RAM和I/O接口以允许这些设备与外部设备之间的通信。
利用微计算机来实现这些任务常常由于若干严格限制的存在而难于达到。微计算机不仅必须实时执行这些任务中的每一个。而且必须迅速响应内部产生或来自用户的信号。理想地,还应以功耗尽可能少的方式构造和执行这些任务。
手表设计者面临的另一挑战是用要求顺序执行一系列指令的任务来重现需同时发生的多种手表功能的操作。例如,可要求手表上的按钮动作的同时使步进电机工作,而同时又使位置测定器旋转。
为了解决该问题,已设计某些手表利用微计算机借助于多任务或分时处理技术同时执行若干个任务。在多任务处理中,允许ROM中必须执行的每一任务的部分依次运用微处理器。所执行任务快速循环使得用户看来每一任务正连续地并与其它任务同时地执行着。
常规上是借助于称之为调度程序部件的软件机构来实现由微处理器同时执行任务。这种机构以存储在ROM中的一系列指令实现,并管理上述由微处理器执行的多种任务的顺序。
虽然在计算机产业中其它地方普遍利用这种实施方式,但其不适于用在钟表领域中。由调度程度部件引入额外指令的负担使微处理器执行的任务的有效规模增大,并同时使其在速度和功耗方面的性能降低。
为了使在任务管理中必须执行的附加指令所导致的处理速度上的降低到最小,通常是使由微处理器依次执行的任务部分的大小为若干个指令长,以使任务尽可能少地发生变化。然而,这减少了表对用户输入及其它对任务初始化的请求的反应时间,这些输入和请求只能在另一任务的若干指令已执行之后起作用。
而且,由微处理器完成对许多任务的执行还要求执行该任务内指令的一个或多个子程序。当从现有多任务处理控制器中的一任务内启动子程序时,需要有附加指令,这样在执行子程序之后,可首先将表明任务以后将重新开始的指令的地址的程序计数器的值存储在RAM中。还可要求将累加寄存器和变址寄存器中的值加以存储。实现这些数据传输操作所需的额外指令进一步增大了微处理器所执行的任务的有效规模,并降低其运行速度和功率损耗。
本发明的目的是提供一种减少或克服了现有技术的缺点的多任务处理控制器。
考虑该目的,本发明提供一种包含用于存储多达N个各含有一系列指令的任务的任务存储装置,用于通过分时来处理所述N个任务的微处理器以及用于存储所述微处理器产生和运用的多种数据的数据存储装置的多任务处理控制器,其特征在于:所述微处理器还包含从硬件上实现用来以所述进程控制所述微处理器的运用的调度程序,以及用于存储各为所述调度部件所用的N个程序计数器的程序计数器存储装置,以控制所述N个进程中各个指令序列,以便所述调度程序能够在所述微处理器处理的任务改变时选择不同的一个所述程序计数器,而无需从所述数据存储装置传输数据。
为每一任务配备单独的程序计数器并以硬件实现调度程序使得能够更有效地管理由微处理器所处理的任务,允许程序计数器变化而不要求数据存储装置来回传输数据,由此减少存储在ROM中的指令数。避免了在任务管理期间执行多个附加指令的需要,因此降低了控制器的功耗,增加了执行任务的速度并减小了微处理器所处理部分的大小。所执行的任务还可更快地循环,由此改进控制器的响应时间。
有益地,多任务处理控制器还包含用于每一任务存储各累加值的分立的累加值存储装置,因此微处理器能够在所述微处理器处理的任务改变时选择不同的一个所述累加值,而不需要从所述数据存储装置传输数据。
该多任务处理控制器还可包括用于存储每个任务的各个变址值的变址值存储装置,这样当所述微处理器处理的任务改变时所述微处理器能够选择不同的一个所述变址值,而无需要求从所述数据存储装置传输数据。
在本发明的另一实施例中,微处理器是可构造的,以便依次处理X个所述任务中每一个的部分,其中1<X<N,剩余的N-X个任务中的一个或多个的程序计数器为所述微处理器所用以控制自所述X个任务之内调用的子程序的指令序列。
因此,当请求加以处理的任务数少于微处理器可处理的最大任务数时,剩下未用进程中一个或多个进程的程序计数器可以被使用以跟踪从一个任务内部调用的子程序的指令序列。因此重调用子程序时所用的程序计数器在已执行了子程序时仍保持使用。本发明调度部件的利用致使调用子程序时所需的数据传输以及完成该数据传输所需的附加指令数最小。如上所述,这降低了控制器的功耗,增加了其响应时间并达到更有效地管理其任务。
以下的描述更详细地涉及本发明多任务处理控制器的各种特征。为便于理解本发明,参照以图示出多任务处理控制器的最佳实施例的附图来描述本发明。可以理解本发明的多任务处理控制器并不受限于附图中所示出的最佳实施例。
附图中:
图1是表示本发明多任务处理控制器一个实施例的操作原理的示意图;
图2是表示图1多任务处理控制器所处理的进程的管理的示意图;
图3是表示图1控制器相对不同级别子程序的任务结构的示意图;
图4是表示图1控制器对图3示出的子程序的管理的示意图;以及
图5是表示安排内部和外部事件程序并用来请求由图1控制器所执行的进程的启动的示意图。
现在参见图1,该图总体示出了多任务处理控制器1,控制器1主要含有ROM2,指令寄存器/解码器3,资源组4,事件存储单元5,任务管单元6和用于存储四个程序计数器Pc0,Pc1,Pc2和Pc3中每个的各寄存器。ROM2存储控制器1用来实现所需功能的达四个任务的指令序列。这些任务中每一任务分别用一个程序计数器Pc0,Pc1,Pc2和Pc3以跟踪其指令序列。由此利用每个程序计数器指向包含待执行的任务内下一指令的ROM中的存储器单元。将会理解虽然在该实施例中使用了四个任务和四个相应的程序计数器,但在本发明的其它实施例中可利用任何数量的任务和相应的程序计数器。
包含在ROM2中的每一任务可由控制器1的外围设备发送的外部事件信号启动或由控制器1内部发送的内部事件信号启动。可将许多这样的信号提供给钟表应用中所采用的多任务处理控制器。这些事件信号被送至成组对它们进行处理的事件存储单元5。尽管在其它实施例中提供另一数目的分组,该分组的数目可对应于存储在ROM2中的任务数。一旦从特定组收到任务事件信号,事件存储单元5发送事件组信号到任务管理单元6。
任务管理单元6包含调度部件7、事件路由器8和两个堆栈指钟9和10。事件路由器8接收从事件存储单元5发送的每一事件组信号并产生任务请求信号以请求ROM2中存储的任务之一启动。事件路由器8可为可构造的,以便能够选择由每一任务请求信号请求启动的任务。
调度部件7接收事件路由器8送出的任务请求信号并管理请求的每一任务的执行。由控制器1根据调度部件7指明的任务依次处理每一激活任务(即已请求启动的任务)的部分。当执行每一任务时,用其程序计数器跟踪在ROM2中哪一指令被执行。当一部分第一任务已执行时,调度部件7通过使用第二任务的程序计数器指出下一有待处理的指令而使部分第二任务被加以处理。由于第一任务有其自己的程序计数器,可容易地使每一任务的执行暂停然后在正确的指令重新开始。
尤其,每一程序计数器的值在每次刚执行完其相对应的任务的一部分时不必传输到并存储在控制器1中别处的数据寄存器中,而每次要执行其任务的新一部分时也不必传回到并存储在公共程序计数器中。有益地,这使得控制器1执行的一个或多个任务部分仅为一个指令长,以便使控制器1的响应时间最短。
如后文将解释的,可利用一个或多个程序计数器启动某一任务之内的子程序。当调用子程序时,当前使用的程序计数器被保存,以便在执行了该子程序后可以执行后面的指令。堆栈指针9和10用来指出启动子程序时未用的程序计数器,然后用该程序计数器跟踪该子程序中的指令序列。因此调用子程序时所用的程序计数器被保存以便跟踪在执行了子程序后将继续的指令序列。
资源组4包含算术逻辑单元或ALU11,随机存取存储器或RAM12,累加器组13和变址寄存器组14。该后一组寄存器仅在控制器1所执行的任务运用变址寻址时需要。
ALU11和RAM12是共享资源,并可由控制器执行的所有任务进行访问。从下述方式用信号来控制对控制器1的共享资源的访问。当一任务使用共享资源时,所选数据寄存器中一经被置为忙。当该任务已结束使用共享资源时,该位被置为空闲。所有想访问共享资源的任务测试该位的状态,若该位已被较早任务置为忙,后面的任务必须等等直到该位被置为空闲。
累加寄存器组13由四个累加器13a,13b,13c及13d组成,而变址寄存器组14由四个变址寄存器14a、14b、14c和14d组成。与程序计数器Pc0至Pc3一起,累加器13a至13d和变址寄存器14a至14d包含不能在多个任务之间共享但仅在给定应用中可为一特定任务所用的控制器1内的资源。
当控制器1执行当前任务时,为该进程所用的程序计数器指向的指令由ROM2传送给指令寄存器/解码器3。在此,对指令加以检验并将其位转换为控制器1的ALU11,数据缓冲器,地址缓冲器、定时电路及各种寄存器所知的语言。
ALU11接收来自指令寄存器/解码器3的已解码的指令,并进行执行该指令所需的算术或逻辑运算。与当前任务相关的累加器提供数据给ALU11,以便进行这些算术或逻辑运算。然后这些运算的结果返回到该累加器。RAM12用来存储在这些运算过程中所产生和使用的数据。
与正由控制器1执行的任务相关联的变址寄存器用于存储正在执行的任务所用的地址作为偏移值。该偏移值增大指定地址以便指向控制器1中存储ALU11的所需操作数或其它所需数据的另一地址。
为控制器1所执行的每个任务配备单独的累加器和在必要时配备单独的变址寄存器使每个激活任务能够当任务在控制器1内循环时使用并保持其自己的累加值和变址值,而无需来回由RAM12传输数据。
如前文所指出的,当控制器1内出现所选内部事件时,指令寄存器/解码器3还提供信号给事件存储单元5。
调度部件7以与ROM2和RAM12分离的硬设备形式实现,这样可达到任务的改变而无需传输在程序计数器的存储和二次调用操作中涉及的数据。RAM12中每个任务的累加值和变址值。诸如硬件有限状态机、可编程逻辑阵列、分离ROM或其它类似设备一类的硬件设备可用来实现调度部件7。
现在更详细地说明控制器1对存储在ROM2中的任务的管理。图2示意性地示出图1的事件存储单元5、事件路由器8和调度程序部件7。可由控制器1执行的N个任务标为P0、P1、P2和P3。调度程序部件7按照循环优先方案依次执行每个激活任务的指令。因此,如果四个任务中的每一任务都是激活的,调度程序部件7顺序执行每任务的一个指令。但是,如果仅一个任务是激活的,调度程序部件7顺序执行该任务的指令而无任何延迟,并在该方式下作为单处理器工作。
任务P0,P1,P2及P3各由分别标为PE0、PE1、PE2和PE3的双稳进程启动开关连接到事件路由器8。当从事件路由器8收到请求启动相应任务的信号时,执行每个任务。任务启动开关PE0、PE1、PE2和PE3根据它们的开或关状态允许或阻止任务P0、P1、P2及P3分别接收任务请求信号Req0、Req1、Req2和Req3。在一定条件下,最好通过将一个或多个任务启动开关设置为开状态防止任务请求信号对调度程序部件7的访问。例如,可利用该便利使一个任务(例如,时间调节功能)能够暂时挂起一个或多个其它任务(例如秒针的运动)。该任务启动开关可以作为任务管理单元6中数据寄存器内的可单独设置位实现。
图3代表N个任务P0,P1,P2及P3的每一个可为控制1所用的多种方式中的数种方式。在a)情况下,仅任务P0是激活的。如以下将说明的,在该构造中任务P1、P2及P3的非共享资源可用于在任务P0内建立子程序级别。
在b)情况下,任务P0和P3是激活的。剩下两进程的非共享资源在该情况下可用来建立子程序级别,也可在任务P0和P3之间以三种不同方式共享。首先,每个两任务P1和P2的非共享资源可用于从任务P0之内调用子程序,而任务P3则没有其可采用的子程序级别。第二,每个两任务P1和P2的非共享资源可用于从进程P3调用子程序,而进程P0则没有可用于此的子程序级别。最后,每个两个激活进程P0和P3可利用剩下两进程中不同一个的非共享资源调用单个子程序级。
在c)情况下,三个任务是激活的,剩下一个任务的非共享资源可用于任一个激活任务P0或P3对子程序的调用。在d)情况下,四个任务P0,P1,P2和P3都是激活的,无非共享资源可用在对子程序的调用中。
下面参照图4进一步说明对各任务的管理,图4示出了调度程序部件7,堆栈指针9和10,任务P0,P1,P2和P3及分别与它们相连的程序计数器Pc0,Pc1,Pc2和Pc3。控制器1适于执行分支控制指令,例如指令调用(CALL)和返回(RETURN),它们可在构成四个任务P0,P1,P2或P3每个的指令序列中出现。
在图4中a)所示出的本发明实施例中,有可能仅从任务P0调用子程序。构造控制器1使堆栈指针9属于任务P0。在这种布局中,若有任务P1,P2和P3的各非共享资源,可用来调用任务P0之内的子程序。构造控制器1以便仅能够将任务启动开关PEO置于关闭状态,由此仅任务请求信号Req0能够引起任务的运行。
因此,在该实例中调度程序部件7总是指向任务P0。在初始化时,堆栈指针9被置为指向存储程序计数器Pc0的地址。执行诸如调用(CALL)指令一类的分支控制指令致使存储在ROM2中的一系列指令从任务P0内作为子程序启动。如本领域技术人员会理解的,诸如调用指令一类的分支控制旨令包括待启动子程序的起始地址。当在这样的任务中启动子程序时,首先增大启动子程序时的地址,以指出跟随分支控制指令的返回地址,当子程序已结束时任务将在该返回地址再继续。然后调节堆栈指针9的值指向未使用的程序计数器(Pc1,Pc2或Pc3)之一。在执行程序期间,该以前未用的程序计数器跟踪该子程序中执行的指令。当完成了子程序的执行时,再次将堆栈指针9调节到指向程序计数器Pc0并继续执行该任务。
如果利用一级以上的子程序,每次启动新子程序时将堆栈指针9的值调节到指向未使用的程序计数器。以该方式,控制器1适于从任务内部启动子程序而无需在RAM12中的数据堆栈上存储返回地址。
程序计数器Pc0,Pc1,Pc2和Pc3最好具有顺序地址,这样堆栈指针9能够简单地在存储返回地址时增长而在完成了子程序的执行时减小。
虽然图4中a)示出了可从任务P0内利用控制器1的所有非共享资源的设置,但可根据实际应用以不同方式构造控制器1。如图3所示,任务P0可运用三、二、一或无其它子程序级。在每种情况下,堆栈指针9仅适于用在与该构造中分配给任务P0的非共享资源一起时。例如,在任务P0利用任务P1的非共享资源定义子程序级的构造中,堆栈指针9仅可与进程P1的程序计数器一起使用。
在图4b)中所示的本发明实施例中,安排控制器1使堆栈指针10适于用在任务P3内。在该配置中,堆栈指针10可用于指向在这样的任务中使用的无论哪个程序计数器Pc2,Pc1和Pc0。可以看出当任务P0和P3各具有一个子程序级时,将同时用到堆栈指针9和10。
虽然已仅相对任务P0和P3描述了堆栈指针9和10,在其它实施例中,一个或这两个堆栈指针可与其它任务相关联。类似地,控制器1的其它实施例可包含与任务P1和/或P2相关联的附加堆栈指针,因此任何数量的任务P0,P1,P2或P3可利用其它剩余任务的非共享资源,若这些资源适用,即可用来调用子程序。
如本领域技术人员将会理解的,通过建立重复上述分支控制指令功能的一系列指令,无限数量的子程序和子程序级可同时归于每个任务P0,P1,P2和P3。
返回图2,现在描述控制器1接收的内部和外部事件的管理及适当的任务请求信号的产生。可以指向事件存储单元5的事件分为标着gr0,gr1,gr2及gr3的四组。控制器1用这些事件开始其不同任务的处理。六个事件与这些事件组中每组相关联,其中四个为内部事件两个为外部事件。对这些事件组中每一组而言,其六个事件在事件存储单元5中从“或”(OR)功能求和,以便产生事件组信号。因此,特定事件组的六个事件到达任何一个都会致使事件存储单元5产生相应于该事件组的事件组信号。
这样产生的每一事件组信号送至事件路由器8,根据事件路由器8的构造,其产生相应于任务P0,P1,P2或P3之一的任务请求信号。每一任务请求信号可具有表示指向特定任务的一个或多个任务存在的激活状态,或者表示设有指向该任务的事件存在的非激活状态。
当不存在与特定任务请求信号相关的事件时,使对应那个的任务不激活是可能的。因此中断控制器1执行该任务。当所有的任务请求信号为非激活的因此无任务处于执行状态时,控制器1进入休眠状态,其功耗为准零。然而,当存在一个或多个事件时,不能使相应的任务请求信号成为不激活的。
图5描绘出事件路由器8提供的各种结构模式。在本举例应用中,5个这种模式是可能的。在模式0,如图5中a)所示,所有事件组信号及至所有事件指向任务P0。这样多任务处理控制器1用作单一处理器,顺序地执行任务P0的指令。事件存储单元5中的事件不能请求执行任务P1,P2和P3,由此释放这些任务的各非共享资源以能够从控制器1执行的单个任务内调用子程序。
在模式1中,如图5中b)所示,来自事件组gr0,gr1和gr2的事件组信号指向任务P0,而来自事件组gr3的事件组信号指向任务P3。任务P1和P2的大量共享资源适用于从任务P0和P3内调用2程序。如图5中c)所示,在模式2中,任务P0和P3分别接收事件组gr0和gr1及事件组gr2和gr3的事件组信号产生的任务请求信号。而且,任务P1和P2的非共享资源也适用于从任务P0和P3内调用子程序。
在模式3中,如图5中d)所示,事件组gr0和gr1的事件组信号指向任务P0,而来自事件组gr2的事件组信号仅指向任务P2,来自事件组gr3的事件组信号仅指向任务P3。仅任务P1的非共享资源可用于调用子程序。最后,在模式4中如e)所示,各任务P0,P1,P2和P3分别从事件组gr0,gr1,gr2和gr3接收事件组信号。这样控制器1的用户可选择最好对应特定应用的事件路由选择模式。
最后,可以理解对本发明的多任务处理控制器可作出各种改型和/或附加物而不偏离所附权利要求书所定义的本发明范围。