2979|6

227

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

如何使用CYCLECOUNTER快速的测量执行时间? [复制链接]

 

Cortex-M3/M4/M7内核中有一个DWT单元(Data Watch and Trace Unit),其中包含了一个时钟周期寄存器,频率跟CPU的时钟相同。IAR EWARM的C-SPY调试系统基于该寄存器实现了一个64位的循环周期计数器CYCLECOUNTER,能够精确的测量程序的执行时间,并且可以与C-SPY宏结合,成为开发人员非常有用的一个工具。

 

CYCLECOUNTER的显示

 

在IAR EWARM进入调试后,从View->Register打开寄存器窗口,在窗口的下拉选项中选择“CPU Registers”。与CYCLECOUNTER相关的还有3个寄存器:CCTIMER1, CCTIMER2和CCSTEP。当指令单步执行并停止时,这4个寄存器的值都会更新。CCSTEP是前一次停止到这一次停止中间的时钟周期,CYCLECOUNTER、CCTIMER1和CCTIMER2显示累积的时钟周期。

CYCLECOUNTER和CCTIMER1/CCTIMER2的区别在于,CCTIMER1/CCTIMER2的值可以被用户修改,而CYCLECOUNTER和CCSTEP的值不能被用户修改。测量执行时间的最简单方法之一是使用用户断点读取这些值。

 

寄存器窗口获取执行时间

 

当你想要测量源代码中从一点到另一点的执行时间时,你必须记住CYCLECOUNTER的前一个值,并获得新的值,然后通过减去CYCLECOUNTER的值来计算执行时间。

当程序在开始断点处停止时,CCTIMER1的值应该被清除为零。当程序在停止断点处停止时,这个值就是执行时间。C-SPY有两个周期计数器CCTIMER1和CCTIMER2来测量执行周期。

 

C-SPY宏自动测量

 

C-SPY有一个宏系统,可以用来使测试过程更有效。这些宏可以使用CYCLECOUNTER和CCTIMER自动测量执行时间。例如,可以实现两个宏函数:“Clear_TIMER1”和“Dump”,分别用于清除CCTIMER1和显示CCTIMER1、CYCLECOUNTER到Debug log窗口。

将这两个宏函数保存到文本文件“cycle.mac”,然后打开IAR EWARM的工程选项设置,从Debugger->Setup选择这个宏文件。

在此之后,在你想要测量执行周期的地方设置两个断点。选择View -> Breakpoints打开Breakpoint窗口。

 

在Breakpoints窗口中,选择开始断点并右键单击该断点。然后选择[Edit. .],并在Expression输入:Clear_TIMER1()。

选择停止断点并右键单击该断点。然后选择[Edit. .],并在Expression输入:Dump()。

在这些设置之后,我们就可以开始执行了。当开始执行时,消息显示在Debug log窗口中。此外,还可以复制和粘贴输出消息。

最新回复

要是能连续记录,日志记录就好了。我之前测试就是代码里面添加读取timer值,串口打印来计算。   详情 回复 发表于 2021-3-26 15:20

赞赏

1

查看全部赞赏

点赞(1) 关注
个人签名

欢迎关注“麦克泰技术”

 

回复
举报

7452

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 

学习了!很有参考价值!谢谢。

 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

227

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
freebsder 发表于 2021-1-8 23:02 学习了!很有参考价值!谢谢。

多谢捧场~!

 

 

 

 
个人签名

欢迎关注“麦克泰技术”

 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

4
 
MamoYU 发表于 2021-1-11 17:48 多谢捧场~!      

你发的几篇帖子确实很有参考价值,那些功能平时英文说明都读不懂,更不会有人去搞这些偏门。

 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

227

帖子

0

TA的资源

一粒金砂(高级)

5
 
freebsder 发表于 2021-1-11 23:03 你发的几篇帖子确实很有参考价值,那些功能平时英文说明都读不懂,更不会有人去搞这些偏门。

多谢支持啦~! 我们也是花心思想写点对使用者有帮助的文章

 
个人签名

欢迎关注“麦克泰技术”

 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

6
 

高级呀。点个赞!!!

 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

7
 

要是能连续记录,日志记录就好了。我之前测试就是代码里面添加读取timer值,串口打印来计算。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表