控制装置、集成电路及任务栈的管理方法与流程

文档序号:11917465阅读:197来源:国知局
控制装置、集成电路及任务栈的管理方法与流程

本发明涉及嵌入式技术领域,特别是涉及一种控制装置、集成电路及任务栈的管理方法。



背景技术:

目前嵌入式系统,尤其是运行固件的嵌入式系统,通常搭配主系统实现特定或单一性的功能,同时要具备低功耗、低成本等特点,这类嵌入式系统通常用于运行较为简单的OS(Operating System,操作系统)。

随着实用需求的发展,例如智能手机或者穿戴式设备的发展需求,越来越需要嵌入式系统能够独立运作,实现完整的功能,比如GPS定位解算,步态识别等等,以使主系统尽可能处于休眠状态。

因此,嵌入式系统需要具备一定运行通用软体的能力,在运行这些通用软体时,需要将局部变量存储到内部存储器中的stack,但是由于内部存储器本身就比较小,stack的尺寸也比较小(比如4kb),而且不能超过预先定义的范围,所以会出现在运行某个通用软体时,stack不够用而溢出的情况。

为了解决这个问题,一些已有技术直接扩充了内部存储器的容量,但是如果初始化stack的程序代码已经固化在ROM中,所以即使扩充了内部存储器的容量也无法再加大stack的尺寸,而且由于扩充了内部存储器的容量会导致嵌入式系统的成本大大增加。



技术实现要素:

本发明主要解决的技术问题是提供一种控制装置、集成电路及任务栈的管理方法,能够解决成本增加的问题。

本发明一方面提供一种任务栈的管理方法,包括:获得运行任务的 指令,所述任务包括第一功能;在运行所述第一功能之前,将内部存储器中栈的指针由指向内部存储器更改为指向外部存储器,其中,所述内部存储器中所述栈是所述任务所使用的栈;运行所述第一功能,其中,运行所述第一功能期间需要存储的临时存储信息被存储在所述栈的指针所指向的外部存储器;其中,所述临时存储信息包括局部变量;以及运行所述第一功能结束后,将所述栈的指针指向所述内部存储器。

本发明另一方面提供一种集成电路,包括微控制器;所述微控制器包括:内部存储器和处理模块;所述处理模块用于获得执行任务的指令,所述任务包括第一功能;在运行所述第一功能之前,将所述微控制器的内部存储器中栈的指针由指向内部存储器更改为指向外部存储器;运行所述第一功能,输出运行所述第一功能期间需要存储的临时存储信息,其中,所述临时存储信息被存储在所述栈的指针所指向的外部存储器;运行所述第一功能结束后,将所述栈的指针指向所述内部存储器;所述内部存储器,包括多个栈,该微控制器上并行运行的多个任务中每个任务分别使用各自的栈。

本发明另一方面提供一种控制装置,包括:上述集成电路和外部存储器,其中所述外部存储器用于存储运行所述第一功能期间需要存储的临时存储信息。

本发明又一方面提供一种控制装置,包括:获取模块,用于获得运行任务的指令,所述任务包括第一功能;第一修改模块,用于在运行所述第一功能之前,将内部存储器中栈的指针由指向内部存储器更改为指向外部存储器,其中,所述内部存储器中所述栈是所述任务所使用的栈;运行模块,用于运行所述第一功能,其中,运行所述第一功能期间需要存储的临时存储信息被存储在所述栈的指针所指向的外部存储器;其中,所述临时存储信息包括局部变量;第二修改模块,用于在运行所述第一功能结束后,将所述栈的指针指向所述内部存储器。

本发明的有益效果是:本发明通过在运行第一功能之前,将内部存储器中栈的指针由指向内部存储器更改为指向外部存储器,将运行第一功能期间需要存储的临时存储信息存储在外部存储器,在运行第一功能 结束后,将栈的指针指向内部存储器,无需调整stack的大小,也无需直接扩充内部存储器的容量,降低了成本。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。其中:

图1是本发明第一实施例的任务栈的管理方法的流程图;

图2是图1中任务与相应的栈的大小的示意图;

图3是图1中任务栈的指针在内部存储器和外部存储器之间切换的示意图;

图4A是本发明第二实施例的任务栈的管理方法的流程图;

图4B本发明第二实施例的任务栈的管理方法中任务栈的指针在内部存储器和外部存储器之间切换的示意图;

图5是本发明第三实施例的任务栈的管理方法的流程图;

图6是本发明第四实施例的任务栈的管理方法中任务栈的指针在内部存储器和外部存储器之间切换的示意图;

图7是本发明微控制器的结构示意图;

图8是本发明提供的集成电路的结构图;

图9是本发明提供的控制装置的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性的劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参见图1所示,图1是本发明第一实施例的任务栈的管理方法的流程图。如图1所示,本实施例所揭示的任务栈的管理方法可以应用于 嵌入式系统,该方法可以由微控制器MCU执行,包括以下步骤:

S101:获得运行任务的指令,所述任务包括第一功能。

其中,MCU的操作系统OS上可以同时运行多个任务,每个任务分别使用各自对应的栈stack来存储运行任务时所需要存储的临时存储信息,其中,stack是指内部存储器被划分出的部分内存区域,其中stack的物理地址可以相邻,也可以不相邻;stack在使用时不能超出预定义的大小,如图2所示,假定3个stack预定义的大小分别为2KB、3KB以及4KB。例如,任务task1使用大小为2KB的stack存放数据,在运行任务task1时,最多只能在该stack存储2KB大小的临时存储信息。假如运行任务task1时所需要存储的临时存储信息为3KB,即超过预定义的2KB大小,就会导致stack溢出,可能导致其他关键的数据被踩坏。

临时存储信息可包括:运行功能时所产生的局部变量,该临时存储信息还可以包括功能的输入参数和返回值。其中,第一功能可以是一个函数,当该函数的参数超过一定数量(通常为4)或者该函数采用可变阐参数时,传入第一功能的参数就可能被放置于外部存储器上;当函数返回时,一般函数只有一个直接的返回值(返回值的大小<=一个register存储空间的大小)或者没有返回值,如果只有一个直接的返回值,该返回值都是存放在MCU的generic register0,不会占用stack。而如果函数的返回值是结构体(返回值的小大>一个register的大小),这种情况返回值就可能放在stack或者外部存储器上。

在本发明的实施例中,获得运行任务的指令具体可以采用如下几种方式:第一种:主机host接收到用户请求执行任务的指令,主机将第一任务的code加载到MCU中,主机向MCU发送执行该任务的指令,也就是说,MCU从主机接收运行任务的指令。第二种:MCU通过外挂的输入设备接收用户触发的运行任务的指令。第三种:MCU连接到网络上,用户在远端发出运行任务的指令,MCU接收该运行任务的指令。第四种:预先设定达到预定时间就执行该任务,定时器在该预定时间到达时发出触发命令,则此时获得运行任务的指令是指接收到定时器发出的触发命令。

S102:在运行第一功能之前,将内部存储器中栈的指针由指向内部存储器更改为指向外部存储器,其中,所述栈是任务所使用的栈。

其中,在该实施例以及后续实施例中,操作者可以预先评估需要多大的存储空间来存储该第一功能运行期间需要存储的临时存储信息,如果需要的存储空间比较大,超过了预定义的stack的大小,则在该第一功能之前加入一段code,该段code指示将stack的指针由指向内部存储器更改为指向外部存储器;

或者,MCU可以根据要运行的功能来动态确定需要多大的存储空间来存储该功能运行期间需要存储的临时存储信息,如果运行第一功能所需要的存储空间比较大,超过了预定义的stack的大小,则将stack的指针由指向内部存储器更改为指向外部存储器。

其中,栈的指针指向内部存储器具体可以是指向内部存储器的某个地址,操作系统(OS)在初始化stack时确定了stack指针的初始地址,即stack指针初始指向的内部存储器的地址,该步骤中如果第一功能是该任务中第一个功能,那么此处所说的stack指针指向内部存储器就是指stack指针初始指向的内部存储器的地址;如果第一功能不是该任务中第一个功能,那么此处所说的stack指针指向内部存储器就是指stack指针当前所指向的内部存储器地址。其中,将内部存储器中stack的指针指向外部存储器具体可以是将stack的指针指向外部存储器的某个具体地址,这个地址可以是预先设定的,也可以是MCU向主机申请的。可选的,将内部存储器中stack的指针指向外部存储器也可以不需要指向外部存储器的某个具体地址,而是仅仅指向外部存储器。

