掌桥专利:专业的专利平台
掌桥专利
首页

单片机的调试方法、调试装置、处理器和电子设备

文献发布时间:2024-04-18 19:53:33


单片机的调试方法、调试装置、处理器和电子设备

技术领域

本申请涉及单片机调试技术领域,具体而言,涉及一种单片机的调试方法、调试装置、计算机可读存储介质、处理器和电子设备。

背景技术

在嵌入式在开发过程中可以通过调试器jlink、ulink等分别对单片机进行调试。在某些时候,由于代码错误导致程序中一些数组越界,对其他全局变量进行更改,从而使整个程序运行出问题,如果有调试器,可以通过各种调试指令找到误操作全局变量的错误代码,但是在某些时候没有调试器,或者不允许暂停程序进行调试,传统的方法就不行了。

发明内容

本申请的主要目的在于提供一种单片机的调试方法、调试装置、计算机可读存储介质、处理器和电子设备,以至少解决现有技术中没有调试器的情况下无法对单片机进行调试的问题。

为了实现上述目的,根据本申请的一个方面,提供了一种单片机的调试方法,包括:读取函数地址范围,所述函数地址范围为目标函数的地址集合,所述目标函数为对目标变量执行操作的所有函数,所述目标变量包括所述单片机中的全局变量;在单片机处于调试监控模式且执行操作指令的情况下,中断所述操作指令,所述操作指令为请求操作所述目标变量的指令;根据所述操作指令对应的PC(Program Counter,指令计数器)指针地址以及所述函数地址范围,对所述单片机进行调试。

可选地,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,包括:根据所述PC指针地址以及所述函数地址范围,确定所述PC指针地址是否位于所述函数地址范围内;在所述PC指针地址未位于所述函数地址范围内的情况下,记录所述PC指针地址;根据所述PC指针地址,生成错误信息,并将所述错误信息发送至诊断系统,以使得所述诊断系统根据所述错误信息定位错误代码。

可选地,在所述PC指针地址未位于所述函数地址范围内的情况下,所述方法还包括:置位错误标志位,在根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试之前,所述方法还包括:获取所述操作指令对应的PC指针;从所述PC指针中读取所述PC指针地址。

可选地,在所述PC指针地址位于所述函数地址范围内的情况下,所述方法还包括:在所述操作指令的中断时长达到预定时长的情况下,继续执行所述操作指令。

可选地,在中断所述操作指令之前,所述方法还包括:在目标地址设置断点,所述目标地址为目标变量的RAM地址。

可选地,在目标地址设置断点,包括:将观察点比较器的地址设置为所述目标地址。

可选地,读取函数地址范围,包括:确定所述目标函数;从MAP(地图)文件中读取函数调用关系,所述函数调用关系包括所述函数与所述函数的地址的对应关系;从所述函数调用关系中查找所述目标函数对应的所有所述地址,得到所述函数地址范围。

可选地,所述操作为写操作。

根据本申请的另一方面,提供了一种单片机的调试装置,包括:读取单元,用于读取函数地址范围,所述函数地址范围为目标函数的地址集合,所述目标函数为对目标变量执行操作的所有函数,所述目标变量包括所述单片机中的全局变量;中断单元,用于在单片机处于调试监控模式且执行操作指令的情况下,中断所述操作指令,所述操作指令为请求操作所述目标变量的指令;调试单元,用于根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试。

根据本申请的再一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,在所述程序运行时控制所述计算机可读存储介质所在设备执行任意一种所述的方法。

根据本申请的又一方面,提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行任意一种所述的方法。

根据本申请的另一方面,还提供了一种电子设备,包括:单片机;所述单片机的调试装置,内置于所述单片机中,所述调试装置包括一个或多个处理器,存储器,以及一个或多个程序,其中,所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行任意一种所述的方法。

应用本申请的技术方案,首先读取对目标变量执行操作的所有目标函数的地址集合,得到函数地址范围;之后在单片机处于调试监控模式,且执行操作所述目标变量的操作指令的情况下,中断所述操作指令;最后根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,,实现了无调试器情况下的单片机调试,解决了现有技术中需要依赖调试器才能对单片机进行调试的问题,在没有外部调试器的时候可以快速定位单片机中的错误代码,可以适用于不同的测试场景,实用性较强。

附图说明

构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1示出了根据本申请的实施例中提供的一种执行单片机的调试方法的移动终端的硬件结构框图;

图2示出了根据本申请的实施例提供的一种单片机的调试方法的流程示意图;

图3示出了根据本申请的实施例提供的一种单片机的调试装置的结构框图;

其中,上述附图包括以下附图标记:

102、处理器;104、存储器;106、传输设备;108、输入输出设备。

具体实施方式

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

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

需要说明的是,本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

正如背景技术中所介绍的,现有技术中没有调试器的情况下无法对单片机进行调试,为解决所述的问题,本申请的实施例提供了一种单片机的调试方法、调试装置、计算机可读存储介质、处理器和电子设备。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本发明实施例的一种单片机的调试方法的移动终端的硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,所述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对所述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的设备信息的显示方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现所述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。所述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。传输设备106用于经由一个网络接收或者发送数据。所述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。

在本实施例中提供了一种运行于移动终端、计算机终端或者类似的运算装置的单片机的调试方法,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图2是根据本申请实施例的单片机的调试方法的流程图。如图2所示,该方法包括以下步骤:

步骤S201,读取函数地址范围,所述函数地址范围为目标函数的地址集合,所述目标函数为对目标变量执行操作的所有函数,所述目标变量包括所述单片机中的全局变量;

具体地,所述操作为写操作,即所述目标函数为对目标变量执行写操作的函数。比如,假设正常可以操作全局变量Global_Va的函数为IoHwAb_10msTask和IoHwAb_200msTask,这两个函数就是全局变量Global_Va的目标函数,确定这两个函数的地址范围分别为0x8016f5ac~0x8016f619、0x8016f61a~0x8016f649,这些范围就是函数地址范围,作为后续的调试过程的限值依据。

为了保证较为简单快捷且准确地得到所述函数地址范围,所述步骤S201的具体实现方式可以为:

步骤S2011:确定所述目标函数;

步骤S2012:从MAP文件中读取函数调用关系,所述函数调用关系包括所述函数与所述函数的地址的对应关系;

步骤S2013:从所述函数调用关系中查找所述目标函数对应的所有所述地址,得到所述函数地址范围。

具体地,可以通过脚本实现从MAP文件中读取函数调用关系以及从所述函数调用关系中查找所述目标函数对应的所有所述地址的过程。

根据本申请的一种具体的实施例,所述函数调用关系还包括所述函数与所述全局变量之间的对应关系,确定所述目标函数具体包括:根据所述目标变量,从所述函数调用关系查找所述目标变量对应的所述函数,得到所述目标函数。

在实际应用中,通过编译代码生成MAP地图,MAP地图中包括所有的全局变量、操作全局变量的函数以及这些函数的函数地址。通过本申请的所述单片机的调试方法,实现了对编译代码的反馈机制,可以快速定位错误代码。

步骤S202,在单片机处于调试监控模式且执行操作指令的情况下,中断所述操作指令,所述操作指令为请求操作所述目标变量的指令;

具体地,单片机的调试模式有两种:Halting(停止)模式以及Debug Monitor(调试监控)模式。Halting模式为传统的连接调试器用的模式,在该调试模式下,遇到断点,内核会停止工作,需要人为介入才会继续运行。而在Debug Monitor模式下,遇到断点命令,会执行一个异常执行函数,内核不会停止工作,类似于执行了一次中断。也就是说,本申请是在单片机处于调试监控模式的情况下进行的调试,该调试过程内核不会停止工作,不会暂停程序,可以适用于不允许暂停程序进行调试的场景,以及适用于没有调试器的场景,进一步地保证了本申请的适用范围较广、实用性较强。

一种可选方案中,在中断所述操作指令之前,所述方法还包括:在目标地址设置断点,所述目标地址为目标变量的RAM地址。通过在目标变量的RAM地址设置断点,保证了执行操作目标变量的操作指令时,该操作指令会被中断,方便了对该操作指令的PC指针地址进行调试检查。

在实际的应用过程中,单片机有多个Hardware Comparators(硬件比较器)来设置程序断点,这类断点记录断点设置在FLASH的地址;另外还有多个Watchpoint Comparators(观察点比较器)用来设置数据断点,这类断点记录断点设置在需要监控的变量所在的RAM地址的。示例性的一种实施例中,在目标地址设置断点,包括:将观察点比较器的地址设置为所述目标地址。在定位全局变量是否被意外改写的时候,通过将观察点比较器的地址设置成目标变量的RAM地址,实现了在目标变量的RAM地址设置断点的效果,这样当有程序对目标变量所在的RAM地址进行操作时,程序就会停止运行,等待下一步指令。

步骤S203,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试。

具体地,所述PC指针地址为PC指针指向的函数地址,PC指针是用来存放当前欲执行指令的函数地址,就是所述操作指令对应的函数地址。

为了进一步地解决现有技术中需要依赖调试器才能对单片机进行调试的问题,进一步地实现没有调试器的时候可以快速定位单片机中的错误代码,一种可选方案中,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,具体包括如下步骤:

步骤S2031:根据所述PC指针地址以及所述函数地址范围,确定所述PC指针地址是否位于所述函数地址范围内;

步骤S2032:在所述PC指针地址未位于所述函数地址范围内的情况下,记录所述PC指针地址;

步骤S2033:根据所述PC指针地址,生成错误信息,并将所述错误信息发送至诊断系统,以使得所述诊断系统根据所述错误信息定位错误代码。

由于PC指针地址就是要操作该目标变量的函数地址,当函数地址范围中不包括该PC指针地址时,说明代码错误,此时记录该PC指针地址并生成错误信息,再将错误信息发送给诊断系统,方便诊断系统根据PC指针地址定位错误的函数。

所述诊断系统可以为单片机内部的诊断系统,也可以为单片机外部的诊断系统。

具体地,在所述PC指针地址未位于所述函数地址范围内的情况下,所述方法还包括:置位错误标志位,在根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试之前,所述方法还包括:获取所述操作指令对应的PC指针;从所述PC指针中读取所述PC指针地址。在所述PC指针地址未位于所述函数地址范围内的情况下,通过置位错误标志位,可以触发出错检测,且方便人员知悉调试结果。

进一步地,在所述PC指针地址位于所述函数地址范围内的情况下,所述方法还包括:在所述操作指令的中断时长达到预定时长的情况下,继续执行所述操作指令。这样进一步地解决了现有技术中不允许暂停程序的场景下,无法调试单片机的问题,实现了不停止单片机内核运行的情况下,对单片机进行调试的目的。

本实施例中,首先,读取对目标变量执行操作的所有目标函数的地址集合,得到函数地址范围;之后,在单片机处于调试监控模式,且执行操作所述目标变量的操作指令的情况下,中断所述操作指令;最后,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,,实现了无调试器情况下的单片机调试,解决了现有技术中需要依赖调试器才能对单片机进行调试的问题,在没有外部调试器的时候可以快速定位单片机中的错误代码,可以适用于不同的测试场景,实用性较强。

为了使得本领域技术人员能够更加清楚地了解本申请的技术方案,以下将结合具体的实施例对本申请的单片机的调试方法的实现过程进行详细说明。

本实施例涉及一种具体的单片机的调试方法,包括如下步骤:

步骤S1:在程序开始时设置单片机的调试模式为Debug Monitor模式;

步骤S2:将Watchpoint Comparators地址设置为目标变量Global_Va的RAM地址;

步骤S3:假设正常可以操作目标变量Global_Va的函数为IoHwAb_10msTask、IoHwAb_200msTask,通过脚本读取这两个函数在map文件中的地址范围,得到函数地址范围,作为限值依据;

步骤S4:当有代码对目标变量Global_Va有写操作时,会产生异常执行函数,在函数里进行如下操作:1)、读取上文PC指针地址;2)、比较上文PC指针地址是否都在正常操作变量Global_Va的地址范围内;3)、如果不在,置位错误标志并传入诊断系统报错,同时记录上文PC指针;4)、通过PC指针定位是哪个函数的问题。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

本申请实施例还提供了一种单片机的调试装置,需要说明的是,本申请实施例的单片机的调试装置可以用于执行本申请实施例所提供的用于单片机的调试方法。该装置用于实现所述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

以下对本申请实施例提供的单片机的调试装置进行介绍。

图3是根据本申请实施例的单片机的调试装置的示意图。如图3所示,该装置包括:

读取单元10,用于读取函数地址范围,所述函数地址范围为目标函数的地址集合,所述目标函数为对目标变量执行操作的所有函数,所述目标变量包括所述单片机中的全局变量;

