[开发工具] 使用Keil精确测试代码运行时间

[复制链接]
 楼主| fengm 发表于 2023-12-13 22:43 | 显示全部楼层 |阅读模式
1 Keil设置
在使用该功能前,需要对MDK进行设置,设置很简单,如下图所示:
2 使用步骤
使用Keil的硬件仿真,通过简单的几个步骤,即能测试到代码运行的时间
  • 打开Keil仿真界面,在右下角会有一个t0:xxxxxsec的字样,把鼠标放在该图标上面,会看到如下图所示的三个时间显示,t0,t1,t2,
  • 其中,t0是系统上电运行的时间,与Registers窗口的时间一致,t1与t2是我们可以做测试的运行时间
  • 右键单击t0图标,可以设置显示t0/t1/t2,或复位t1/t2
  • 在待测试的代码起始位置打一个断点,设置显示t1,且复位t1的时间
  • 在待测试的代码末尾位置打一个断点,全速运行代码到该断点处,当运行到该断点时,t1的时间即是该段代码运行的时间


wilhelmina2 发表于 2024-2-2 21:22 | 显示全部楼层
在Keil中运行代码,并使用“Clock”工具来监视代码的运行时间。
mollylawrence 发表于 2024-2-3 16:37 | 显示全部楼层
代码运行时间的计算方法是通过查看程序开始运行到结束运行的时间差。这通常是通过记录两段代码运行前后的时间,并求差值来获得。
wangdezhi 发表于 2024-2-3 20:05 | 显示全部楼层
使用软件定时器              
youtome 发表于 2024-2-3 22:32 | 显示全部楼层
Keil本身并没有提供直接测量代码执行时间的功能
caigang13 发表于 2024-2-4 08:28 来自手机 | 显示全部楼层
精确时间的话,还是得用定时器来计时。
pmp 发表于 2024-2-4 21:30 | 显示全部楼层
在“Debug”设置下,选中“Use Simulator”或“Debugging”选项,并确保硬件仿真器(如J-LINK或ST-LINK)正确连接和配置。然后,在“Trace”标签下,如果使用的是“SW”模式,需要勾选“Enable”选项,并在“Core”框中输入MCU的实际工作频率。如果使用的是“JTAG”模式,同样需要先勾选“Enable”,设置好时钟频率后,记得取消勾选,因为“JTAG”模式不支持“Trace”功能。
zwsam 发表于 2024-2-5 10:41 | 显示全部楼层
juliestephen 发表于 2024-2-5 11:37 | 显示全部楼层
可以实现高精度的时间测量,但需要注意定时器的分辨率和计数模式等因素。
qiufengsd 发表于 2024-2-5 12:48 | 显示全部楼层
在Keil调试模式下,可以使用调试器来测量代码的执行时间。
bartonalfred 发表于 2024-2-5 13:22 | 显示全部楼层
设置定时器模式(例如,向上计数或向下计数),时钟源,以及任何必要的预分频器来获得所需的计时分辨率。
benjaminka 发表于 2024-2-5 13:56 | 显示全部楼层
可以在代码开始执行时设置一个计数器,在代码执行完毕后停止计数器,然后计算计数器的值以得到代码的执行时间。
mmbs 发表于 2024-2-5 15:30 | 显示全部楼层
精确测试代码段的运行时间通常需要借助MCU 内部的定时器或者计数器
robincotton 发表于 2024-2-6 13:22 | 显示全部楼层
对于大多数单片机来说,内部都会有一个或多个定时器/计数器。选择一个具有足够分辨率和范围的定时器来测量你的代码运行时间。
adolphcocker 发表于 2024-2-6 14:22 | 显示全部楼层
可以查看代码的运行时间,包括CPU时钟周期数、实时时钟周期数等。
yeates333 发表于 2024-2-6 16:32 | 显示全部楼层
为了更精确地测量特定代码段的运行时间,可以在那段代码的首尾处设置断点,然后通过复位时间窗口(t1或t2)来观察和计算运行时间。当程序运行到断点时,会自动暂停,此时可查看并记录时间窗口中的数值。
rosemoore 发表于 2024-2-6 19:49 | 显示全部楼层
如果代码运行时间较长,定时器可能会溢出。在这种情况下,你需要编写额外的逻辑来处理溢出,并正确计算总运行时间。
wwppd 发表于 2024-2-6 20:28 | 显示全部楼层
对于非常精确或长时间的测量,你可能需要使用外部测量设备,如逻辑分析仪或示波器,来捕捉和测量代码执行期间的相关信号。
albertaabbot 发表于 2024-2-6 21:05 | 显示全部楼层
在代码开始执行的位置设置一个断点,在代码执行完毕的位置设置另一个断点。然后运行程序,当程序到达第一个断点时,记录当前时间,当程序到达第二个断点时,再次记录时间,然后计算两个时间点之间的时间差以得到代码的执行时间。
bartonalfred 发表于 2024-2-6 21:40 | 显示全部楼层
可以配置一个定时器,在代码开始执行时启动定时器,在代码执行完毕后停止定时器,然后计算定时器的计数值以得到代码的执行时间。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

3056

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部