本发明属于计算机领域,尤其涉及一种监测程序变量值的方法及系统。
背景技术:
在嵌入式底层程序开发中,经常需要监测程序中变量的值的变化。使用仿真器在线调试的时候,可以在集成开发环境(ide,integrateddevelopmentenvironment)的功能窗口上查看到程序中变量的值的变化,但是很多时候,不能够实现仿真器在线调试(例如安全问题、pcb布板问题等),这时可以通过通讯端口(例如串口、spi接口、can接口等)来实现程序的调试和升级。在使用通讯端口进行调试程序的时候,为了监测程序中变量的值的变化,可以发送命令到底层的mcu,mcu解析命令,然后反馈相应的信息,实现对数据的监测。现有的技术方案中,使用if…else或者switch…case语句来实现监测程序变量值,在需要监测的变量比较多的情况下,代码量大,执行效率低。
技术实现要素:
本发明的目的在于提供一种监测程序变量值的方法及系统,旨在解决使用if…else或者switch…case语句来实现监测程序变量值,在需要监测的变量比较多的情况下,代码量大,执行效率低的问题。
第一方面,本发明提供了一种监测程序变量值的方法,所述方法包括:
声明至少一个变量结构体,每个变量结构体的成员为至少一个待监测的程序变量,声明监测程序变量值的结构体,监测程序变量值的结构体的成员为指向每个变量结构体的指针;
定义变量结构体的对象和监测程序变量值的结构体的对象;
初始化监测程序变量值的结构体的对象,将每个指针指向对应的变量结构体的对象;
mcu接收到待获取程序变量值的信息后,解析所述待获取程序变量值的信息,得到待获取程序变量的编号,所述信息携带了程序变量的编号;
mcu根据待获取程序变量的编号计算出待获取程序变量对应的绝对地址;
mcu读取所述绝对地址中的程序变量值,并向用户反馈。
第二方面,本发明提供了一种监测程序变量值的系统,所述系统包括:
声明模块,用于声明至少一个变量结构体,每个变量结构体的成员为至少一个待监测的程序变量,声明监测程序变量值的结构体,监测程序变量值的结构体的成员为指向每个变量结构体的指针;
定义模块,用于定义变量结构体的对象和监测程序变量值的结构体的对象;
初始化模块,用于初始化监测程序变量值的结构体的对象,将每个指针指向对应的变量结构体的对象;
解析模块,用于mcu接收到待获取程序变量值的信息后,解析所述待获取程序变量值的信息,得到待获取程序变量的编号,所述信息携带了程序变量的编号;
计算模块,用于mcu根据待获取程序变量的编号计算出待获取程序变量对应的绝对地址;
反馈模块,用于mcu读取所述绝对地址中的程序变量值,并向用户反馈。
在本发明中,由于监测程序变量值的结构体的成员为指向每个变量结构体的指针,mcu接收的待获取程序变量值的信息携带了程序变量的编号,mcu根据待获取程序变量的编号计算出待获取程序变量对应的绝对地址,获取程序变量值。因此减少了程序的代码量,提高了执行效率。
附图说明
图1是本发明实施例一提供的监测程序变量值的方法流程图。
图2是本发明实施例二提供的监测程序变量值的系统的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
实施例一:
请参阅图1,本发明实施例一提供的监测程序变量值的方法包括以下步骤:
s101、声明至少一个变量结构体,每个变量结构体的成员为至少一个待监测的程序变量,声明监测程序变量值的结构体,监测程序变量值的结构体的成员为指向每个变量结构体的指针;
由于本发明实施例一通常是应用于需要监测的程序变量比较多的情况,因此s101具体可以是声明两个或两个以上变量结构体,每个变量结构体的成员为两个或两个以上待监测的程序变量,以监测更多的程序变量。
例如,以32位mcu,数据存储为4字节对齐为例,声明电压变量结构体具体为:
typedefstruct_voltage{
uint8u1;
uint8u2;
uint8u3;
uint8u4;
}voltage;
该电压变量结构体的成员为4个待监测的程序变量;
声明电流变量结构体具体为:
typedefstruct_current{
uint8i1;
uint8i2;
uint8i3;
uint8i4;
}current;
该电流变量结构体的成员为4个待监测的程序变量。
声明监测程序变量值的结构体具体为
例如:
typedefstruct_monitor{
voltage*voltage;
current*current;
}monitor;
表示声明监测程序变量值的结构体的成员为指向电压变量结构体的指针和指向电流变量结构体的指针。
s102、定义变量结构体的对象和监测程序变量值的结构体的对象;
s103、初始化监测程序变量值的结构体的对象,将每个指针指向对应的变量结构体的对象;
例如:
monitormonitor;
monitor.voltage=&voltage;
monitor.current=¤t;
表示将监测程序变量值的结构体的对象的第一个成员指针指向对应的电压变量结构体的对象,第二个成员指针指向对应的电流变量结构体的对象。
s104、mcu接收到待获取程序变量值的信息后,解析所述待获取程序变量值的信息,得到待获取程序变量的编号,所述信息携带了程序变量的编号;
在本发明实施例一中,程序变量的编号可以包括主编号和至少一级子编号,主编号对应监测程序变量值的结构体的对象的成员编号(例如第一个成员为1,第二个成员为2,以此类推),当程序变量的编号包括一级子编号时,子编号对应变量结构体的对象的成员编号(例如第一个成员为1,第二个成员为2,以此类推),子编号对应的变量结构体为主编号对应的指针指向的变量结构体。本发明实施例一不限于两个层次,根据需求,可以多个层次。
例如,要获取s101步骤中举例中的u2的值,则程序变量的主编号设为1,子编号设为2。
s105、mcu根据待获取程序变量的编号计算出待获取程序变量对应的绝对地址;
在本发明实施例一中,s105具体为:
mcu根据待获取程序变量的主编号和至少一级子编号计算出待获取程序变量对应的绝对地址。
所述mcu根据待获取程序变量的主编号和至少一级子编号计算出待获取程序变量对应的绝对地址具体可以包括:
mcu根据待获取程序变量的主编号,计算出对应监测程序变量值的结构体的对象的成员指针指向的地址,即对应变量结构体的对象的首地址;
当程序变量的编号包括一级子编号时,mcu根据待获取程序变量的子编号,结合主编号计算的地址,计算出对应变量结构体的对象的成员地址;当程序变量的编号包括多级子编号时,mcu根据待获取程序变量的子编号,结合主编号以及上一级子编号计算的地址,计算出指向下一级对应变量结构体的对象的首地址,依此类推,直至计算出对应变量结构体的对象的成员地址。
s106、mcu读取所述绝对地址中的程序变量值,并向用户反馈。
实施例二:
请参阅图2,本发明实施例二提供的监测程序变量值的系统包括:
声明模块11,用于声明至少一个变量结构体,每个变量结构体的成员为至少一个待监测的程序变量,声明监测程序变量值的结构体,监测程序变量值的结构体的成员为指向每个变量结构体的指针;
由于本发明实施例二通常是应用于需要监测的程序变量比较多的情况,因此声明模块11具体可以是用于声明两个或两个以上变量结构体,每个变量结构体的成员为两个或两个以上待监测的程序变量,以监测更多的程序变量。当mcu是32位,数据存储为4字节对齐时,变量结构体的成员为4个待监测的程序变量。
定义模块12,用于定义变量结构体的对象和监测程序变量值的结构体的对象
初始化模块13,用于初始化监测程序变量值的结构体的对象,将每个指针指向对应的变量结构体的对象;
解析模块14,用于mcu接收到待获取程序变量值的信息后,解析所述待获取程序变量值的信息,得到待获取程序变量的编号,所述信息携带了程序变量的编号;
在本发明实施例二中,程序变量的编号可以包括主编号和至少一级子编号,主编号对应监测程序变量值的结构体的对象的成员编号(例如第一个成员为1,第二个成员为2,以此类推),当程序变量的编号包括一级子编号时,子编号对应变量结构体的对象的成员编号(例如第一个成员为1,第二个成员为2,以此类推),子编号对应的变量结构体为主编号对应的指针指向的变量结构体。本发明实施例一不限于两个层次,根据需求,可以多个层次。
计算模块15,用于mcu根据待获取程序变量的编号计算出待获取程序变量对应的绝对地址;
在本发明实施例二中,所述计算模块具体可以用于:mcu根据待获取程序变量的主编号和至少一级子编号计算出待获取程序变量对应的绝对地址。
所述计算模块具体可以包括:
第一子计算模块,用于mcu根据待获取程序变量的主编号,计算出对应监测程序变量值的结构体的对象的成员指针指向的地址,即对应变量结构体的对象的首地址;
第二子计算模块,用于当程序变量的编号包括一级子编号时,mcu根据待获取程序变量的子编号,结合主编号计算的地址,计算出对应变量结构体的对象的成员地址;当程序变量的编号包括多级子编号时,mcu根据待获取程序变量的子编号,结合主编号以及上一级子编号计算的地址,计算出指向下一级对应变量结构体的对象的首地址,依此类推,直至计算出对应变量结构体的对象的成员地址。
反馈模块16,用于mcu读取所述绝对地址中的程序变量值,并向用户反馈。
在本发明中,由于监测程序变量值的结构体的成员为指向每个变量结构体的指针,mcu接收的待获取程序变量值的信息携带了程序变量的编号,mcu根据待获取程序变量的编号计算出待获取程序变量对应的绝对地址,获取程序变量值。因此减少了程序的代码量,提高了执行效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如rom/ram、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。