查看: 1388|回复: 0

[原创] 在KEIL中使用ST-Link和Tracealyzer的技巧分享!

[复制链接]
  • TA的每日心情
    开心
    2023-6-12 14:34
  • 签到天数: 165 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2022-3-23 14:58:51 | 显示全部楼层 |阅读模式
    分享到:
    Tracealyzer是Percepio 公司开发的一款用于RTOS或基于linux的嵌入式软件系统的可视化跟踪工具,对系统运行时的行为提供了前所未有的洞察方法。帮助开发人员加快固件的开发,减少对系统验证和性能优化所需要的时间。Tracealyzer提供了30多种相互关联的运行时行为视图,包括任务调度、中断、任务之间的相互作用,以及从应用程序代码中记录的用户事件。作为传统调试的补充,Tracealyzer提供了更高层次的调试视图,非常适合理解典型的实时问题。

    Tracealyzer不需要额外的跟踪硬件,这意味着也可以在产品部署时使用,用于捕获难以复制的错误。Tracealyzer for FreeRTOS支持两种追踪模式:快照模式(Snapshot Mode)和流模式(Streaming Mode)。

    快照模式(Snapshot Mode):将追踪数据存储在RAM中,然后通过IDE工具读取出来保存为文件,在PC端进行分析和显示。
    流模式(Streaming Mode):将追踪数据实时传送到PC端,目前Tracealyzer for FreeRTOS支持JLINK-RTT、 ARM-ITM、 USB CDC、 TCP/IP、 串口等几种流模式(官方将其称为streamports)。注意ST-Link目前不支持流模式。
    在KEIL中使用Tracealyzer

    我们使用STM32F411E-Disco开发板来了解一下如何在Keil中使用Tracealyzer,开发板板载ST-Link, ST-Link无法使用流模式,因此,我们选择快照模式捕获数据。
    (1)要在KEIL工程中使用Tracealyzer,首先需要集成Tracealyzer的跟踪记录库,该记录库文件在Tracealyzer的安装目录下。详细的记录库集成和快照模式配置可以参考之前发布的这篇文档:快速入门| Tracealyzer跟踪记录库移植
    跟踪记录库集成后的项目文件夹如图1所示,注意还需包含对应的头文件。
    1.png
    图1

    使用ST-Link和KEIL,集成跟踪记录库文件之后该如何进行Tracealyzer跟踪选项设置?
    使用ST-Link和KEIL时的Tracealyzer选项设置
    (1)通过Trace->Open Snapashot Tool选项打开快照模式设置。
    2.png
    图2

    (2)在快照模式的模式里选择使用ST-Link。
    3.png
    图3

    (3)打开设置选项,检查ST-Link对应的设置栏是否检测到了所连接的ST-Link调试器,同时连接多个ST-Link时可以在此处进行选择。
    4.png
    图4

    (4)点击Read Snapshot选项,快照模式会将程序运行跟踪到的数据缓存到指定的RAM区域中,此处设置所需要读取的RAM区域范围。读取芯片RAM中的Trace数据。需要设置芯片的型号,起始地址和读取的字节数,注意这里读取的地址范围必须包含完整的Trace buffer。

    读取后的数据将会保存为*.hex格式的文件,点击图5中的Open Snapshot选项即可在Tracealyzer中打开该hex文件进行分析。
    5.png
    图5

    获取跟踪数据后,在Tracealyzer中提供了30多种可视化的分析视图,图6展示了跟踪获取到的两个LED任务发生任务抢占的情况。
    6.png
    图6
    在KEIL中获取跟踪数据的其他方法

    (1)使用控制台命令
    Tracealyzer获取到的跟踪数据保存在RAM区域内的一个数组中,该数组的首地址对应的变量名称为RecorderDataPtr。进入调试状态后,可以通过KEIL软件Command窗口支持的SAVE命令将该数组的内容保存为一个hex格式的文件。
    KEIL支持的SAVE命令的格式如下:
    SAVE   path\fname   startAddr, endAddr  [, accSize]
    SAVE命令加上要保存文件的地址和文件格式,以及所需要保存的RAM区域的地址范围。具体的范围大小为可选项。
    因为缓存数组的首地址为一个名为RecorderDataPtr的指针变量,通过如下命令即可将该缓存数组的内容保存到D:\F411E 文件夹下的test.hex文件中。将这个hex文件在Tracealyzer中打开即可。
    SAVE D:\F411E\test.hex   RecorderDataPtr , (RecorderDataPtr + 1)
    7.png
    图7

    (2)将SAVE命令行保存为一个选项按钮
    KEIL进入调试状态后,在debug标签页下选择"Function Editor"选项。
    8.png
    图8

    将下面的文件内容保存到一个格式为*.ini格式的文件中。
    FUNC void SavePercepioRecorderData(void)
    {
        printf("Saving Recorder Data in out.hex!\n");
        exec("SAVE \"out.hex\"  RecorderDataPtr , (RecorderDataPtr + 1)");
        //未具体指定保存的情况下文件保存在工程的根目录下
    }
    DEFINE BUTTON "Save Recorder Data", "SavePercepioRecorderData()"
    在Fuction Editor标签页中,open加载上面保存的ini文件,点击右侧Compile选项后,将会在KEIL的Toolbox窗口中生成一个选项,点击该选项将自动执行上面的命令并将跟踪数据保存为一个hex文件。
    3.png
    图9

    本文介绍了在使用ST-Link和KEIL的时候,和Tracealyzer相关的一些小技巧,希望能够为用户提供更好的体验。更多相关的技术资料可以关注并查阅“麦克泰技术”公众号,可以联系“info@bmrtech.com”获得Tracealyzer商用和教育版授权。

    9.png
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 23:58 , Processed in 0.122221 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.