嵌入式系统平台上,由于资源有限,直接使用UART输出字符串debug信息时资源占比较高,而只使用数字标签表达含义时,又比较难分析。最近的环境遇到这样的问题,简单做了个小工具。编码时直接使用字符串形式,使用工具扫描成数字标签格式,在编译完的二进制文件中不包含字符串信息,当使用UART输出trace log后,再使用工具根据扫描生成的文件解析为字符串格式分析。
主要流程图如下

目录处理的几个问题
os.listdir(path) 获取文件夹目录下的所有文件名
os.getcwd()获取当前目录,执行命令的目录
os.path.realpath(__file__)获取当前文件的路径及名称
os.path.dirname(...)获取完整文件名中目录名
执行命令方式
可用来执行系统命令的方式 os.system(cmdStr) os.popen(cmdStr)。两者的主要差别,前者只是简单地执行系统命令而不返回执行的结果内容,后者采用管道方式,返回相应的执行结果,主要使用后使用close函数来关闭。例如:
import os
f = os.system('dir')
a = f.readlines()
for eachline in a:
print(eachline )
f.close()
关于C宏命名问题
扫描文件中生成宏定义,由于编译器应该由一定的命名长度限制,为了保险起见,目前宏定义的命名长度为30字符。宏名由字符串的前面30个字符生成,当宏的名字由冲突时,脚本将停止执行。所以在使用时,会存在一定的限制,亦即在书写字符串trace 信息时,前面的30个字符不能雷同。
编译时自动执行脚本
命令窗口执行make编译时,可以采用添加在make命令之前运行。而很多IDE集成工具中,可以支持pre-build设置,对应添加相应的脚本文件,即可在编译前执行。
源文件地址
https://github.com/ChengYinghui/Happylife-Tools/tree/master/traceLogScan
本文介绍了一款用于嵌入式系统的小工具,该工具将字符串形式的debug信息转换为数字标签,以降低UART输出时的资源占用。主要流程包括目录处理、执行命令、C宏命名和编译时自动执行脚本。工具可在编译完成后通过解析数字标签回溯原始字符串,方便分析。

被折叠的 条评论
为什么被折叠?