具体地,所述操作为写操作,即所述目标函数为对目标变量执行写操作的函数。比如,假设正常可以操作全局变量Global_Va的函数为IoHwAb_10msTask和IoHwAb_200msTask,这两个函数就是全局变量Global_Va的目标函数,确定这两个函数的地址范围分别为0x8016f5ac~0x8016f619、0x8016f61a~0x8016f649,这些范围就是函数地址范围,作为后续的调试过程的限值依据。

为了保证较为简单快捷且准确地得到所述函数地址范围,所述读取单元包括:

第一确定模块,用于确定所述目标函数;

读取模块,用于从MAP文件中读取函数调用关系,所述函数调用关系包括所述函数与所述函数的地址的对应关系;

查找模块,用于从所述函数调用关系中查找所述目标函数对应的所有所述地址,得到所述函数地址范围。

具体地,可以通过脚本实现从MAP文件中读取函数调用关系以及从所述函数调用关系中查找所述目标函数对应的所有所述地址的过程。

根据本申请的一种具体的实施例,所述函数调用关系还包括所述函数与所述全局变量之间的对应关系,所述第一确定模块具体包括:查找子模块,用于根据所述目标变量,从所述函数调用关系查找所述目标变量对应的所述函数,得到所述目标函数。

在实际应用中,通过编译代码生成MAP地图,MAP地图中包括所有的全局变量、操作全局变量的函数以及这些函数的函数地址。通过本申请的所述单片机的调试装置,实现了对编译代码的反馈机制,可以快速定位错误代码。

中断单元20,用于在单片机处于调试监控模式且执行操作指令的情况下,中断所述操作指令,所述操作指令为请求操作所述目标变量的指令;

具体地,单片机的调试模式有两种:Halting(停止)模式以及Debug Monitor(调试监控)模式。Halting模式为传统的连接调试器用的模式,在该调试模式下,遇到断点,内核会停止工作,需要人为介入才会继续运行。而在Debug Monitor模式下,遇到断点命令,会执行一个异常执行函数,内核不会停止工作,类似于执行了一次中断。也就是说,本申请是在单片机处于调试监控模式的情况下进行的调试,该调试过程内核不会停止工作,不会暂停程序,可以适用于不允许暂停程序进行调试的场景,以及适用于没有调试器的场景,进一步地保证了本申请的适用范围较广、实用性较强。

一种可选方案中,所述装置还包括:设置单元,用于在中断所述操作指令之前,在目标地址设置断点,所述目标地址为目标变量的RAM地址。通过在目标变量的RAM地址设置断点,保证了执行操作目标变量的操作指令时,该操作指令会被中断,方便了对该操作指令的PC指针地址进行调试检查。

在实际的应用过程中,单片机有多个Hardware Comparators(硬件比较器)来设置程序断点,这类断点记录断点设置在FlASH的地址;另外还有多个Watchpoint Comparators(观察点比较器)用来设置数据断点,这类断点记录断点设置在需要监控的变量所在的RAM地址的。示例性的一种实施例中,所述设置单元包括:设置模块,用于将观察点比较器的地址设置为所述目标地址。在定位全局变量是否被意外改写的时候,通过将观察点比较器的地址设置成目标变量的RAM地址,实现了在目标变量的RAM地址设置断点的效果,这样当有程序对目标变量所在的RAM地址进行操作时,程序就会停止运行,等待下一步指令。

调试单元30,用于根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试。

具体地,所述PC指针地址为PC指针指向的函数地址,PC指针是用来存放当前欲执行指令的函数地址,就是所述操作指令对应的函数地址。

为了进一步地解决现有技术中需要依赖调试器才能对单片机进行调试的问题,进一步地实现没有调试器的时候可以快速定位单片机中的错误代码,一种可选方案中,所述调试单元包括:第二确定模块,用于根据所述PC指针地址以及所述函数地址范围,确定所述PC指针地址是否位于所述函数地址范围内;记录模块,用于在所述PC指针地址未位于所述函数地址范围内的情况下,记录所述PC指针地址;生成模块,用于根据所述PC指针地址,生成错误信息,并将所述错误信息发送至诊断系统,以使得所述诊断系统根据所述错误信息定位错误代码。由于PC指针地址就是要操作该目标变量的函数地址,当函数地址范围中不包括该PC指针地址时,说明代码错误,此时记录该PC指针地址并生成错误信息,再将错误信息发送给诊断系统,方便诊断系统根据PC指针地址定位错误的函数。

