CN107015798A - 一种监测程序变量值的方法及系统 - Google Patents
一种监测程序变量值的方法及系统 Download PDFInfo
- Publication number
- CN107015798A CN107015798A CN201710146971.0A CN201710146971A CN107015798A CN 107015798 A CN107015798 A CN 107015798A CN 201710146971 A CN201710146971 A CN 201710146971A CN 107015798 A CN107015798 A CN 107015798A
- Authority
- CN
- China
- Prior art keywords
- program
- numbering
- structural body
- value
- program variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/22—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明适用于计算机领域,提供了一种监测程序变量值的方法及系统。所述方法包括:声明至少一个变量结构体,每个变量结构体的成员为至少一个待监测的程序变量,声明监测程序变量值的结构体,监测程序变量值的结构体的成员为指向每个变量结构体的指针;定义变量结构体的对象和监测程序变量值的结构体的对象;初始化监测程序变量值的结构体的对象,将每个指针指向对应的变量结构体的对象;MCU接收到待获取程序变量值的信息后,解析所述待获取程序变量值的信息,得到待获取程序变量的编号,所述信息携带了程序变量的编号;MCU根据待获取程序变量的编号计算出待获取程序变量对应的绝对地址;MCU读取所述绝对地址中的程序变量值,并向用户反馈。本发明减少了程序的代码量,提高了执行效率。
Description
技术领域
本发明属于计算机领域,尤其涉及一种监测程序变量值的方法及系统。
背景技术
在嵌入式底层程序开发中,经常需要监测程序中变量的值的变化。使用仿真器在线调试的时候,可以在集成开发环境(IDE,Integrated Development Environment)的功能窗口上查看到程序中变量的值的变化,但是很多时候,不能够实现仿真器在线调试(例如安全问题、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字节对齐为例,声明电压变量结构体具体为:
typedef struct_VOLTAGE{
Uint8 U1;
Uint8 U2;
Uint8 U3;
Uint8 U4;
}VOLTAGE;
该电压变量结构体的成员为4个待监测的程序变量;
声明电流变量结构体具体为:
typedef struct_CURRENT{
Uint8 I1;
Uint8 I2;
Uint8 I3;
Uint8 I4;
}CURRENT;
该电流变量结构体的成员为4个待监测的程序变量。
声明监测程序变量值的结构体具体为
例如:
typedef struct_MONITOR{
VOLTAGE*Voltage;
CURRENT*Current;
}MONITOR;
表示声明监测程序变量值的结构体的成员为指向电压变量结构体的指针和指向电流变量结构体的指针。
S102、定义变量结构体的对象和监测程序变量值的结构体的对象;
S103、初始化监测程序变量值的结构体的对象,将每个指针指向对应的变量结构体的对象;
例如:
MONITOR Monitor;
Monitor.Voltage=&Voltage;
Monitor.Current=&Current;
表示将监测程序变量值的结构体的对象的第一个成员指针指向对应的电压变量结构体的对象,第二个成员指针指向对应的电流变量结构体的对象。
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、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种监测程序变量值的方法,其特征在于,所述方法包括:
声明至少一个变量结构体,每个变量结构体的成员为至少一个待监测的程序变量,声明监测程序变量值的结构体,监测程序变量值的结构体的成员为指向每个变量结构体的指针;
定义变量结构体的对象和监测程序变量值的结构体的对象;
初始化监测程序变量值的结构体的对象,将每个指针指向对应的变量结构体的对象;
MCU接收到待获取程序变量值的信息后,解析所述待获取程序变量值的信息,得到待获取程序变量的编号,所述信息携带了程序变量的编号;
MCU根据待获取程序变量的编号计算出待获取程序变量对应的绝对地址;
MCU读取所述绝对地址中的程序变量值,并向用户反馈。
2.如权利要求1所述的方法,其特征在于,所述声明至少一个变量结构体具体是声明两个或两个以上变量结构体;所述每个变量结构体的成员为至少一个待监测的程序变量具体为每个变量结构体的成员为两个或两个以上待监测的程序变量。
3.如权利要求1所述的方法,其特征在于,所述程序变量的编号包括主编号和至少一级子编号,主编号对应监测程序变量值的结构体的对象的成员编号,当程序变量的编号包括一级子编号时,子编号对应变量结构体的对象的成员编号,子编号对应的变量结构体为主编号对应的指针指向的变量结构体。
4.如权利要求3所述的方法,其特征在于,所述MCU根据待获取程序变量的编号计算出待获取程序变量对应的绝对地址具体为:
MCU根据待获取程序变量的主编号和至少一级子编号计算出待获取程序变量对应的绝对地址。
5.如权利要求4所述的方法,其特征在于,所述MCU根据待获取程序变量的主编号和至少一级子编号计算出待获取程序变量对应的绝对地址具体包括:
MCU根据待获取程序变量的主编号,计算出对应监测程序变量值的结构体的对象的成员指针指向的地址,即对应变量结构体的对象的首地址;
当程序变量的编号包括一级子编号时,MCU根据待获取程序变量的子编号,结合主编号计算的地址,计算出对应变量结构体的对象的成员地址;当程序变量的编号包括多级子编号时,MCU根据待获取程序变量的子编号,结合主编号以及上一级子编号计算的地址,计算出指向下一级对应变量结构体的对象的首地址,依此类推,直至计算出对应变量结构体的对象的成员地址。
6.一种监测程序变量值的系统,其特征在于,所述系统包括:
声明模块,用于声明至少一个变量结构体,每个变量结构体的成员为至少一个待监测的程序变量,声明监测程序变量值的结构体,监测程序变量值的结构体的成员为指向每个变量结构体的指针;
定义模块,用于定义变量结构体的对象和监测程序变量值的结构体的对象;
初始化模块,用于初始化监测程序变量值的结构体的对象,将每个指针指向对应的变量结构体的对象;
解析模块,用于MCU接收到待获取程序变量值的信息后,解析所述待获取程序变量值的信息,得到待获取程序变量的编号,所述信息携带了程序变量的编号;
计算模块,用于MCU根据待获取程序变量的编号计算出待获取程序变量对应的绝对地址;
反馈模块,用于MCU读取所述绝对地址中的程序变量值,并向用户反馈。
7.如权利要求6所述的系统,其特征在于,所述声明至少一个变量结构体具体是声明两个或两个以上变量结构体;所述每个变量结构体的成员为至少一个待监测的程序变量具体为每个变量结构体的成员为两个或两个以上待监测的程序变量。
8.如权利要求6所述的系统,其特征在于,所述程序变量的编号包括主编号和至少一级子编号,主编号对应监测程序变量值的结构体的对象的成员编号,当程序变量的编号包括一级子编号时,子编号对应变量结构体的对象的成员编号,子编号对应的变量结构体为主编号对应的指针指向的变量结构体。
9.如权利要求8所述的系统,其特征在于,所述计算模块具体用于:
MCU根据待获取程序变量的主编号和至少一级子编号计算出待获取程序变量对应的绝对地址。
10.如权利要求9所述的系统,其特征在于,所述计算模块具体包括:
第一子计算模块,用于MCU根据待获取程序变量的主编号,计算出对应监测程序变量值的结构体的对象的成员指针指向的地址,即对应变量结构体的对象的首地址;
第二子计算模块,用于当程序变量的编号包括一级子编号时,MCU根据待获取程序变量的子编号,结合主编号计算的地址,计算出对应变量结构体的对象的成员地址;当程序变量的编号包括多级子编号时,MCU根据待获取程序变量的子编号,结合主编号以及上一级子编号计算的地址,计算出指向下一级对应变量结构体的对象的首地址,依此类推,直至计算出对应变量结构体的对象的成员地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710146971.0A CN107015798A (zh) | 2017-03-13 | 2017-03-13 | 一种监测程序变量值的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710146971.0A CN107015798A (zh) | 2017-03-13 | 2017-03-13 | 一种监测程序变量值的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107015798A true CN107015798A (zh) | 2017-08-04 |
Family
ID=59439870
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710146971.0A Pending CN107015798A (zh) | 2017-03-13 | 2017-03-13 | 一种监测程序变量值的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107015798A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110737412A (zh) * | 2019-09-30 | 2020-01-31 | 北京奇艺世纪科技有限公司 | 一种信息输出的方法、装置、电子设备以及存储介质 |
CN112596769A (zh) * | 2020-12-21 | 2021-04-02 | 潍柴动力股份有限公司 | 一种变量管理方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999426A (zh) * | 2012-11-30 | 2013-03-27 | 北京邮电大学 | 基于抽象内存模型的非数值型数据的计算方法 |
CN103136107A (zh) * | 2011-12-03 | 2013-06-05 | 南京南瑞继保电气有限公司 | 一种嵌入式程序动态分配内存的变量调试方法 |
CN105740120A (zh) * | 2014-12-11 | 2016-07-06 | 中国科学院软件研究所 | 基于共享内存的软件运行过程实时监测与控制方法及系统 |
-
2017
- 2017-03-13 CN CN201710146971.0A patent/CN107015798A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103136107A (zh) * | 2011-12-03 | 2013-06-05 | 南京南瑞继保电气有限公司 | 一种嵌入式程序动态分配内存的变量调试方法 |
CN102999426A (zh) * | 2012-11-30 | 2013-03-27 | 北京邮电大学 | 基于抽象内存模型的非数值型数据的计算方法 |
CN105740120A (zh) * | 2014-12-11 | 2016-07-06 | 中国科学院软件研究所 | 基于共享内存的软件运行过程实时监测与控制方法及系统 |
Non-Patent Citations (5)
Title |
---|
AIDON_ZHANG: "结构体指针的声明、定义、运用", 《HTTPS://WWW.CNBLOGS.COM/AIDONZHANG/ARTICLES/5291046.HTML》 * |
DIRE: "C语言 指向结构体变量的指针", 《HTTPS://WWW.CNBLOGS.COM/DIRE/P/5222968.HTML》 * |
GOLDENSUN: "详解C++中的指针结构体数组以及指向结构体变量的指针", 《HTTPS://WWW.JB51.NET/ARTICLE/72278.HTM》 * |
岩枭: "c语言:通过指向结构体变量的指针变量输出结构体变量中成员的信息", 《HTTPS://BLOG.51CTO.COM/YAOYAOLX/1752313》 * |
欧阳春娟;朱平: "7.6 结构体嵌套", 《C语言程序设计》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110737412A (zh) * | 2019-09-30 | 2020-01-31 | 北京奇艺世纪科技有限公司 | 一种信息输出的方法、装置、电子设备以及存储介质 |
CN112596769A (zh) * | 2020-12-21 | 2021-04-02 | 潍柴动力股份有限公司 | 一种变量管理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10409574B2 (en) | Incremental whole program compilation of code | |
Burdy et al. | An overview of JML tools and applications | |
US9513880B2 (en) | Graphical function specialization | |
US7613954B2 (en) | Test executive with stack corruption detection | |
US20110047532A1 (en) | Methods and apparatuses for selective code coverage | |
US8887126B1 (en) | Version control in modeling environments | |
EP1130518A1 (en) | Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof | |
US20060136876A1 (en) | Test executive with buffer overwrite detection for parameters of user-supplied code modules | |
US9183114B2 (en) | Error detection on the stack | |
US20130024844A1 (en) | Continuous evaluation of program code and saving state information associated with program code | |
Bucur et al. | On software verification for sensor nodes | |
US20110047531A1 (en) | Methods and apparatuses for selective code coverage | |
US8595680B1 (en) | Constrained random error injection for functional verification | |
KR20090092617A (ko) | 프로세서 및 컴파일 방법 | |
US9727446B2 (en) | Modifiers that customize presentation of tested values to constraints | |
CN103955371B (zh) | 对串口仪表进行数据采集的通用软件模块的设计开发方法 | |
KR20100106409A (ko) | 다중 언어 소프트웨어 코드 분석 | |
CN102722438B (zh) | 一种内核调试的方法和设备 | |
US7596725B2 (en) | Efficient trace triggering | |
US7451358B2 (en) | Test executive system with automatic expression logging and parameter logging | |
CN107015798A (zh) | 一种监测程序变量值的方法及系统 | |
CN109344083B (zh) | 一种程序调试方法、装置、设备及可读存储介质 | |
CN108885574B (zh) | 用于监视和报告设计、编译和运行时的性能和正确性问题的系统 | |
US6813751B2 (en) | Creating standard VHDL test environments | |
CN105868092A (zh) | 一种日志文件的处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170804 |
|
RJ01 | Rejection of invention patent application after publication |