微控制器应用软件的调试方法与流程

文档序号:13289084阅读:272来源:国知局
技术领域本发明涉及微控制器技术领域,特别是涉及一种微控制器应用软件的调试方法。

背景技术:
微控制器的应用软件,需要针对不同的应用需编写不同的程序,而在程序编写完成后软件工程师必须进行调试、查找程序漏洞(BUG)。传统的软件调试的方式有单步执行、全速执行、指定地址运行和断点调试等四种。传统的调试方式在运行时出现BUG后仅能确定其存在于程序段中的某个大范围内,需要设置不同的执行方式逐步缩小范围并从头开始重新运行程序调试。这个过程中,反复地设置和重新运行的工作耗费了大量时间,降低了调试效率。

技术实现要素:
基于此,有必要提供一种提高调试效率的微控制器应用软件的调试方法。一种微控制器应用软件的调试方法,包括如下步骤:将所述应用软件的程序根据业务功能划分为多个程序段,并设置状态记录单元;当所述应用软件的程序运行时,将每个程序段运行结束时的状态存入所述状态记录单元;当应用软件的程序运行出错时,将程序的状态恢复到所述状态记录单元中保存的其中一个状态。在其中一个实施例中,所述状态记录单元为状态堆栈。在其中一个实施例中,所述状态堆栈中的状态采用向量保存。在其中一个实施例中,在所述应用软件开始运行时,将所述状态堆栈进行初始化,并设置所述状态堆栈的最大级数。在其中一个实施例中,所述将每个程序段运行结束时的状态存入所述状态记录单元的步骤中,判断所述状态堆栈是否溢出,若是,则将所述状态堆栈底部的状态向量丢弃。在其中一个实施例中,所述将程序的状态恢复到出错前的状态的步骤中,判断所述状态堆栈是否为空,若否,则将所述状态堆栈顶部的状态向量读出,根据该顶部的状态向量恢复程序,之后将所述状态堆栈顶部的状态向量丢弃。在其中一个实施例中,所述将程序的状态恢复到所述状态记录单元中保存的其中一个状态之前,判断是否执行恢复操作,是则进行恢复。在其中一个实施例中,还包括:从恢复的状态开始,运行至出现程序漏洞的程序段、定位程序漏洞。在其中一个实施例中,所述运行出现程序漏洞的程序段,定位程序漏洞的步骤包括:运行出现程序漏洞的程序段的一段子程序,并保存状态;若无漏洞,则执行下一段子程序;若有漏洞,则执行恢复操作并以出现漏洞的子程序段缩小范围重复上述步骤。在其中一个实施例中,所述运行出现程序漏洞的程序段,定位程序漏洞的步骤还采用逐步执行和设置断点执行的调试方式。上述方法,通过保存应用软件运行过程中的状态,进行调试时可恢复到所保存的其中一个状态,不需要每次都从头开始执行整个程序,因此提高了调试效率。附图说明图1为一实施例的微控制器应用软件的调试方法流程图;图2为调试过程在改进前后对比图。具体实施方式如图1所示,为一实施例的微控制器应用软件的调试方法流程图。该方法包括如下步骤。步骤S101:将所述应用软件的程序根据业务功能划分为多个程序段,并设置状态记录单元。所述应用软件可以为微控制器仿真软件。根据业务功能划分为多个程序段时,可以是按照程序的功能模块进行划分。设置状态记录单元用于保存应用软件的状态。步骤S102:当所述应用软件运行时,将每个程序段运行结束时的状态存入所述状态记录单元。在应用软件运行时,每个功能模块运行之后,应用软件都会处于某一个状态。该状态包括软件仿真的诸多关键量,可采用向量形式进行保存,称为状态向量。本实施例中,所述状态记录单元为状态堆栈。状态堆栈是所述状态向量的集合,首先生成的状态向量保存在所述状态堆栈的底部,并且在随后的运行过程中逐个在所述状态堆栈顶部添加。在所述应用软件开始运行时,将所述状态堆栈进行初始化,并设置所述状态堆栈的最大级数。将状态堆栈初始化是为了保证应用软件能够正常引用。状态堆栈的最大级数是指其最多能够保存多少个状态向量,可根据实际情况进行设置。优选地,以既能够保证使用、又不会占用过多空间为原则进行设置。进一步地,在保存状态向量到所述状态堆栈之前,还判断所述状态堆栈是否溢出,若是,则将所述状态堆栈底部的状态向量丢弃。在设置了所述状态堆栈的最大级数之后,仍然会存在将状态堆栈填满的情况。此时可以将最开始的状态向量丢弃,以便能够保存最近的状态向量。当应用软件运行到一定程度之后,若中间均没有出错,则表明之前运行的程序段不存在程序漏洞,即使后面再出现运行错误,也不需要恢复到较早的状态,因此可以将最初的状态向量丢弃。步骤S103:当应用软件运行出错时,将程序的状态恢复到所述状态记录单元中保存的其中一个状态。当应用软件运行出错时,也即是进入了存在漏洞的程序段,由于该程序段存在漏洞,因此无法执行成功,便不会产生运行该程序段的状态。此时状态记录单元中保存的状态均为正常状态,可恢复到其中一个状态。应用软件恢复到其中任一个状态均比从头开始执行效率更高。优选地,恢复到最近一个状态。当采用状态堆栈保存状态向量时,采用所述状态堆栈顶部的状态向量执行恢复。进一步地,所述将程序的状态恢复到出错前的状态的步骤中,判断所述状态堆栈是否为空,若否,则将所述状态堆栈顶部的状态向量读出,根据该顶部的状态向量恢复程序,之后将所述状态堆栈顶部的状态向量丢弃。若状态堆栈为空,就无法用状态堆栈中的状态向量进行恢复,这很可能是因为应用软件执行的第一个程序段即存在漏洞。此时可以执行重新程序,并集中在第一个程序段中查找漏洞。进一步地,所述将程序的状态恢复到所述状态记录单元中保存的其中一个状态之前,判断是否执行恢复操作,是则进行恢复。这样可以给用户提供选择:是采用本实施例的方法进行调试,还是采用传统方法进行调试。步骤S104:从恢复的状态开始,运行至出现程序漏洞的程序段、定位程序漏洞。当确定包含程序漏洞的程序段后,就可以集中在包含程序漏洞的程序段中查找该程序漏洞,将其最终定位。具体定位方法如下:S141:运行出现程序漏洞的程序段的一段子程序,并保存状态。该段子程序可长可短。S142:若无漏洞则执行下一段子程序,有漏洞时执行恢复操作并缩小范围重复上述步骤S141。直到定位程序漏洞。在此过程也可以采用传统的调试方法,例如逐步执行、设置断点等。上述实施例的方法,通过保存应用软件运行过程中的状态,进行调试时可恢复到所保存的其中一个状态,不需要每次都从头开始执行整个程序,因此提高了调试效率。参考图2,传统方法每次进行调试时都要回到状态向量A之前,也即重新开始执行整个程序,而本实施例的方法在大概确定BUG出现的范围后,可以回到状态向量D之前,就不需要执行状态向量A、B、C所对应的程序段,大大提高了调试的效率。以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1