S103:运行第一功能,其中,运行第一功能期间需要存储的临时存储信息被存储在外部存储器。

比如将运行第一功能期间所产生的局部变量、功能的输入参数和/或返回值存储在外部存储器。

S104:运行第一功能结束后,将栈的指针指向内部存储器。

在该步骤中,将任务所使用的stack的指针指向内部存储器,使得执行该任务后续功能时所需要存储的临时存储信息可以存储在相应的 stack中,并且可以释放临时存储信息在外部存储器所占用的空间。

需要说明的是,如果第一功能是函数,如果该函数的输入参数超过一定数量,那么这些参数可能被放置于外部存储器上,供第一功能取用;如果函数的返回值是结构体structure,由于返回的结构体是位于外部存储器上,则在释放临时存储信息在外部存储器所占用的空间之前,需要将返回的结构体structure从外部存储器拷贝至内部存储器的stack中,然后再将stack的指针指向内部存储器。如果函数的返回值只有一个直接的返回值(返回值的大小<=一个register的存储空间大小),则该返回值被直接存放在MCU的某个generic register(通常是generic register0),不会存放在stack和外部存储器中。

以下以任务task1和任务task2为例进行详细说明:

如图3所示,任务task1所使用的stack为内部存储器31中stack1,任务task2所使用的stack为内部存储器31中stack2。任务task2包括第一功能,在运行任务task1之后,将内部存储器31中栈stack2的指针由指向内部存储器31更改为指向外部存储器32;运行任务task2的第一功能,运行第一功能期间需要存储的临时存储信息被存储在外部存储器32;在运行任务task2的第一功能结束后,将栈stack2的指针指向内部存储器31,释放临时存储信息在外部存储器32所占用的空间。

本实施例通过在运行第一功能之前,将内部存储器中栈的指针由指向内部存储器更改为指向外部存储器,运行第一功能期间需要存储的临时存储信息被存储在外部存储器,因此无需更改stack大小,也无需扩充内部存储器的容量,降低了成本。

本发明还提供第二实施例的任务栈的管理方法,其在第一实施例所揭示的任务栈的管理方法的基础上进行描述。如图4A所示,该方法具体包括:

S401、MCU从主机加载任务的code,其中任务包括第二功能,第二功能调用第一功能。

其中,第二功能可以是管理功能,第一功能可以是待执行的具体功能,比如GPS定位功能等。

S402、主机将运行任务的指令发送给MCU,MCU接收运行任务的指令。

S403、MCU运行第二功能中位于调用第一功能之前的代码,并将运行该代码期间需要存储的临时存储信息存储在stack的当前指针所指向的内部存储器中。其中,运行第二功能中位于调用第一功能之前的代码切换到第一功能时stack的指针指向内部存储器的第一位置。

在步骤S402与步骤S403之间,MCU可以初始化第一功能的全局变量。

S404、MCU向主机发送请求,请求检查外部存储器是否存在,接收主机发送的响应消息,该响应消息指示了外部存储器是否存在。如果外部存储器存在,则执行步骤S405,如果外部存储器不存在,则结束本流程。

S405、MCU初始化外部存储器,将stack的指针由指向内部存储器更改为指向外部存储器。

其中,初始化外部存储器可以包括MCU向主机申请外部存储器的使用空间的过程,具体包括:MCU向主机中的主处理器发送请求以请求分配所述外部存储器的使用空间;主机中的主处理器为MCU分配所述外部存储器的使用空间并通知所述MCU,其中,所述外部存储器的使用空间用于存储运行所述第一功能期间需要存储的临时存储信息,其中,该使用空间包括:外部存储器的初始地址和外部存储器的存储空间大小,比如初始地址是0010H,存储空间大小为0522KB。可选的,该外部存储器的初始地址和外部存储器的存储空间大小也可以是预先配置的,则该步骤中stack的指针就直接指向预先配置的外部存储器的初始地址。

