CN109960590A - 一种优化嵌入式***诊断打印的方法 - Google Patents
一种优化嵌入式***诊断打印的方法 Download PDFInfo
- Publication number
- CN109960590A CN109960590A CN201910236045.1A CN201910236045A CN109960590A CN 109960590 A CN109960590 A CN 109960590A CN 201910236045 A CN201910236045 A CN 201910236045A CN 109960590 A CN109960590 A CN 109960590A
- Authority
- CN
- China
- Prior art keywords
- function
- string
- format
- parameter
- diagnostic
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1202—Dedicated interfaces to print systems specifically adapted to achieve a particular effect
- G06F3/1218—Reducing or saving of used resources, e.g. avoiding waste of consumables or improving usage of hardware resources
- G06F3/122—Reducing or saving of used resources, e.g. avoiding waste of consumables or improving usage of hardware resources with regard to computing resources, e.g. memory, CPU
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Human Computer Interaction (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及计算机程序领域,具体地说,是一种优化嵌入式***诊断打印的方法,包括以下步骤:步骤一:定义诊断函数宏A和函数B;步骤二:定义函数宏A与函数B的引用关系;步骤三:使能编译器在汇编C代码之前生成*.i文件;步骤四:编译规则对步骤三步骤中的每个编译单位进行诊断函数调用代码串进行模式匹配提取,修改,替换,并同时更新诊断数据库文件;步骤五:函数B运行时,获取“格式化字符串哈希值”参数;步骤六:得到格式化串,最后把格式化串输出到终端显示器上。
Description
技术领域
本发明涉及计算机程序领域,具体地说,是一种优化嵌入式***诊断打印的方法。
背景技术
随着嵌入式***的发展,***越来越庞大,诊断打印的需求量也越来越大,但嵌入式***的CPU计算力资源很宝贵,如果用传统的printf的方式来格式化输出,耗费了大量的计算力资源和大量的外设输出带宽。从而造成***的overhead过大,如何改善现有的诊断打印输出方式,降低诊断功能的***开销变得非常迫切。
现有的嵌入式***软件通过printf函数格式化应用程序的诊断字符串,再通过嵌入式硬件的外设接口把格式化的字符串输出到windows工具软件,上位机工具软件接收到后,显示在屏幕上,便于软件开发人员定位,跟踪嵌入式程序运行情况。
在嵌入式***软件输出的诊断字符串量非常多(比如该嵌入式由多个高速CPU内核组成,诊断的输出量就变得非常庞大),并且嵌入式***外设的接口吞带宽又是有限且宝贵时,使用传统的诊断输出方法会出现两个明显的弊端,如下:
其一:大量的诊断信息字符串需要格式化,会消耗大量的,本就宝贵的嵌入式CPU计算力资源(格式化函数对格式化串进行逐个字符解析,识别格式符后,对参数进行格式化转换),从而造成该***上的功能模块的计算力不足;
其二:嵌入式***硬件的外设接口的吞吐量是有限且固定的,若诊断信息输出带宽超过了外设接口的硬件带宽能力,会出现诊断信息丢失,不利于程序调试。
发明内容
为了解决上述技术问题,解决诊断打印的***开销与嵌入式***的计算力资源的冲突,本发明披露了一种优化嵌入式***诊断打印的方法,可以极大改善诊断打印的***开销,并且可以降低诊断输出对外设接口带宽需求量。
本发明采用的具体技术方案如下:
步骤一:定义诊断函数宏A
A(程序模块ID,过滤类型,格式化字符串,…),参数说明如下
“程序模块ID”:整形,指示这个诊断信息的所有者,
“过滤类型”:整形,用比特域指示该模块的诊断信息分类,用于过滤诊断信息,
“格式化字符串”:字符串中以‘%’来表示格式说明符,说明符类型同C99中C语言库函数printf的格式化符相同。并简化了支持的格式符类型,当前为提高打印效率,只支持32bit整形,单精度浮点数,双精度浮点数的格式化,不支持%s。
…:C语言的变参列表
函数B
函数B(格式化字符串哈希值,参数内存尺寸,程序模块ID,过滤类型,格式化字符串,…),参数说明如下:
“格式化字符串哈希值”:把“格式化字符串”转化成一个32bit的整形哈希值。
“参数内存尺寸”:指示变参的参数内存大小,计量单位为字(word)。
其他参数类型同函数宏A。
步骤二:定义函数宏A与函数B的引用关系
#define A(程序模块ID,过滤类型,格式化字符串,…)\
函数B(0,0,程序模块ID,过滤类型,格式化字符串,##__VA_ARGS__)
函数B中的参数在宏扩展中的缺省定义;
格式化字符串哈希值:
0:指示编译脚本需要对“格式化字符串”进行hash计算,转换后的哈希值重新赋值给“格式化字符哈希值”参数;
0xFFFFFFFF:指示编译脚本不需要对“格式化字符串”进行hash计算。
编译脚本进行字符串转换时需要解决0,0xFFFFFFFF这两特殊值的散列冲突。
##__VA_ARGS__:C语言的变参宏
步骤三:使能编译器在汇编C代码之前生成*.i文件,读入C文件中的引用文件并进行宏扩展,生成一个高级语言汇编前的临时文件,其次在编译规则里***代码字符处理脚本,主要功能为提取函数B调用代码串S(函数A的调用代码已经被扩展为函数B的代码调用),根据应用程序传入的“格式化字符串哈希”值规则,若为0,则对“格式化字符串”参数串进行哈希转换为整形值n,并根据格式符‘%’计算变参内存大小为整形m(单位为字),然后修改S中的“格式化字符串哈希”参数0为n,“参数内存尺寸”参数0为m,得到一个新的代码串S’,最后替换C文件中的对函数B的调用代码串S为S’,同时每个编译单位文件都要生成一个诊断数据库文件,该文件的每个item为哈希值与“格式化字符串参数”的一一映射。
步骤四:编译规则对步骤三步骤中的每个编译单位文件重复执行步骤三的任务,直到整个编译项目的所有编译单位都完成了步骤三的任务。
步骤五:函数B运行时,获取“格式化字符串哈希值”参数,根据“参数内存尺寸”参数获取变参内存大小m,通过标准C的va_start获取变参列表,并通过标准C的va_arg宏和m快速获取变参内存,接着把参数内存和哈希值按诊断帧格式组织成一个二进制负载(图3)。最后把诊断二进制负载包以流的形式写入诊断IO任务的流缓存。
步骤六:诊断IO任务把流缓存发送到嵌入式***外设接口。
步骤七:上位机软件接收IO收到的数据流,识别出每个诊断负载的边界,并分拣出一个个完整的诊断负载包,按照诊断帧格式结构化提取出诊断负载中的哈希值和参数二进制内存,接着从诊断数据库里寻找该hash值对应的格式化参数字符串,调用格式化函数对参数二进制内存进行格式化,进而得到诊断打印的格式化串,最后把格式化串输出到终端显示器上。
本发明的有益效果:极大降低嵌入式***生产诊断信息时对CPU计算力需求,同时,极大降低嵌入式***传输诊断信息时对外设带宽需求。
附图说明
图1是本发明中是对步骤一、步骤二对函数原型的定义;
图2是本发明中对步骤三、步骤四的说明图;
图3是本发明中步骤五中,应用层调用函数宏A后,组织成一个二进制的诊断包;
图4是本发明中windows侧诊断软件如何把图3的诊断数据包,格式化为一个可视化的字符串;
图5是本发明中步骤五的流程图。
具体实施方式
为了加深对本发明的理解,下面将结合附图和实施例对本发明做进一步详细描述,该实施例仅用于解释本发明,并不对本发明的保护范围构成限定。
实施例:如图1所示,步骤一、步骤二中,SL_LOG API是提供给应用层的,可以通过该API实现类printf的功能。其中特征值DEFAULT_HASVALUE指示编译脚本是否实施打印优化,若值为0则实施打印优化,若为0xFFFFFFF,则不进行打印优化。DEFAULT_PRINT_PARAM_MEM_SZ为参数内存初始size;
若DEFAULT_HASVALUE为0,则编译脚本会对格式化串进行分析,’%’格式符会指示每个参数占用的内存,单位为word,每个参数内存最小单位是word。
如图2所示,编译器打开“-E”可以预处理*.C文件,完成预处理后生成*.i文件(临时文件)。*.i文件就是我们编译脚本的输入,利用python可以很方便进行文字处理。脚本遍历所有的行,若发现匹配子串“DIAG_LOG_PRINT(0,”的行,则提取该字符行S,寻找该行中的格式化字符串,若该字符串存在于哈希字典中,则用字典中的哈希值替换“DIAG_LOG_PRINT”函数的第一个参数,其次通过分析格式化串中的格式符‘%’类型来确定参数内存的大小m(单位为字),m替换“DIAG_LOG_PRINT”函数的第二个参数。DIAG_LOG_PRINT的第一个,第二个参数更新好后,得到字符行S’,再把S’替换i文件中的S。
最后通过python的pike模块的dump方法将格式化字符串和对应的哈希值的映射关系写入到诊断数据库文件。
如图3所示,应用层调用函数宏A后,组织成一个二进制的诊断包,这个包里通过“格式化字符哈希ID”、“参数内存尺寸”、参数内存三个数据域来表征一个打印的字符串,函数B里花费很少的计算力就可以构造这个诊断包,也没有真正对打印的字符串进行格式化,而是收集要格式化的信息,把这些信息提交给计算力充足的windows诊断软件去执行具体的格式化。从这里我们可以看到下位机得到两个优化,其一:长度不同的格式化字符串简化为一个哈希值,减少在外设接口上传输。其二:不需要做打印格式化,只需要提取参数内存就够,极大减少了对cpu的计算力,把格式化的计算力转移到计算力充足的诊断软件上(运行在个人PC上)。
如图4所示,图3的诊断数据包,格式化为一个可视化的字符串。
以上显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (4)
1.一种优化嵌入式***诊断打印的方法,其特征在于,包括以下步骤:
步骤一:定义诊断函数宏A和函数原型B,
设置A(程序模块ID,过滤类型,格式化字符串)
函数原型B(格式化字符串哈希值,参数内存尺寸,程序模块ID,过滤类型,格式化字符串);
步骤二:定义函数宏A与函数原型B的引用关系,
#define A(程序模块ID,过滤类型,格式化字符串)
函数原型B(0,0,程序模块ID,过滤类型,格式化字符串,##__VA_ARGS__)
函数原型B中的参数若在宏函数A中不存在,则使用缺省定义,包括如下:
1)格式化字符串哈希值:在函数宏A中不存在,缺省使用特征值0,0值表征为启用打印优化功能
2)参数内存尺寸:在宏函数A中不存在,缺省使用特征值0,0值表征为变参内存的大小为0,即,打印函数函数不存在变参列表;
步骤三:使能编译器在汇编C代码之前生成*.i文件,读入C文件中的引用文件并进行宏扩展,生成一个高级语言汇编前的临时文件,其次在编译规则里***代码字符处理脚本,主要功能为提取函数B调用代码串S(函数A的调用代码已经被扩展为函数B的代码调用),根据应用程序传入的“格式化字符串哈希”值规则,若为0,则对“格式化字符串”参数串进行哈希转换为整形值n,并根据格式符‘%’计算变参内存大小为整形m(单位为字),然后修改S中的“格式化字符串哈希”参数0为n,“参数内存尺寸”参数0为m,得到一个新的代码串S’,最后替换C文件中的对函数B的调用代码串S为S’,同时每个编译单位文件都要生成一个诊断数据库文件,该文件的每个item为哈希值与“格式化字符串参数”的一一映射;
步骤四:编译规则对步骤三步骤中的每个编译单位文件重复执行步骤三的任务,直到整个编译项目的所有编译单位都完成了步骤三的任务;
步骤五:函数B运行时,获取“格式化字符串哈希值”参数,根据“参数内存尺寸”参数获取变参内存大小m,通过标准C的va_start获取变参列表,并通过标准C的va_arg宏和m快速获取变参内存,接着把参数内存和哈希值按诊断帧格式组织成一个二进制负载(图3),最后把诊断二进制负载包以流的形式写入诊断IO任务的流缓存;
步骤六:诊断IO任务把流缓存发送到嵌入式***外设接口;
步骤七:上位机软件接收IO收到的数据流,识别出每个诊断负载的边界,并分拣出一个个完整的诊断负载包,按照诊断帧格式结构化提取出诊断负载中的哈希值和参数二进制内存,接着从诊断数据库里寻找该hash值对应的格式化参数字符串,调用格式化函数对参数二进制内存进行格式化,进而得到诊断打印的格式化串,最后把格式化串输出到终端显示器上。
2.根据权利要求1所述的优化嵌入式***诊断打印的方法,其特征在于,所述步骤一中,
模块ID:整形,指示这个诊断信息的所有者;
过滤类型:整形,用比特域指示该模块的诊断信息分类,用于过滤诊断信息;
格式化字符串:字符串中以‘%’来表示格式说明符,格式符类型同C99中C语言库函数printf的格式化符,并简化了支持的格式符类型,当前为提高打印效率,只支持32bit整形,单精度浮点数,双精度浮点数的格式化,不支持%s。
3.根据权利要求1所述的优化嵌入式***诊断打印的方法,其特征在于,所述步骤一中,
函数B(格式化字符串哈希值,参数内存尺寸,程序模块ID,过滤类型,格式化字符串),
其中,格式化字符串哈希值:把“格式化字符串”转化成一个32bit的整形哈希值;
参数内存尺寸:指示变参的参数内存大小,计量单位为字(word)。
4.根据权利要求1所述的优化嵌入式***诊断打印的方法,其特征在于,所述步骤二中,格式化字符串哈希
0:指示编译脚本需要对“格式化字符串”进行hash计算,转换后的哈希值重新赋值给“格式化字符哈希值”参数;
0xFFFFFFFF:指示编译脚本不需要对“格式化字符串”进行hash计算;
编译脚本进行字符串转换时负责对0,0xFFFFFFFF这两特殊值的散列冲突。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910236045.1A CN109960590B (zh) | 2019-03-26 | 2019-03-26 | 一种优化嵌入式***诊断打印的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910236045.1A CN109960590B (zh) | 2019-03-26 | 2019-03-26 | 一种优化嵌入式***诊断打印的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109960590A true CN109960590A (zh) | 2019-07-02 |
CN109960590B CN109960590B (zh) | 2021-05-18 |
Family
ID=67025054
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910236045.1A Active CN109960590B (zh) | 2019-03-26 | 2019-03-26 | 一种优化嵌入式***诊断打印的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109960590B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114063943A (zh) * | 2021-11-18 | 2022-02-18 | 芯翼信息科技(上海)有限公司 | 数据传输***、方法、装置、介质和设备 |
CN114116367A (zh) * | 2020-08-25 | 2022-03-01 | 荣耀终端有限公司 | 一种生成日志的方法及电子设备 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1359492A (zh) * | 1999-01-21 | 2002-07-17 | 毕事快公司 | 对具有嵌入式操作***的设备进行测试和确认的***和方法 |
CN1797365A (zh) * | 2004-12-24 | 2006-07-05 | 华为技术有限公司 | 一种利用编解码输出信息的方法 |
CN101401075A (zh) * | 2006-11-17 | 2009-04-01 | 深圳市领测科技有限公司 | 程序调测***中的映射方法和程序调测*** |
EP2329391A1 (en) * | 2008-08-13 | 2011-06-08 | Secure Exchange Solutions, Llc | Trusted card system using secure exchange |
CN103336706A (zh) * | 2013-05-21 | 2013-10-02 | 盛科网络(苏州)有限公司 | 将伪代码转换为编程语言的***和方法 |
CN104834508A (zh) * | 2014-02-11 | 2015-08-12 | 沈阳瑞达信邦科技有限公司 | 一种生成用于读写二进制文件代码的方法 |
CN105574680A (zh) * | 2015-12-27 | 2016-05-11 | 乌鲁木齐三力元生产力促进中心有限公司 | 一种企业竞争能力诊断的方法及*** |
CN108089971A (zh) * | 2017-11-27 | 2018-05-29 | 上海华元创信软件有限公司 | 基于嵌入式实时***的日志服务方法和*** |
CN108132929A (zh) * | 2017-12-25 | 2018-06-08 | 上海大学 | 一种海量非结构化文本的相似性计算方法 |
US20180260196A1 (en) * | 2017-03-13 | 2018-09-13 | Memsql, Inc. | Extensibility in a database system |
CN109376021A (zh) * | 2018-09-26 | 2019-02-22 | 深圳壹账通智能科技有限公司 | 接口调用的响应方法及服务器 |
CN109460921A (zh) * | 2018-11-12 | 2019-03-12 | 北京航天智造科技发展有限公司 | 一种企业智能化改造通用*** |
-
2019
- 2019-03-26 CN CN201910236045.1A patent/CN109960590B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1359492A (zh) * | 1999-01-21 | 2002-07-17 | 毕事快公司 | 对具有嵌入式操作***的设备进行测试和确认的***和方法 |
CN1797365A (zh) * | 2004-12-24 | 2006-07-05 | 华为技术有限公司 | 一种利用编解码输出信息的方法 |
CN101401075A (zh) * | 2006-11-17 | 2009-04-01 | 深圳市领测科技有限公司 | 程序调测***中的映射方法和程序调测*** |
EP2329391A1 (en) * | 2008-08-13 | 2011-06-08 | Secure Exchange Solutions, Llc | Trusted card system using secure exchange |
CN103336706A (zh) * | 2013-05-21 | 2013-10-02 | 盛科网络(苏州)有限公司 | 将伪代码转换为编程语言的***和方法 |
CN104834508A (zh) * | 2014-02-11 | 2015-08-12 | 沈阳瑞达信邦科技有限公司 | 一种生成用于读写二进制文件代码的方法 |
CN105574680A (zh) * | 2015-12-27 | 2016-05-11 | 乌鲁木齐三力元生产力促进中心有限公司 | 一种企业竞争能力诊断的方法及*** |
US20180260196A1 (en) * | 2017-03-13 | 2018-09-13 | Memsql, Inc. | Extensibility in a database system |
CN108089971A (zh) * | 2017-11-27 | 2018-05-29 | 上海华元创信软件有限公司 | 基于嵌入式实时***的日志服务方法和*** |
CN108132929A (zh) * | 2017-12-25 | 2018-06-08 | 上海大学 | 一种海量非结构化文本的相似性计算方法 |
CN109376021A (zh) * | 2018-09-26 | 2019-02-22 | 深圳壹账通智能科技有限公司 | 接口调用的响应方法及服务器 |
CN109460921A (zh) * | 2018-11-12 | 2019-03-12 | 北京航天智造科技发展有限公司 | 一种企业智能化改造通用*** |
Non-Patent Citations (1)
Title |
---|
李筱等: "C/C++程序静态内存泄漏警报自动确认方法", 《软件学报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116367A (zh) * | 2020-08-25 | 2022-03-01 | 荣耀终端有限公司 | 一种生成日志的方法及电子设备 |
CN114063943A (zh) * | 2021-11-18 | 2022-02-18 | 芯翼信息科技(上海)有限公司 | 数据传输***、方法、装置、介质和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109960590B (zh) | 2021-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8898651B2 (en) | Automatic generation of instruction-set documentation | |
CN108280023B (zh) | 任务执行方法、装置和服务器 | |
CN101841515B (zh) | 可变目标的协议数据单元编解码代码自动生成的实现方法 | |
CN106528399A (zh) | 一种测试用例确定方法及装置 | |
CN109388396A (zh) | 页面生成方法、装置、计算机设备和存储介质 | |
CN108984155B (zh) | 数据处理流程设定方法和装置 | |
CN101526963A (zh) | 网页编码识别方法、装置和终端设备 | |
CN110262783B (zh) | 一种接口生成方法、装置及终端设备 | |
CN108170602B (zh) | 一种测试用例生成方法、装置、终端及计算机可读介质 | |
CN109960590A (zh) | 一种优化嵌入式***诊断打印的方法 | |
CN110347390B (zh) | 一种快速生成web页面的方法、存储介质、设备及*** | |
CN109063091A (zh) | 混合编码的数据迁移方法、数据迁移装置和存储介质 | |
CN114036183A (zh) | 一种数据etl处理方法、装置、设备及介质 | |
EP3457274A1 (en) | System and method for creating domain specific language | |
CN111580830A (zh) | 超文本标记语言文档元素的绑定及解析方法 | |
CN111124380A (zh) | 一种前端代码生成方法 | |
CN113742231A (zh) | 基于Protobuf协议动态解析的造数方法及装置 | |
CN103458037A (zh) | 一种在资源受限环境下提供复杂网页应用的方法和设备 | |
CN113360139A (zh) | 前端框架的集成方法、装置、电子设备及存储介质 | |
CN117008920A (zh) | 引擎***、请求处理方法、装置、计算机设备及存储介质 | |
CN113641594B (zh) | 跨端自动化测试方法以及相关装置 | |
CN117215661A (zh) | 一种事件处理的方法、装置以及存储介质 | |
CN104992379A (zh) | 一种电力行业大数据动态文本交换格式管理方法 | |
CN114385155A (zh) | vue项目可视化工具生成方法、装置、设备及存储介质 | |
CN113961238A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |