CN109684202B - 一种在应用中调试嵌入式系统程序中函数功能的方法 - Google Patents
一种在应用中调试嵌入式系统程序中函数功能的方法 Download PDFInfo
- Publication number
- CN109684202B CN109684202B CN201811426059.1A CN201811426059A CN109684202B CN 109684202 B CN109684202 B CN 109684202B CN 201811426059 A CN201811426059 A CN 201811426059A CN 109684202 B CN109684202 B CN 109684202B
- Authority
- CN
- China
- Prior art keywords
- function
- parameters
- analyzing
- statement
- funcnametable
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种在应用中调试嵌入式系统程序中函数功能的方法,包括:在嵌入式系统程序中建立函数指针与函数原型之间的对应表格,并添加函数原型解析函数,使用通讯口接收函数调用字符串并进行解析,然后匹配查找表,查找到需要执行的函数指针,最后跳转去执行函数,并返回执行结果。本发明提供的函数调试方法,可以在不影响程序功能的前提下进行函数功能的调试,并且无需调试工具的参与。在程序已经执行的时候避免了输出调试信息的方法来进行应用层调试。
Description
技术领域
本发明涉及一种在应用中调试嵌入式系统程序中函数功能的方法。
背景技术
在软件设计领域,调试是开发过程中必不可少的环节,通用的桌面操作系统与嵌入式操作系统在调试环境上存在明显的差别。前者,调试器与被调试的程序往往是运行在同一台机器的相同的操作系统上的两个进程,调试器进程通过操作系统专门提供的调用接口 ( 早期 UNIX 系统的 ptrace 调用、如今的进程文件系统等 ) 控制、访问被调试程序进程。
后者 ( 又称为远程调试 ),为了向系统开发人员提供灵活、方便的调试界面,调试器还是运行于通用桌面操作系统的应用程序,被调试的程序则运行于基于特定硬件平台的嵌入式操作系统 ( 也称目标操作系统 )。这就带来以下问题 :调试器与被调试程序如何通信,被调试程序产生异常如何及时通知调试器,调试器如何控制、访问被调试程序,调试器如何识别有关被调试程序的多任务信息并控制某一特定任务,调试器如何处理某些与目标硬件平台相关的信息 ( 如目标平台的寄存器信息、机器代码的反汇编等 )。总之,嵌入式系统的开发调试是比较困难的。
目前嵌入式系统在产品定型之后,一旦产品在应用中出现问题,在不断电的情况下对应用程序进行调试目前办法不多,主要使用通讯接口输出调试信息、或者使用专用软件进行功能测试,无法深入对程序进行调试。
使用通讯接口输出调试信息的方法在程序执行时不停调试信息,有以下缺点:1)占用CPU资源与内存资源,影响程序执行的实时性与稳定性;2)调试信息的覆盖面有限,无法覆盖所有的函数,否则调试信息将会相当庞大;
使用专用软件进行功能调试,只能测试功能是否正常,定位太宽泛,无法覆盖到函数的执行。
发明内容
本发明所要解决的技术问题是克服现有技术的缺陷,提供一种在应用中调试嵌入式系统程序中函数功能的方法,通过建立函数指针与函数原型之间的对应关系,通过通讯口就可以直接进行函数调用执行,并返回执行结果,为更加细化的调试程序提供了极大的方便。
为解决上述技术问题,本发明提供一种在应用中调试嵌入式系统程序中函数功能的方法,其特征是,包括:在嵌入式系统程序中建立函数指针与函数原型之间的对应表格,并添加函数原型解析函数,使用通讯口接收函数调用字符串并进行解析,然后匹配查找表,查找到需要执行的函数指针,最后跳转去执行函数,并返回执行结果。
进一步地,建立函数指针与函数原型之间的对应表格,建立的结构体为:
struct FuncName
{
void *func;
const char *name; //函数原型字符串
};
其中func为函数指针,name为函数原型字符串。
进一步地,接收函数调用字符串使用的通讯口为串口、USB口或者以太网接口。
进一步地,解析函数调用语句,建立的结构体为:
struct InfoFunc
{
unsigned char id; //函数id
unsigned char InputParaNum; //输入参数数量
unsigned char InputParaType[cstMaxPara]; //每个输入参数的类型
unsigned char InputParaStrlen[cstMaxPara]; //输入参数的字符串长度
unsigned char OutputParaEnable; //是否包含输出参数
unsigned char OutputParaType; //返回参数类型
};
id用于存放指定解析函数调用语句中函数在FuncNameTable中的位置,InputParaNum用于存放输入参数数量,InputParaType[cstMaxPara]用于存放每个输入参数的类型,OutputParaEnable表示是否包含输出参数,等于0没有返回值,等于1有返回值,OutputParaType为返回参数类型,InputParaStrlen[cstMaxPara]为函数调用语句输入参数的字符串长度。
进一步地,解析执行函数调用语句的方法包括如下步骤:
1)解析函数调用语句中的函数名;
2)解析FuncNameTable表中的参数类型与个数;
3)解析函数调用语句中的参数并执行。
进一步地,解析函数调用语句中的函数名的具体方法为:从函数调用语句字符串中找出函数名,然后在FuncNameTable中进行匹配,即可找到函数调用语句是要执行那个函数,就找到了函数的应用程序中的函数指针,得到InfoFunc结构体的id值。
进一步地,解析FuncNameTable表中的参数类型与个数的具体方法为:函数调用语句中的函数名解析完成后,根据FuncNameTable中函数原型字符串中函数名之前字符串、括号以及参数类型之间的逗号,解析出输入参数类型与个数以及返回值类型,得到InfoFunc结构体的除id值之外的其他值。
进一步地,解析函数调用语句中的参数并执行的具体方法为:分配一块内存用于存储函数参数,先读取输入参数类型,再根据参数类型去进行函数调用语句中参数对应字符串的转换,得到实际的输入参数,然后调用FuncNameTable的函数指针并执行。
本发明所达到的有益效果:本发明提供的函数调试方法,可以在不影响程序功能的前提下进行函数功能的调试,并且无需调试工具的参与。在程序已经执行的时候避免了输出调试信息的方法来进行应用层调试。
具体实施方式
下面对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
本发明提供一种在应用中调试嵌入式系统程序中函数功能的方法,包括:在嵌入式系统程序中建立函数指针与函数原型之间的对应表格,并添加函数原型解析函数,使用串口、USB口或者以太网接口接收函数调用字符串并进行解析,然后匹配查找表,查找到需要执行的函数指针,最后跳转去执行函数,并返回执行结果。
本发明中,建立函数指针与函数原型之间的对应表格,建立的结构体为:
struct FuncName
{
void *func;
const char *name; //函数原型字符串
};
其中func为函数指针,name为函数原型字符串。
举例说明,如果需要对max与min两个函数进行调试,则建立如下对应表格;
struct FuncName FuncNameTable[]=
{
(void*)max,"unsigned int max(unsigned int a,unsigned int b)",
(void*)min,"unsigned int min(unsigned int a,unsigned int b)"
};
函数名称就是函数指针,再加函数原型字符串添加进来即可。
本发明中,解析函数调用语句,建立的结构体为:
struct InfoFunc
{
unsigned char id; //函数id
unsigned char InputParaNum; //输入参数数量
unsigned char InputParaType[cstMaxPara]; //每个输入参数的类型
unsigned char InputParaStrlen[cstMaxPara]; //输入参数的字符串长度
unsigned char OutputParaEnable; //是否包含输出参数
unsigned char OutputParaType; //返回参数类型
};
id用于存放指定解析函数调用语句中函数在FuncNameTable中的位置,InputParaNum用于存放输入参数数量,InputParaType[cstMaxPara]用于存放每个输入参数的类型,OutputParaEnable表示是否包含输出参数,等于0没有返回值,等于1有返回值,OutputParaType为返回参数类型,InputParaStrlen[cstMaxPara]为函数调用语句输入参数的字符串长度。
本发明中,解析执行函数调用语句的方法包括如下步骤:
1)解析函数调用语句中的函数名:从函数调用语句字符串中找出函数名,然后在FuncNameTable中进行匹配,即可找到函数调用语句是要执行那个函数,就找到了函数的应用程序中的函数指针,得到InfoFunc结构体的id值。
2)解析FuncNameTable表中的参数类型与个数:函数调用语句中的函数名解析完成后,根据FuncNameTable中函数原型字符串中函数名之前字符串、括号以及参数类型之间的逗号,解析出输入参数类型与个数以及返回值类型,得到InfoFunc结构体的除id值之外的其他值。
3)解析函数调用语句中的参数并执行:分配一块内存用于存储函数参数,先读取输入参数类型,再根据参数类型去进行函数调用语句中参数对应字符串的转换,得到实际的输入参数,然后调用FuncNameTable的函数指针并执行。
本发明可以广泛用于中小型嵌入式系统中需要进行程序调试的场合,可以在产品不掉电的情况下直接通过通讯口进行程序中具体函数的调试,并且具体函数的调试不会中断产品应用程序的执行,非常适合要求苛刻、应用中不可随意断电的嵌入式系统的工业应用。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (3)
1.一种在应用中调试嵌入式系统程序中函数功能的方法,其特征是,包括:在嵌入式系统程序中建立函数指针与函数原型之间的对应表格,并添加函数原型解析函数,使用通讯口接收函数调用字符串并进行解析,然后匹配查找表,查找到需要执行的函数指针,最后跳转去执行函数,并返回执行结果;
建立函数指针与函数原型之间的对应表格,建立的结构体为:
struct FuncName
{
void *func;
const char *name; //函数原型字符串
};
其中func为函数指针,name为函数原型字符串;
解析执行函数调用语句的方法包括如下步骤:
1)解析函数调用语句中的函数名;
2)解析FuncNameTable表中的参数类型与个数,FuncNameTable为建立的FuncName结构体类型的表格;
3)解析函数调用语句中的参数并执行;
解析函数调用语句中的函数名的具体方法为:从函数调用语句字符串中找出函数名,然后在FuncNameTable中进行匹配,即可找到函数调用语句要执行的函数,就找到了函数的应用程序中的函数指针,得到InfoFunc结构体的id值;
解析FuncNameTable表中的参数类型与个数的具体方法为:函数调用语句中的函数名解析完成后,根据FuncNameTable中函数原型字符串中函数名之前字符串、括号以及参数类型之间的逗号,解析出输入参数类型与个数以及返回值类型,得到InfoFunc结构体的除id值之外的其他值;
解析函数调用语句中的参数并执行的具体方法为:分配一块内存用于存储函数参数,先读取输入参数类型,再根据参数类型去进行函数调用语句中参数对应字符串的转换,得到实际的输入参数,然后调用FuncNameTable的函数指针并执行。
2.根据权利要求1所述的一种在应用中调试嵌入式系统程序中函数功能的方法,其特征是,接收函数调用字符串使用的通讯口为串口、USB口或者以太网接口。
3.根据权利要求1所述的一种在应用中调试嵌入式系统程序中函数功能的方法,其特征是,解析函数调用语句,建立的结构体为:
struct InfoFunc
{
unsigned char id; //函数id
unsigned char InputParaNum; //输入参数数量
unsigned char InputParaType[cstMaxPara]; //每个输入参数的类型
unsigned char InputParaStrlen[cstMaxPara]; //输入参数的字符串长度
unsigned char OutputParaEnable; //是否包含输出参数
unsigned char OutputParaType; //返回参数类型
};
id用于存放指定解析函数调用语句中函数在FuncNameTable中的位置,InputParaNum用于存放输入参数数量,InputParaType[cstMaxPara]用于存放每个输入参数的类型,OutputParaEnable表示是否包含输出参数,等于0没有返回值,等于1有返回值,OutputParaType为返回参数类型,InputParaStrlen[cstMaxPara]为函数调用语句输入参数的字符串长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811426059.1A CN109684202B (zh) | 2018-11-27 | 2018-11-27 | 一种在应用中调试嵌入式系统程序中函数功能的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811426059.1A CN109684202B (zh) | 2018-11-27 | 2018-11-27 | 一种在应用中调试嵌入式系统程序中函数功能的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109684202A CN109684202A (zh) | 2019-04-26 |
CN109684202B true CN109684202B (zh) | 2022-06-17 |
Family
ID=66185893
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811426059.1A Active CN109684202B (zh) | 2018-11-27 | 2018-11-27 | 一种在应用中调试嵌入式系统程序中函数功能的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109684202B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799671A (zh) * | 2019-11-13 | 2021-05-14 | 北京配天技术有限公司 | 一种函数解析方法及其计算机设备 |
CN111400172B (zh) * | 2020-03-03 | 2023-04-28 | 北京声智科技有限公司 | 程序调试方法及装置 |
CN111459827A (zh) * | 2020-04-07 | 2020-07-28 | 长沙景嘉微电子股份有限公司 | 一种跨平台调试shell的实现方法、装置和计算机 |
CN112799816B (zh) * | 2021-02-01 | 2023-03-31 | 安徽芯纪元科技有限公司 | 一种嵌入式操作系统的多任务程序指定任务调试方法 |
CN117311672A (zh) * | 2022-06-24 | 2023-12-29 | 比亚迪股份有限公司 | 软件模型架构、电池管理系统控制器和车辆 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102117241A (zh) * | 2009-12-30 | 2011-07-06 | 华为技术有限公司 | 一种多核系统调试方法和多核系统 |
CN103678099A (zh) * | 2012-09-10 | 2014-03-26 | 国网电力科学研究院 | 一种实现硬件平台与软件平台通讯的方法以及装置 |
CN104050080A (zh) * | 2014-06-09 | 2014-09-17 | 汉柏科技有限公司 | 用户态调试linux内核的方法及系统 |
CN106708488A (zh) * | 2015-11-17 | 2017-05-24 | 中兴通讯股份有限公司 | 一种多应用程序的调试系统和方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9792170B2 (en) * | 2013-08-30 | 2017-10-17 | Cisco Technology, Inc. | Correcting operational state and incorporating additional debugging support into an online system without disruption |
-
2018
- 2018-11-27 CN CN201811426059.1A patent/CN109684202B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102117241A (zh) * | 2009-12-30 | 2011-07-06 | 华为技术有限公司 | 一种多核系统调试方法和多核系统 |
CN103678099A (zh) * | 2012-09-10 | 2014-03-26 | 国网电力科学研究院 | 一种实现硬件平台与软件平台通讯的方法以及装置 |
CN104050080A (zh) * | 2014-06-09 | 2014-09-17 | 汉柏科技有限公司 | 用户态调试linux内核的方法及系统 |
CN106708488A (zh) * | 2015-11-17 | 2017-05-24 | 中兴通讯股份有限公司 | 一种多应用程序的调试系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109684202A (zh) | 2019-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684202B (zh) | 一种在应用中调试嵌入式系统程序中函数功能的方法 | |
CN109800159B (zh) | 程序调试方法、程序调试装置、终端设备及存储介质 | |
US5526485A (en) | Just-in-time debugging system and methods under the windows 3.0 and windows 3.1 operating systems | |
US6145123A (en) | Trace on/off with breakpoint register | |
US8266608B2 (en) | Post-compile instrumentation of object code for generating execution trace data | |
US20110191752A1 (en) | Method and System for Debugging of Software on Target Devices | |
US8898647B2 (en) | Method and apparatus for test coverage analysis | |
US9152531B2 (en) | Post-compile instrumentation of object code for generating execution trace data | |
US6023580A (en) | Apparatus and method for testing computer systems | |
WO2021057057A1 (zh) | 操作系统级程序的目标码覆盖率测试方法、系统及介质 | |
US20030074650A1 (en) | Debugger operating system for embedded systems | |
US7900198B2 (en) | Method and system for parameter profile compiling | |
US20020162051A1 (en) | Synchronous breakpoint system and method | |
US20070079288A1 (en) | System and method for capturing filtered execution history of executable program code | |
JPH0844590A (ja) | ソフトウエアシステムの選択テスト装置及びその方法 | |
US20080127119A1 (en) | Method and system for dynamic debugging of software | |
CN113778616A (zh) | 一种电力物联网终端虚拟化模拟仿真平台及仿真方法 | |
US20080127118A1 (en) | Method and system for dynamic patching of software | |
US6560722B1 (en) | Developing and deploying real-time high-performance applications with DSPs | |
CN102455941A (zh) | 一种基于范式的多任务调度方法、装置及通信终端 | |
US20050050524A1 (en) | Generating software test information | |
Gui et al. | Firmnano: Toward iot firmware fuzzing through augmented virtual execution | |
Håkansson | RAUK: Automatic Schedulability Analysis of RTIC Applications Using Symbolic Execution | |
CN110941537A (zh) | 一种基于行为状态的进程检测方法及检测装置 | |
Zhao et al. | Towards Understanding Bugs in WSN Applications |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200518 Address after: 211106, No. 19, good faith Road, Jiangning District, Jiangsu, Nanjing Applicant after: NARI TECHNOLOGY Co.,Ltd. Address before: Nan Shui Road Gulou District of Nanjing city of Jiangsu Province, No. 8 210003 Applicant before: NARI TECHNOLOGY Co.,Ltd. Applicant before: NARI GROUP Corp. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |