调试笔记--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的状态栏计时器

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

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

例如要测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有时不能实时检测,不过Event Recorder中间件还带printf功能,并且keil其他中间件例如RTX5或者FREERTOS都有配套的Event Recorder文件,非常方便调试OS(可以获取OS堆栈情况,任务切换情况等信息)

以上是关于调试笔记--keil 测量周期小技巧的主要内容,如果未能解决你的问题,请参考以下文章

调试笔记--keil printf小技巧

《程序是调试出来的》嵌入式Keil5的调试技巧

这个Keil的小技巧,你知道吗?

这个Keil的小技巧,你知道吗?

调试笔记--jlink 变量转实时波形小技巧

keil中的一些技巧