CN107015798A - 一种监测程序变量值的方法及系统 - Google Patents

一种监测程序变量值的方法及系统 Download PDF

Info

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
Application number
CN201710146971.0A
Other languages
English (en)
Inventor
张德朝
刘衍志
孙东辉
石训军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Xinjunte Intelligent Medical Devices Co Ltd
Original Assignee
Shenzhen Xinjunte Intelligent Medical Devices Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Xinjunte Intelligent Medical Devices Co Ltd filed Critical Shenzhen Xinjunte Intelligent Medical Devices Co Ltd
Priority to CN201710146971.0A priority Critical patent/CN107015798A/zh
Publication of CN107015798A publication Critical patent/CN107015798A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/22Procedural

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根据待获取程序变量的子编号,结合主编号以及上一级子编号计算的地址,计算出指向下一级对应变量结构体的对象的首地址,依此类推,直至计算出对应变量结构体的对象的成员地址。
CN201710146971.0A 2017-03-13 2017-03-13 一种监测程序变量值的方法及系统 Pending CN107015798A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 中国科学院软件研究所 基于共享内存的软件运行过程实时监测与控制方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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