S406、MCU运行第一功能,其中,运行第一功能期间需要存储的临时存储信息被存储在外部存储器。

该步骤中,MCU将运行第一功能期间需要存储的临时存储信息发送给主机的主处理器,由主机的主处理器转存到外部存储器中。

可选的,在另一种实施方式中,主机中的主处理器为MCU分配所 述外部存储器的使用空间之后,只通知所述MCU空间分配成功,并不通知具体的使用空间是哪段区间,此时该步骤中stack的指针就指向外部存储器,该步骤中MCU运行第一功能期间需要存储的临时存储信息由MCU发送给主机处理器,由主机处理器根据预先分配的空间进行存储。

S407、MCU在运行第一功能结束后,将stack的指针指向内部存储器的第一位置,MCU给主处理器发送消息以通知主处理器释放该外部存储器的使用空间。

例如,第一功能是函数,如果函数的返回值只有一个直接的返回值(返回值的大小<=一个register的大小),则该返回值被直接存放在MCU的generic register0,不会存放在stack和外部存储器中,所以该步骤中stack的指针可以重新指向内部存储器的第一位置。

S408、MCU继续运行第二功能的代码,其中该继续运行的第二功能的代码期间所需要存储的临时存储信息被存储在stack指针所指向的内部存储器。

以下以任务task1和任务task2为例进行详细说明:

如图4B所示,任务task1所使用的stack为内部存储器41中stack1,任务task2所使用的stack为内部存储器41中stack2。任务task2包括第第二功能,第二功能调用第一功能,首先运行位于第二功能中调用第一功能之前的代码,并将运行代码期间需要存储的临时存储信息存储在stack2的当前指针所指向内部存储器41,其中,运行第二功能中位于调用第一功能之前的代码完成时栈stack2的指针指向内部存储器41的第一位置D1;然后初始化外部存储器42,并将内部存储器41中stack2的指针由指向内部存储器41更改为指向外部存储器42;运行任务task2的第一功能,运行第一功能期间需要存储的临时存储信息被存储在外部存储器42,比如,存储在外部存储器42中的第一位置T1到第二位置T2之间,其中,第一位置是stack2的指针指向的外部存储器42的初始地址;在运行任务task2的第一功能结束后,将stack2的指针指向内部存储器41,即调用第一功能结束后,将stack2的指针指向内部存储器 41的第一位置D1,释放临时存储信息在外部存储器42所占用的空间。

本发明实施例在执行任务中的第二功能所调用的第一功能之前将stack切换到外部存储器,并且在执行第一功能之后将stack切换回内部存储器,而第二功能的其他部分还是使用stack来存储临时存储信息(比如局部变量)使得执行任务时速度较快,这样,既能保证执行任务时速度较快又能防止stack溢出。进一步,在不需要使用外部存储器存储时通知主处理器将已分配的外部存储器的使用空间释放掉,可以避免一直占用外部存储器的空间。

本发明还提供第三实施例的任务栈的管理方法,在该实施例中,MCU外挂外部存储器,一般仅在特定的项目上才会使用,以便运行特定的功能,参阅图5,该实施例具体包括:

S501、MCU获得运行任务的指令。

其中,MCU获得运行任务的指令的方式与步骤S101中的描述相同,在此不再赘述。

其中,任务的code可以存储在非易失性存储器中,该非易失性存储器可以集成在MCU中或者位于MCU的外部。

S502、MCU运行第二功能中位于调用第一功能之前的代码,并将运行该代码期间需要存储的临时存储信息存储在stack的当前指针所指向的内部存储器中。其中,运行第二功能中位于调用第一功能之前的代码完成时stack的指针指向内部存储器的第一位置。

在步骤S502之前,MCU可以初始化第一功能的全局变量。

S503、MCU给外部存储器上电,将stack的指针由指向内部存储器更改为指向外部存储器。

在外部存储器为DDR(Double Data Rate,双倍速率同步动态随机存储器)等一些存储器类型中,该步骤还包括对这些存储器进行相应的参数配置。

