[MM32软件] MM32F013x——Event Recorder使用方法

[复制链接]
 楼主| 两只袜子 发表于 2021-5-20 14:50 | 显示全部楼层 |阅读模式
Event Recorder简介
Event Recorder的特色主要有以下几个方面:
1. 提升应用程序动态执行期间的检测能力。
2. 支持事件类型滤除机制,比如运行错误,API调用,内部操作和操作信息的区分。
3. 可以在任务中,RTOS内核中和中断服务程序中任意调用。
4. 对于带ITM功能的Cortex-M3/M4/M7/M33内核芯片,执行记录期间,全程无需开关中断操作。
对于不带ITM功能的Cortex-M0/M0+/M23,是需要开关中断的。
5. 支持printf重定向。
6. 各种Link通吃,支持SWD接口或者JTAG接口方式的J-Link、U-Link和CMSIS-DAP。
7. 对于带DWT时钟周期计数器功能的Cortex-M3/M4/M7/M33内核芯片,创建时间戳时,可以有效降低系统负担,无需专用定时器来实现。
8. Event Recorder执行时间具有时间确定性,即执行的时间是确定的,而且执行速度超快,因此,实际产品中的代码依然可以带有这部分,无需创建debug和release两种版本。
9. RTX5及其所有中间件都支持Event Recorder调试。
 楼主| 两只袜子 发表于 2021-5-20 14:52 | 显示全部楼层
本帖最后由 两只袜子 于 2021-5-20 14:54 编辑

创建Event Recorder工程
01
添加Event Recorder组件
使用MDK5.25以上版本创建MM32F013x工程模板(或者是能够被MDK5.25版本正确打开的工程),具体的工程搭建这里不做过多的介绍,具体请参考MM32官方的工程搭建文档。
111119umonmnuo93pjb997.png.thumb.jpg 111119fqy91ga9mszye92r.png.thumb.jpg



 楼主| 两只袜子 发表于 2021-5-20 14:54 | 显示全部楼层
打开RTE(Manage Run-time-Environment窗口),在Compiler组件下勾选Event Recorder,并在Compiler组件下面的I/O组件下中的STDOUT中的Variant修改为EVR,此处的修改是为了将printf函数冲定向到Event Recorder上。

在需要使用Event Recorder的代码处,直接调用Event Recorder的API函数,如果需要使用printf函数的地方直接使用printf函数输出即可,在MDK中需要勾选microLib,并删掉文件中的重定向函数。
111155le8fccd95fea46ze.png.thumb.jpg

 楼主| 两只袜子 发表于 2021-5-20 14:56 | 显示全部楼层
                                                                                           添加Event Recorder的功能以后,打开EventRecorderConf.h,具体的配置如下:

111218lrcpttkub999e90z.png.thumb.jpg
Number of Recorder:表示Event Recorder缓冲可以记录的消息条数。
Time Stamp Source:表示时间戳来源,有如下四种可以选择,我们这里使用DWT时钟周期计数器。
到此,添加工程文件已经完成。

 楼主| 两只袜子 发表于 2021-5-20 14:58 | 显示全部楼层


111250v4xs4sihcse7f8so.png.thumb.jpg

02
Event Recorder注意事项
使用CMSIS软件包一定要使用当前最新的,否则可能会出现错误。
下载完成以后需要将工程下面Device文件夹下面的\CMSIS\KEIL_CORE文件中的文件替换为MDK安装路径下面ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include中的文件。

03
Event Recorder代码实现
在主函数中加入Event Recorder初始化函数:EventRecorderInitialize(EventRecordAll, 1U);
EventRecorderStart();

在主函数的wilie循环中加入以下函数:EventStartA(0);
BSP_LED1_TOGGLE();
EventStopA(0);

EventStartA(1);
BSP_LED2_TOGGLE();
EventStopA(1);

EventStartA(2);
BSP_LED3_TOGGLE();
EventStopA(2);

t0++;
EventStartAv(3, t0, t0);
BSP_LED4_TOGGLE();
EventStopAv(3, t0, t0);
t1 += 1;
t2 += 2;
EventRecord2(1 + EventLevelAPI, t1, t2);


 楼主| 两只袜子 发表于 2021-5-20 15:01 | 显示全部楼层
