调试笔记--keil 测量周期小技巧

调试笔记–keil 测量周期小技巧

本文参考安富莱专题教程第7期 http://www.armbbs.cn/forum.php?mod=viewthread&tid=87176&extra=page%3D1

  • cortex-m内核的单片机,内核内除了systick定时器外,还有一个用于调试的WDT定时器,可以在keil中协助测量代码运行周期。

WDT定时器默认是给调试器用的,自己最好不要使用。

直接看keil的状态栏计时器

  1. 一定要确保时钟周期和单片机内核一致
    如果使用daplink
    在这里插入图片描述

如果使用jlink
在这里插入图片描述

  1. 在要测量代码前后打上断点

例如要测GPIO翻转函数所需时间,在翻转函数前后打上断点,然后右键将t2清零,再点击运行到下一个断点处,然后观察t2时间戳
t0代表从函数上电后开始计时到当前的时间(不用担心WDT溢出问题,keil会自动计算)
t1和t2是两个时间戳,用户可以用这两个时间戳互相配合,实现自己想要的功能

在这里插入图片描述
如果没有时间,可以切换到寄存器窗口
在这里插入图片描述

使用keil的Event Recorder中间件测量

Event Recorder中间件支持时间和功耗测量,printf打印,及keil其他中间件的调试,是keil专门用于调试的组件。其原理简单来说就是将一些调试信息以固定的格式存放在RAM中,然后通过调试器找到并读取RAM中固定格式的数据,通过keil的界面组件显示出来。因此使用Event Recorder中间件需要修改代码,并且需要占用一定的RAM空间。

  1. keil添加组件

如果网不好,可以通过 http://www.armbbs.cn/forum.php?mod=viewthread&tid=96992&highlight=pack 镜像下载后,自行安装

在这里插入图片描述

  1. 工程添加组件
    在这里插入图片描述
  2. 初始化组件

在这里插入图片描述
并添加一下代码进行初始化组件

#include "EventRecorder.h"
/* 初始化 EventRecorder 并开启 */
EventRecorderInitialize(EventRecordAll, 1U);
  1. 调用计时API函数

计时API其实就是将DWT计时器的时钟数以固定格式存放到RAM中

//参数 slot范围 0-15 共16个计时通道
EventStartA(slot);

/* 要测量的代码 */

EventStopA(slot);

在这里插入图片描述

ps: 这个功能受调试器功能影响,虽然dap、jlink都可以用, 但是实测发现dap有时不能实时检测计时功能其实也是调用了MDK状态栏的计时器,如果时间不准,可以参考文章开头,先将状态栏计时器功能调准),不过Event Recorder中间件还带printf功能,并且keil其他中间件例如RTX5或者FREERTOS都有配套的Event Recorder文件,非常方便调试OS(可以获取OS堆栈情况,任务切换情况等信息)

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值