S504、MCU运行第一功能,其中,运行第一功能期间需要存储的临时存储信息被存储在外部存储器。

S505、MCU在运行第一功能结束后,将stack的指针指向内部存储 器的第一位置,给外部存储器断电。

S506、MCU继续运行第二功能的代码,其中该继续运行的第二功能的代码期间需要存储的临时存储信息被存储在stack指针所指向的内部存储器。

本发明实施例既能保证执行任务时速度较快又能防止stack溢出;而且需要使用外部存储器保存临时存储信息时就对外部存储器上电,在运行完相应功能之后将任务所使用的栈的指针重新指向内部存储器,使得可以关闭外部存储器,这样就可以对其断电,以实现低功耗。

本发明还提供第四实施例的任务栈的管理方法,其在第一实施例所揭示的任务栈的管理方法的基础上进行描述,其与图4A的主要区别之处在于,该实施例中第一功能和第二功能是任务中顺序的两个功能,即任务包括第一功能和第二功能,第二功能位于第一功能之后。这样,在运行第一功能结束后,将stack的指针指向内部存储器的第一位置,此时,该内部存储器的第一位置可以是操作系统(OS)在初始化stack时所确定的stack指针的初始地址,即stack指针初始指向的内部存储器的地址,也就是这个stack的开始位置;然后运行第二功能,运行第二功能期间需要存储的临时存储信息从内部存储器的第一位置开始存储。可选的,第一功能也可以位于第二功能之后执行,不影响本发明的实现。

以下以任务task1和任务task2为例进行详细说明:

如图6所示,任务task1所使用的stack为内部存储器61中stack1,任务task2所使用的stack为内部存储器61中stack2。任务task2包括第一功能,在要运行任务task2时,首先初始化外部存储器62,然后将内部存储器61中stack2的指针由指向内部存储器61的第一位置D0更改为指向外部存储器62;运行任务task2的第一功能,运行第一功能期间需要存储的临时存储信息被存储在外部存储器62,比如,存储在外部存储器62中的第一位置T1到第二位置T2之间;在运行任务task2的第一功能结束后,将stack2的指针重新指向内部存储器61的第一位置D0,即这个stack的开始位置,释放临时存储信息在外部存储器62所占用的空间,并关闭外部存储器62。运行第二功能,运行第二功能期间需要存 储的临时存储信息从内部存储器61的第一位置D0开始存储。

本发明还提供第一实施例的集成电路,其包括微控制器;

微控制器获得运行任务的指令,所述任务包括第一功能;其中对于获得运行任务的指令的方式以及stack的相关介绍请参考方法实施例的描述,在此不再赘述。由于在微控制器运行第一功能时,所使用的stack超过该stack预定的大小,为了防止栈溢出,因此微控制器将内部存储器中stack的指针由指向内部存储器更改为指向外部存储器。

微控制器运行第一功能;其中,微控制器运行第一功能期间需要存储的临时存储信息被存储在外部存储器。其中,该临时存储信息包括:局部变量,还可以包括输出参数和返回值。

微控制器运行第一功能结束后,将stack的指针指向内部存储器。在微控制器将任务所使用的stack的指针指向内部存储器。

本实施例通过微控制器在运行第一功能之前,将内部存储器中stack的指针由指向内部存储器更改为指向外部存储器,运行第一功能期间需要存储的临时存储信息被存储在外部存储器,因此无需修改stack的大小,也无需扩充内部存储器的容量,降低成本。

本发明还提供第二实施例的集成电路,该集成电路是一微控制器,该实施例提供了微控制器70的结构,如图7A所示,微控制器70具体可以包括:内部数据存储器71和处理模块73,该微控制器还可以包括,内部指令存储器72;为了更清楚的描述本发明,另外在微控制器70外部画出了外部数据存储器74(如DDR/SRAM)和外部指令存储器75,其中,该外部指令存储器75可以为非易失性存储器,比如Flash。其中,本发明其他实施例中的内部存储器是指内部数据存储器,外部存储器是指外部数据存储器。

其中,内部数据存储器71包括多个stack。微控制器70上并行运行的多个任务中的每个任务分别使用各自的stack。其中,任务的代码(比如第一功能的代码)可以预先烧录(或者固化)在内部指令存储器72中,也可以存储在外部指令存储器75中。比如,对于没有外部指令存储器75的方案,第一功能的代码放置于内部指令存储器72中。

其中,微控制器70中的处理模块73获得运行任务的命令,运行该任务的代码,在执行第一功能之前,将stack的指针由指向内部存储器修改为指向外部存储器,将运行第一功能期间需要存储的临时存储信息存储到外部存储器中,在运行所述第一功能结束后,将所述栈的指针指向所述内部存储器,处理模块73的具体操作可参见方法实施例的相应描述,在此不再赘述。

在一种具体实施方式中,外部数据存储器75是微控制器70外挂的存储器,一般仅在特定的项目上才会使用,以便运行特定的功能,在这种应用场景中,需要使用外部数据存储器75保存临时存储信息时就对外部数据存储器75上电,不需要时则对其断电,以减少功耗。所以微控制器70在运行第一功能之前,控制外部数据存储器75上电,在运行所述第一功能结束后,就将外部数据存储器75断电,以减少功耗。

本发明实施例中微控制器将任务所使用的stack的指针指向内部存储器后,关闭外部存储器,以实现低功耗。

本发明提供第三实施例的集成电路80,该集成电路80包括:主处理器81和微控制器82,其中微控制器82中包括内部存储器83和处理模块84,在这种情况下,微控制器82和主处理器81共用主处理器81所外挂的外部存储器88。

微控制器82的处理模块获得运行任务的指令,所述任务包括第一功能;其中对于获得运行任务的指令的方式以及stack的相关介绍请参考方法实施例的描述,在此不再赘述。由于在微控制器运行第一功能时,所使用的stack会超过该stack预定的大小,为了防止栈溢出,因此微控制器将内部存储器中stack的指针由指向内部存储器更改为指向外部存储器。

微控制器82的处理模块运行第一功能;其中,运行第一功能期间需要存储的临时存储信息被存储在外部存储器。

微控制器82的处理模块运行第一功能结束后,将stack的指针指向内部存储器。

微控制器82的处理模块还用于向所述主处理器发送请求以请求分 配所述外部存储器的使用空间;主处理器81为微控制器82分配所述外部存储器的使用空间并通知所述微控制器82,其中,所述外部存储器的使用空间用于存储运行所述第一功能期间需要存储的临时存储信息。可选的,所述外部存储器的使用空间也可以是预先配置的,比如预先配置外部存储器的使用空间包括:外部存储器的初始地址为0010H以及存储空间大小为512KB。然后微控制器82的处理模块将运行所述第一功能期间需要存储的临时存储信息发送给主处理器81,由主处理器81转发给外部存储器存储,在运行所述第一功能结束后,将stack的指针由指向外部存储器修改为指向内部存储器,并且释放所述外部存储器的使用空间。可选的,微控制器82的处理模块还可以向主控制器82发送请求,以请求检查外部存储器是否存在,并接收主控制器82发送的响应消息,该响应消息指示了外部存储器是否存在,如果外部存储器存在,则运行第一功能,否则就可以结束本流程。可选的,微控制器82的处理模块还可以通过主处理器81加载任务的code;可选的,微控制器82的处理模块还可以通过主处理器81接收执行任务的指令。当然微控制器82的处理模块也可以通过其他方式获得任务的code和获得执行任务的指令,不影响本发明的实现。

本发明还提供第四实施例的集成电路,其在第一实施例、第二实施例以及第三实施例所揭示的集成电路的基础上进行描述。其中,任务进一步包括第二功能,第二功能调用第一功能。

在将内部存储器中stack的指针由指向内部存储器更改为指向外部存储器之前,微控制器的处理模块还用于运行位于调用第一功能之前的第二功能的代码,并将运行第二功能的代码期间需要存储的临时存储信息存储在栈的当前指针所指向的内部存储器,其中,微控制器运行位于调用第一功能之前的第二功能的代码完成时栈的指针指向内部存储器的第一位置。

微控制器的处理模块具体在运行第一功能结束后,将栈的指针指向内部存储器的所述第一位置。

本发明实施例在执行任务中的第二功能所调用的第一功能之前将 stack切换到外部存储器,并且在执行第一功能之后将stack切换回内部存储器,而第二功能的其他部分还是使用stack来存储局部变量使得执行任务时速度较快,这样,既能保证执行任务时速度较快又能防止stack溢出。

本发明还提供第五实施例的集成电路,其在第一实施例、第二实施例以及第三实施例所揭示的集成电路的基础上进行描述。其中,任务进一步包括第二功能,第二功能位于第一功能之后。

在微控制器的处理模块在运行第一功能结束后,将栈的指针指向内部存储器的第一位置。

微控制器的处理模块继续运行第二功能,第二功能所产生的临时存储信息从内部存储器的第一位置开始存储。

本发明实施例在执行任务时,将任务中部分功能所产生的临时存储信息存储到外部存储器,将任务中另一部分功能所产生的临时存储信息存储到内部存储器,这样,既能保证执行任务时速度较快又能防止stack溢出。

本发明还提供一种控制装置,该控制装置包括:集成电路和外部存储器,其中,集成电路可以是一微控制器,具体结构如图7所示,或者集成电路可以集成有主处理器和微控制器,具体如图8所示,其中集成电路的具体操作可参见上述集成电路的第一到第五实施例的描述,在此不再赘述。其中,外部存储器可以是微控制器外挂的存储器,也可是主处理器外挂的处理器,用于存储运行功能时所产生的临时存储信息。

参阅图9,本发明提供另一种控制装置,其包括:

获取模块901,用于获得运行任务的指令,所述任务包括第一功能;

第一修改模块902,用于在运行所述第一功能之前,将内部存储器中栈的指针由指向内部存储器更改为指向外部存储器,其中,所述内部存储器中所述栈是所述任务所使用的栈;

运行模块903,用于运行所述第一功能,其中,运行所述第一功能期间需要存储的临时存储信息被存储在所述栈的指针所指向的外部存储器;其中,所述临时存储信息包括局部变量;

第二修改模块904,用于在运行所述第一功能结束后,将所述栈的指针指向所述内部存储器。

其中,所述任务包括第二功能;所述第二功用于调用第一功能;运行模块903还用于运行第二功能中位于调用第一功能之前的代码,并将运行所述代码期间需要存储的临时存储信息存储在栈的当前指针所指向的内部存储器,其中,运行所述代码完成时所述栈的指针指向内部存储器的第一位置;第二修改模块904,用于在调用所述第一功能结束后,将所述栈的指针指向内部存储器的所述第一位置。

为了与主处理器通信,该控制装置还包括:接口模块905,用于向主处理器发送请求以请求分配所述外部存储器的使用空间;接收主处理器发送的通知消息,所述通知消息指示了所述主处理器分配的所述外部存储器的使用空间,其中,所述外部存储器的使用空间用于存储运行所述第一功能期间需要存储的临时存储信息。或者该接口模块905,用于给主处理器发送消息以通知主处理器释放外部存储器中用于存储所述临时存储信息的空间。

为了控制外部存储器,该控制装置还包括:控制模块906,用于在运行所述第一功能之前,控制所述外部存储器上电;在运行所述第一功能结束之后,控制所述外部存储器断电。

综上所述,本发明通过在运行第一功能之前,将内部存储器中栈的指针由指向内部存储器更改为指向外部存储器,运行第一功能期间产生的临时存储信息被存储在外部存储器,因此无需更改stack大小,也无需扩充内部存储器的容量,降低了成本;进一步的,在执行任务时,可以将一功能的临时存储信息存储到内部存储器中的stack中,将另一功能的临时存储信息存储到外部存储器中,这样,既能保证执行任务时速度较快又能防止stack溢出。进一步的,可以在需要使用外部存储器保存临时存储信息时就对外部存储器上电,不需要使用时对其断电,以实现低功耗。进一步的,在将任务进行平台移植时,比如从非嵌入平台(如windows平台)移植到MCU上,由于本发明使得任务运行时所产生的临时存储信息可以存储到外部存储器而不必须存储在内部存储器的stack中,所以 使得移植容易实现。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1