MDK调试器提供了Component Viewer和Event Recorder,它们显示软件组件的执行状态和事件信息,从而帮助您了解和分析内部操作。 所需的基础结构已在MDK中间件和Keil RTX5中实现。 但是,可以将这些视图轻松添加到其他软件组件或用户应用程序。
1.1添加 Event Recorder 组件
这里主要设置方框里面的两个参数 。
Number of Records :表示 Event Recorder 缓冲 可以记录的消息条数。
Time Stamp Source :表示时间戳来源, 有如下五种可以选择,我们这里使用 DWT时钟周期计数器 。
1.2 j-Link的配置
下面
这个地方最重要
\color{Red}{这个地方最重要}
这个地方最重要 ,一定要正确设置当前系统工作的主频如果不正确,会导致 E vent Statistics的时间统计不正确 。
警告
\color{Blue}{警告}
警告 :如果大家调试状态弹出SWD配置时钟超出范围的问题或者下面错误, 可以考虑将上面截图中的Enable选项的对勾取消掉即可但内核时钟一定要修改为芯片的主频 。
2、printf 重定向
2.1 前期注意事项
在Event Recorder 实现printf输出需要使用MDK的 Debug 功能,输出的效果就跟串口调试工具上的显示效果是一样的。可以节省硬件uart引脚。
由于使能了 printf 重定向,大家的工程里面
一定不要
\color{Red}{一定不要}
一定不要再做重定向了,比如 fpuc fgetc 。
另外需要添加微库 MicroLib。
2.2 初始化
在main函数中添加头文件和初始化。
//1、添加头文件
#include "EventRecorder.h"
#include "EventRecorderConf.h"
//2、初始化 EventRecorder 并开启
EventRecorderInitialize(EventRecordAll, 1U);
EventRecorderStart();
添加打印窗口。
效果如下:
3、Event Statiistiics 时间测量功能的实现
3.1 初始化
在函数中添加头文件和初始化。
//1、添加头文件
#include "EventRecorder.h"
#include "EventRecorderConf.h"
//2、初始化 EventRecorder 并开启
EventRecorderInitialize(EventRecordAll, 1U);
EventRecorderStart();
3.2 添加测量起始和结束时间函数
时间测量功能简单易用,仅需一个起始函数,一个停止函数即可 。当前支持4组 ,每组支持16路测量,也就是可以同时测量 64 路 。
时间测量的 API 函数支持多任务和中断里面随意调用 。
1、 测量起始函数:EventStartG (slot) 或者EventStartGv (slot, val1, val2)
- 函数中的字母G是表示分组A,B,C,D,即实际调用函数为EventStartA,EventStartB,EventStartC和EventStartD。
- 函数的第一个形参slot的范围是0-15,也就是每个分组可以测试16路。
- 函数后面的两个形象val1和val2是32位变量,用户可以用这两个形参来传递变量数值给Event Statistics调试组件里面,方便图形化展示。简单的说,这两个变量仅仅起到一个传递变量数值的作用。
2、 测量停止函数:EventStopG (slot) 或者 EventStopGv (slot, val1, val2)
- 函数中的字母G是表示分组A,B,C,D,即实际调用函数为EventStopA,EventStopB,EventStopC和EventStopD。
- 函数的第一个形参slot的范围是0-15,也就是每个分组可以测试16路。
- 函数后面的两个形象val1和val2是32位变量,用户可以用这两个形参来传递变量数值给Event Statistics调试组件里面,方便图形化展示。简单的说,这两个变量仅仅起到一个传递变量数值的作用。
//在要测量的代码前后加上起始和结束时间
EventStartA(0);
测量的代码部分
EventStopA(0);
添加测量窗口。
效果如下: