一、使用TI提供的XML文件处理脚本生成函数调用图并进行静态分析 通过函数的调用关系可以静态的分析堆栈的使用情况,TI提供了一套基于Perl的脚本工具可以用于分析工程build过程中产生的XML文件以提供程序空间使用相关的信息。这里笔者需要用到的是该工具包中的call_graph.pl脚本来生成函数调用图(Call Graph)。 首先需要在wiki页面中下载并安装该工具包,可以在搜索引擎中检索关键字“Code_Generation_Tools_XML_Processing_Scripts” 并找到对应的ti.com页面进行下载安装。对于不熟悉命令行操作的读者可以按照以下三个步骤来使用该脚本。 1. 新建一个文件夹并以英文命名,并从CCS对应的C2000编译器目录拷贝odf2000.exe到该新建的文件夹中。(ofd2000.exe在C:\ti\ccs901\ccs\tools\compiler\ti-cgt-c2000_18.12.1.LTS\bin,路径随CCS版本、CCS安装路径及编译器版本不同会有差异)同时还需要从cgxml工具路径C:\ti\cgxml\bin中拷贝call_graph.exe,从工程目录拷贝编译生成的.out文件到该文件夹中。 2. 打开命令行工具(可在windows开始菜单搜索“CMD”找到),在其中输入如下命令选取上一步中新建的文件夹为工作目录 cd C:\ti\cgxml\utils 3. 在命令行中运行如下脚本获取输出结果,用户需要自行修改.out文件的文件名使其与第一步中复制到文件夹中的.out同名。 ofd2000 -xg gpio_toggle_cpu01.out | call_graph --stack_max 此时用户可以在命令行的输出中看到最恶劣情况下的堆栈占用情况,此处,函数c_int00是函数调用图的根,其调用在最大情况下会占用48个16位字的堆栈空间。但是这样的结果有两点限制条件将在本节的末尾部分指出。 如果使用--stack_max参数则可以获得更多的细节信息,具体的数据解读方法请参阅安装目录下的文档《call_graph.pdf》。 该方法简单易用,但是对于非直接调用的函数以及相互嵌套的中断服务,该工具则无法直接将其在脚本输出结果中表现出来。此时需要使用者结合call_graph输出的详细信息,借助自己对于程序流程的理解,分析得到最终的堆栈评估结果。
|