所述诊断系统可以为单片机内部的诊断系统,也可以为单片机外部的诊断系统。

具体地,所述装置还包括:置位单元,用于在所述PC指针地址未位于所述函数地址范围内的情况下,置位错误标志位,所述装置还包括:获取单元,用于在根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试之前,获取所述操作指令对应的PC指针;从所述PC指针中读取所述PC指针地址。在所述PC指针地址未位于所述函数地址范围内的情况下,通过置位错误标志位,可以触发出错检测,且方便人员知悉调试结果。

进一步地,所述装置还包括:执行单元,用于在所述PC指针地址位于所述函数地址范围内的情况下,在所述操作指令的中断时长达到预定时长的情况下,继续执行所述操作指令。这样进一步地解决了现有技术中不允许暂停程序的场景下,无法调试单片机的问题,实现了不停止单片机内核运行的情况下,对单片机进行调试的目的。

本实施例中,通过读取单元读取对目标变量执行操作的所有目标函数的地址集合,得到函数地址范围;通过中断单元在单片机处于调试监控模式,且执行操作所述目标变量的操作指令的情况下,中断所述操作指令;通过调试单元根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,,实现了无调试器情况下的单片机调试,解决了现有技术中需要依赖调试器才能对单片机进行调试的问题,在没有外部调试器的时候可以快速定位单片机中的错误代码,可以适用于不同的测试场景,实用性较强。

所述单片机的调试装置包括处理器和存储器,所述读取单元、所述中断单元以及所述调试单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的所述程序单元来实现相应的功能。所述模块均位于同一处理器中;或者,所述各个模块以任意组合的形式分别位于不同的处理器中。

处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来至少解决现有技术中没有调试器的情况下无法对单片机进行调试的问题。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。

本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,在所述程序运行时控制所述计算机可读存储介质所在设备执行所述单片机的调试方法。

具体地,单片机的调试方法包括:

步骤S201,读取函数地址范围,所述函数地址范围为目标函数的地址集合,所述目标函数为对目标变量执行操作的所有函数,所述目标变量包括所述单片机中的全局变量;

具体地,所述操作为写操作,即所述目标函数为对目标变量执行写操作的函数。比如,假设正常可以操作全局变量Global_Va的函数为IoHwAb_10msTask和IoHwAb_200msTask,这两个函数就是全局变量Global_Va的目标函数,确定这两个函数的地址范围分别为0x8016f5ac~0x8016f619、0x8016f61a~0x8016f649,这些范围就是函数地址范围,作为后续的调试过程的限值依据。

步骤S202,在单片机处于调试监控模式且执行操作指令的情况下,中断所述操作指令,所述操作指令为请求操作所述目标变量的指令;

具体地,单片机的调试模式有两种:Halting(停止)模式以及Debug Monitor(调试监控)模式。Halting模式为传统的连接调试器用的模式,在该调试模式下,遇到断点,内核会停止工作,需要人为介入才会继续运行。而在Debug Monitor模式下,遇到断点命令,会执行一个异常执行函数,内核不会停止工作,类似于执行了一次中断。也就是说,本申请是在单片机处于调试监控模式的情况下进行的调试,该调试过程内核不会停止工作,不会暂停程序,可以适用于不允许暂停程序进行调试的场景,以及适用于没有调试器的场景,进一步地保证了本申请的适用范围较广、实用性较强。

步骤S203,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试。

具体地,所述PC指针地址为PC指针指向的函数地址,PC指针是用来存放当前欲执行指令的函数地址,就是所述操作指令对应的函数地址。

可选地,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,包括:根据所述PC指针地址以及所述函数地址范围,确定所述PC指针地址是否位于所述函数地址范围内;在所述PC指针地址未位于所述函数地址范围内的情况下,记录所述PC指针地址;根据所述PC指针地址,生成错误信息,并将所述错误信息发送至诊断系统,以使得所述诊断系统根据所述错误信息定位错误代码。

可选地,在所述PC指针地址未位于所述函数地址范围内的情况下,所述方法还包括:置位错误标志位,在根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试之前,所述方法还包括:获取所述操作指令对应的PC指针;从所述PC指针中读取所述PC指针地址。

可选地,在所述PC指针地址位于所述函数地址范围内的情况下,所述方法还包括:在所述操作指令的中断时长达到预定时长的情况下,继续执行所述操作指令。

