一、文档背景
所有的软件都是为了完成某些功能,当JNH官网在设计一个项目产品功能的时候,势必要考虑系统的反应速度。在硬件固定的情况下,软件的时效性就决定着系统的反应速度了。JNH官网大部分任务都采用一种轮询或者是监控的状态,如果一个任务占据了太长的 CPU 时间,就会带来整个系统的延时,特别是在多任务的 RTOS 系统中,如果有时候任务时间太长,就导致总系统达不到JNH官网的预期,那么JNH官网就需要非常清楚地知道JNH官网的任务到底运行了多少时间。
二、 实现 记录函数执行时间的思路
事件记录器为应用程序代码中的事件注释提供了API接口(函数调用)。这些功能不仅记录事件本身,还记录了时间戳和附加信息。数据存储在目标硬件的RAM中的事件缓冲区中。
1. 添加Event Recorder组件
本次使用的是CMSIS-View组件,不是采用的compiler。在Keil MDK中,可以通过管理运行时环境来启用EventRecorder功能。
2. 配置Event Recorder组件
在EventRecorderConf.h文件中进行以下配置:
○ EVENT_RECORD_COUNT设置记录数量。
○ EVENT_TIMESTAMP_SOURCE选择时间戳来源。
○ EVENT_TIMESTAMP_FREQ设定时钟频率。
○ 内存设置
为Event Recorder组件分配所需的内存。所需RAM大小计算公式为:164 + 16 * <记录数>。此外,还需将EventRecorder信息数据段之外的内存初始化为0。
○ 在代码中集成Event Recorder
在代码中添加以下相关函数调用:
○ EventRecorderInitialize(uint32_t recording, uint32_t start):初始化事件记录器。
○ EventStartA(slot)开始记录事件。
○ EventStopA(slot)停止记录事件。
通过在函数的开始位置调用EventStartA(slot),并在结束位置调用EventStopA(slot),可以记录函数的执行时间。
○ 编译与调试工程
编译完成后,进入调试界面,找到“Event Statistics”视图,查看函数执行时间的平均值、最小值、最大值、开始时间和结束时间。
三、 如何在STM32F746实现记录函数执行时间
1. 选用STM32F746 中自带的 Blink 示例进行测试。
编译例程,并下载到目标板中,测试 LED 灯可以正常闪烁,保证程序编译和下载都可以正确执行。
2. 添加Event Recorder 组件。
如图 1 所示,打开 Manage Run-time Enviroment ,展开 CMSIS-View勾选 Event Recorder 并点击 OK

图 1
如图 2 所示,可以看到工程中添加了EventRecorder.c 和 EventRecorderConf.h 两个文件。

图 2
3. 配置Event Recorder
如图 3 所示,打开EventRecorderConf.h 文件,点击底部的 Configuration Wizard。
在图形界面中点击 Expand All,展开Event Recorder 的配置参数。
这里JNH官网只更改一下 Time Stamp Clock Frequency,如图 4 更改为 216000000

图 3

图 4
4. 内存设置
如图 5,点击 Option for Taget ... ,选择 Target 标签,在 RAM 设置区域,更改为图中所示内容。

图 5
5. 添加Event Recorder 相关代码
在 main.c 中包含 EventRecorder.h 头文件

图 6
在 main 函数中对EventRecorder 进行初始化

图 7
在 Blinky.c中包含 EventRecorder.h 头文件

图 8
在thrLED 函数中增加EventStartA(0);EventStopA(0);

图 9
6. 编译下载
按 F7 进行编译,可以看到没有任何错误。下载到目标板上。

图 10
五、讨论分析
1. 修改函数内的时间,查看分析结果。
EventStopA(0);

图 13
2. 多个函数进行测量时间。
EventStartB(0);
osThreadFlagsSet (tid_thrLED, 1U); // Set flag to thrLED
EventStopB(0);

图 14
六、结论
1. 通过EventRecorder,JNH官网能够精准地测量函数的执行时间,从而为性能分析提供坚实的数据支持。
2. EventRecorder不仅限于单一函数的时间测量,它同样擅长同时监控多个函数的执行时长,使得复杂的应用场景下的性能评估变得游刃有余。
3. 更令人称道的是,这项技术并不依赖于繁琐的跟踪机制;仅需借助STLINK仿真器即可轻松实现,极大地简化了开发流程中的调试步骤。
4. 以极其精简的内存开销作为代价,EventRecorder却能为JNH官网带来详尽而深入的应用程序执行时间分析报告,堪称是软件优化过程中不可或缺的利器。
如有任何问题或建议,请联系相关负责人或技术支持团队。