调试笔记--keil 测量周期小技巧
Posted 不咸不要钱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调试笔记--keil 测量周期小技巧相关的知识,希望对你有一定的参考价值。
调试笔记–keil 测量周期小技巧
本文参考安富莱专题教程第7期 http://www.armbbs.cn/forum.php?mod=viewthread&tid=87176&extra=page%3D1
- cortex-m内核的单片机,内核内除了systick定时器外,还有一个用于调试的WDT定时器,可以在keil中协助测量代码运行周期。
WDT定时器默认是给调试器用的,自己最好不要使用。
直接看keil的状态栏计时器
-
一定要确保时钟周期和单片机内核一致
-
在要测量代码前后打上断点
例如要测GPIO翻转函数所需时间,在翻转函数前后打上断点,然后右键将t2清零,再点击运行到下一个断点处,然后观察t2时间戳
t0代表从函数上电后开始计时到当前的时间(不用担心WDT溢出问题,keil会自动计算)
t1和t2是两个时间戳,用户可以用这两个时间戳互相配合,实现自己想要的功能
使用keil的Event Recorder中间件测量
Event Recorder中间件支持时间和功耗测量,printf打印,及keil其他中间件的调试,是keil专门用于调试的组件。其原理简单来说就是将一些调试信息以固定的格式存放在RAM中,然后通过调试器找到并读取RAM中固定格式的数据,通过keil的界面组件显示出来。因此使用Event Recorder中间件需要修改代码,并且需要占用一定的RAM空间。
- keil添加组件
如果网不好,可以通过 http://www.armbbs.cn/forum.php?mod=viewthread&tid=96992&highlight=pack 镜像下载后,自行安装
- 工程添加组件
- 初始化组件
并添加一下代码进行初始化组件
#include "EventRecorder.h"
/* 初始化 EventRecorder 并开启 */
EventRecorderInitialize(EventRecordAll, 1U);
- 调用计时API函数
计时API其实就是将DWT计时器的时钟数以固定格式存放到RAM中
//参数 slot范围 0-15 共16个计时通道
EventStartA(slot);
/* 要测量的代码 */
EventStopA(slot);
ps:这个功能受调试器功能影响,虽然dap、jlink都可以用,但是实测发现dap有时不能实时检测,不过Event Recorder中间件还带printf功能,并且keil其他中间件例如RTX5或者FREERTOS都有配套的Event Recorder文件,非常方便调试OS(可以获取OS堆栈情况,任务切换情况等信息)
以上是关于调试笔记--keil 测量周期小技巧的主要内容,如果未能解决你的问题,请参考以下文章