04
API接口函数
时间测量功能简单易用,仅需一个起始函数,一个停止函数即可。当前支持4组,每组支持16路测量,也就是可以同时测量64路。
时间测量的API函数支持多任务和中断里面随意调用,测量起始函数:EventStartG(slot) 或者EventStartGv (slot, val1, val2),函数中的字母G是表示分组A,B,C,D,即实际调用函数为EventStartA,EventStartB,EventStartC和EventStartD,函数的第一个形参slot的范围是0-15,也就是每个分组可以测试16路,函数后面的两个形象val1和val2是32位变量,用户可以用这两个形参来传递变量数值给Event Statistics调试组件里面,方便图形化展示。简单的说,这两个变量仅仅起到一个传递变量数值的作用。
测量停止函数:EventStopG(slot) 或者EventStopGv (slot, val1, val2),函数中的字母G是表示分组A,B,C,D,即实际调用函数为EventStopA,EventStopB,EventStopC和EventStopD,函数的第一个形参slot的范围是0-15,也就是每个分组可以测试16路,函数后面的两个形象val1和val2是32位变量,用户可以用这两个形参来传递变量数值给Event Statistics调试组件里面,方便图形化展示。简单的说,这两个变量仅仅起到一个传递变量数值的作用。
到此程序的配置已经完成。

 楼主| 两只袜子 发表于 2021-5-20 15:04 | 显示全部楼层
J-Link配置说明
在Option->Debug选项卡中选择J-Link作为MCU的调试工具,并选择SWD模式。
111334c3bsb3yedu9ogmba.png.thumb.jpg
111334krj3jn0fc07riqcz.png.thumb.jpg


 楼主| 两只袜子 发表于 2021-5-20 15:05 | 显示全部楼层
本帖最后由 两只袜子 于 2021-5-20 15:06 编辑

在Trace选项卡中使能Core clock并选择48MHz,其他的配置默认即可
111408fp11vp2r935il0lr.png.thumb.jpg



 楼主| 两只袜子 发表于 2021-5-20 15:09 | 显示全部楼层
进入debug模式,在View->Serial Windows选项卡中选择Debug Viewer选项,打开Debug Viewer窗口,可以查看虚拟串口打印。 111530wqzyuf9tmbwyrf52.png.thumb.jpg

 楼主| 两只袜子 发表于 2021-5-20 15:12 | 显示全部楼层
勾选View选项卡的Periodic Window Update选项来进行周期更新。
111548x5agoqo75yyojvi5.png.thumb.jpg


 楼主| 两只袜子 发表于 2021-5-20 15:14 | 显示全部楼层
打开View选项卡勾选Analvsis Windows选项的Event Recorder与Event Statistics选项来调出相关的组件。
111609p2u55af3a0530bun.png.thumb.jpg
111636c1ukfh7vhnwphe8v.png.thumb.jpg

 楼主| 两只袜子 发表于 2021-5-20 15:16 | 显示全部楼层
全速运行,效果如下:
111712xe9kt7yg33it3tb8.png.thumb.jpg

 楼主| 两只袜子 发表于 2021-5-20 15:17 | 显示全部楼层
另外Event Recorder支持筛选功能,使用这个功能需要先暂停全速运行,然后点击下面这个选项
111731xq7mg7ppqyo4n6y7.png.thumb.jpg

 楼主| 两只袜子 发表于 2021-5-20 15:18 | 显示全部楼层
弹出的界面里面可以设置选项显示(勾上表示显示),我们这里取消Event Statistics的显示,设置完毕后记得点击OK按钮。
111753gqijijnwj7mk5bfk.png.thumb.jpg

 楼主| 两只袜子 发表于 2021-5-20 15:19 | 显示全部楼层
虚拟串口数据打印:
111857in0hb72usp2o27ii.png.thumb.jpg

 楼主| 两只袜子 发表于 2021-5-20 15:20 | 显示全部楼层
全速运行结果如下:
111926lfcrotbdnfzbr8c0.png.thumb.jpg

 楼主| 两只袜子 发表于 2021-5-20 15:21 | 显示全部楼层
CMSIS-DAP配置说明
在Option->Debug选项卡中选择CMSIS-DAP作为MCU的调试工具。

111950g1spko1hxxpfd33x.png.thumb.jpg


 楼主| 两只袜子 发表于 2021-5-20 15:23 | 显示全部楼层
设置Core Clock时钟为48MHz。

112009xjvuuvoa3kx6vai1.png.thumb.jpg


 楼主| 两只袜子 发表于 2021-5-20 15:24 | 显示全部楼层
在Option->Utilities选项卡中配置CMSIS-DAP,具体操作如下:

112047qoczae7tw93ot9an.png.thumb.jpg


 楼主| 两只袜子 发表于 2021-5-20 15:24 | 显示全部楼层
至此CMSIS-DAP的配置也已经完成,使用相关功能跟J-Link操作方法一样。

前面分享了这么多SEGGER相关工具使用的主题帖,主要是为了给MM32用户提供更多的调试、下载或者定位问题等的方法,借助这些工具能有效的节省时间、提高效率,希望能够帮助到大家!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2122

主题

8124

帖子

11

粉丝
快速回复 返回顶部 返回列表