可选地,在中断所述操作指令之前,所述方法还包括:在目标地址设置断点,所述目标地址为目标变量的RAM地址。

可选地,在目标地址设置断点,包括:将观察点比较器的地址设置为所述目标地址。

可选地,读取函数地址范围,包括:确定所述目标函数;从MAP(地图)文件中读取函数调用关系,所述函数调用关系包括所述函数与所述函数的地址的对应关系;从所述函数调用关系中查找所述目标函数对应的所有所述地址,得到所述函数地址范围。

可选地,所述操作为写操作。

本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述单片机的调试方法。

具体地,单片机的调试方法包括:

步骤S201,读取函数地址范围,所述函数地址范围为目标函数的地址集合,所述目标函数为对目标变量执行操作的所有函数,所述目标变量包括所述单片机中的全局变量;

具体地,所述操作为写操作,即所述目标函数为对目标变量执行写操作的函数。比如,假设正常可以操作全局变量Global_Va的函数为IoHwAb_10msTask和IoHwAb_200msTask,这两个函数就是全局变量Global_Va的目标函数,确定这两个函数的地址范围分别为0x8016f5ac~0x8016f619、0x8016f61a~0x8016f649,这些范围就是函数地址范围,作为后续的调试过程的限值依据。

步骤S202,在单片机处于调试监控模式且执行操作指令的情况下,中断所述操作指令,所述操作指令为请求操作所述目标变量的指令;

具体地,单片机的调试模式有两种:Halting(停止)模式以及Debug Monitor(调试监控)模式。Halting模式为传统的连接调试器用的模式,在该调试模式下,遇到断点,内核会停止工作,需要人为介入才会继续运行。而在Debug Monitor模式下,遇到断点命令,会执行一个异常执行函数,内核不会停止工作,类似于执行了一次中断。也就是说,本申请是在单片机处于调试监控模式的情况下进行的调试,该调试过程内核不会停止工作,不会暂停程序,可以适用于不允许暂停程序进行调试的场景,以及适用于没有调试器的场景,进一步地保证了本申请的适用范围较广、实用性较强。

步骤S203,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试。

具体地,所述PC指针地址为PC指针指向的函数地址,PC指针是用来存放当前欲执行指令的函数地址,就是所述操作指令对应的函数地址。

可选地,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,包括:根据所述PC指针地址以及所述函数地址范围,确定所述PC指针地址是否位于所述函数地址范围内;在所述PC指针地址未位于所述函数地址范围内的情况下,记录所述PC指针地址;根据所述PC指针地址,生成错误信息,并将所述错误信息发送至诊断系统,以使得所述诊断系统根据所述错误信息定位错误代码。

可选地,在所述PC指针地址未位于所述函数地址范围内的情况下,所述方法还包括:置位错误标志位,在根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试之前,所述方法还包括:获取所述操作指令对应的PC指针;从所述PC指针中读取所述PC指针地址。

可选地,在所述PC指针地址位于所述函数地址范围内的情况下,所述方法还包括:在所述操作指令的中断时长达到预定时长的情况下,继续执行所述操作指令。

可选地,在中断所述操作指令之前,所述方法还包括:在目标地址设置断点,所述目标地址为目标变量的RAM地址。

可选地,在目标地址设置断点,包括:将观察点比较器的地址设置为所述目标地址。

可选地,读取函数地址范围,包括:确定所述目标函数;从MAP(地图)文件中读取函数调用关系,所述函数调用关系包括所述函数与所述函数的地址的对应关系;从所述函数调用关系中查找所述目标函数对应的所有所述地址,得到所述函数地址范围。

可选地,所述操作为写操作。

本发明实施例提供了一种电子设备,所述电子设备包括单片机以及所述单片机的调试装置,所述调试装置内置于所述单片机中,所述调试装置包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现至少以下步骤:

步骤S201,读取函数地址范围,所述函数地址范围为目标函数的地址集合,所述目标函数为对目标变量执行操作的所有函数,所述目标变量包括所述单片机中的全局变量;

步骤S202,在单片机处于调试监控模式且执行操作指令的情况下,中断所述操作指令,所述操作指令为请求操作所述目标变量的指令;

步骤S203,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试。

本文中的设备可以是服务器、PC、PAD、手机等。

可选地,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,包括:根据所述PC指针地址以及所述函数地址范围,确定所述PC指针地址是否位于所述函数地址范围内;在所述PC指针地址未位于所述函数地址范围内的情况下,记录所述PC指针地址;根据所述PC指针地址,生成错误信息,并将所述错误信息发送至诊断系统,以使得所述诊断系统根据所述错误信息定位错误代码。

可选地,在所述PC指针地址未位于所述函数地址范围内的情况下,所述方法还包括:置位错误标志位,在根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试之前,所述方法还包括:获取所述操作指令对应的PC指针;从所述PC指针中读取所述PC指针地址。

可选地,在所述PC指针地址位于所述函数地址范围内的情况下,所述方法还包括:在所述操作指令的中断时长达到预定时长的情况下,继续执行所述操作指令。

可选地,在中断所述操作指令之前,所述方法还包括:在目标地址设置断点,所述目标地址为目标变量的RAM地址。

可选地,在目标地址设置断点,包括:将观察点比较器的地址设置为所述目标地址。

可选地,读取函数地址范围,包括:确定所述目标函数;从MAP(地图)文件中读取函数调用关系,所述函数调用关系包括所述函数与所述函数的地址的对应关系;从所述函数调用关系中查找所述目标函数对应的所有所述地址,得到所述函数地址范围。

可选地,所述操作为写操作。

本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有至少如下方法步骤的程序:

步骤S201,读取函数地址范围,所述函数地址范围为目标函数的地址集合,所述目标函数为对目标变量执行操作的所有函数,所述目标变量包括所述单片机中的全局变量;

步骤S202,在单片机处于调试监控模式且执行操作指令的情况下,中断所述操作指令,所述操作指令为请求操作所述目标变量的指令;

步骤S203,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试。

可选地,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,包括:根据所述PC指针地址以及所述函数地址范围,确定所述PC指针地址是否位于所述函数地址范围内;在所述PC指针地址未位于所述函数地址范围内的情况下,记录所述PC指针地址;根据所述PC指针地址,生成错误信息,并将所述错误信息发送至诊断系统,以使得所述诊断系统根据所述错误信息定位错误代码。

可选地,在所述PC指针地址未位于所述函数地址范围内的情况下,所述方法还包括:置位错误标志位,在根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试之前,所述方法还包括:获取所述操作指令对应的PC指针;从所述PC指针中读取所述PC指针地址。

可选地,在所述PC指针地址位于所述函数地址范围内的情况下,所述方法还包括:在所述操作指令的中断时长达到预定时长的情况下,继续执行所述操作指令。

可选地,在中断所述操作指令之前,所述方法还包括:在目标地址设置断点,所述目标地址为目标变量的RAM地址。

可选地,在目标地址设置断点,包括:将观察点比较器的地址设置为所述目标地址。

可选地,读取函数地址范围,包括:确定所述目标函数;从MAP(地图)文件中读取函数调用关系,所述函数调用关系包括所述函数与所述函数的地址的对应关系;从所述函数调用关系中查找所述目标函数对应的所有所述地址,得到所述函数地址范围。

可选地,所述操作为写操作。

显然,本领域的技术人员应该明白,所述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

从以上的描述中,可以看出,本申请所述的实施例实现了如下技术效果:

1)、本申请所述的单片机的调试方法中,首先,读取对目标变量执行操作的所有目标函数的地址集合,得到函数地址范围;之后,在单片机处于调试监控模式,且执行操作所述目标变量的操作指令的情况下,中断所述操作指令;最后,根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,,实现了无调试器情况下的单片机调试,解决了现有技术中需要依赖调试器才能对单片机进行调试的问题,在没有外部调试器的时候可以快速定位单片机中的错误代码,可以适用于不同的测试场景,实用性较强。

2)、本申请所述的单片机的调试装置中,通过读取单元读取对目标变量执行操作的所有目标函数的地址集合,得到函数地址范围;通过中断单元在单片机处于调试监控模式,且执行操作所述目标变量的操作指令的情况下,中断所述操作指令;通过调试单元根据所述操作指令对应的PC指针地址以及所述函数地址范围,对所述单片机进行调试,,实现了无调试器情况下的单片机调试,解决了现有技术中需要依赖调试器才能对单片机进行调试的问题,在没有外部调试器的时候可以快速定位单片机中的错误代码,可以适用于不同的测试场景,实用性较强。

以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

技术分类

06120116338158