Keil精确测量代码运行时间

在工程设置中“Debug”下,选右边硬件仿真,点下拉框选“J-LINK/J-TRACE”,再点“Setting”


在弹出窗口中“Debug”下,选“JTAG”或“SW”,在后面选好下载速率。


点到Trace”标签下,如果是选择的“SW”

则勾选“Enable”选项,在“Core”框中输入MCU实际工作时钟频率(就是单片机以什么频率来执行指令的,MDK会用它来计算时间),再勾选“Autodetect max SW0 Clock”


如果是选择的“JTAG”,

先勾选“Enable”,在“Core”中设好时钟频率,最后去掉刚才勾选的“Enable”


因为“JTAG”模式不支持“Trace”功能,不把“Enable”去掉,仿真会报错。

接下来点进入仿真,界面右下角就会有时间窗口


鼠标放在上面右键点击,就会有:


上面两个是复位“t1”和“t2”的,下面3个是选择在状态栏上显示哪个时间。

“t0”表示程序开始运行到现在的时间,是不能复位的。另外两个可以随便复位,就可以用来测具体某一个函数或某一行程序的运行时间。

具体操作为:在要测试的代码前加一个断点,当程序运行到目标行时会停下,然后复位“t1”或“t2”,并在下一行代码前加断点,然后继续运行程序,程序会停在下一行代码前,这个时候“t1”的值就是目标行程序的运行时间。



### 如何在 KEIL MDK 中实现代码段执行时间的精确测量 #### 使用在线调试功能测量代码段执行时间 为了测量特定代码段的执行时间,可以通过在线调试的方式完成。具体操作是在目标代码前后分别设置断点并记录寄存器中的时间戳。 当进入在线调试模式后,在左侧窗口切换至 **Registers** 栏目。该栏目下的 `Sec` 字段显示的是当前系统秒级计数值[^3]。对于更精细的时间度量,则可能依赖于具体的微控制器特性及其内置定时器资源来获取更高精度的时间戳。 #### 配置硬件仿真环境 确保选择了合适的硬件仿真设备用于连接开发板与PC端软件通信。这通常意味着要在工程设置里的 “Debug” 选项卡中选择右侧的硬件仿真类别,并从下拉菜单里挑选像 J-LINK 或者 J-TRACE 这样的接口适配器[^4]。 ```c // 示例C语言代码片段展示如何利用嵌入式系统的SysTick或其他定时器中断来进行高分辨率计时 volatile uint32_t start_time, end_time; void StartTimer(void){ SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 停止计数器 SysTick->VAL = 0; // 清除当前值 start_time = SysTick->LOAD - SysTick->VAL; } uint32_t StopTimer(void){ end_time = SysTick->LOAD - SysTick->VAL; return (end_time - start_time); } ``` 上述代码展示了基于ARM Cortex-M系列MCU上常用的SysTick定时器进行简单计时的方法之一。实际应用时应根据所使用的具体处理器型号调整相应的初始化配置以及读取方式。 #### 注意事项 由于不同项目的底层硬件平台差异较大,因此建议查阅对应单片机的数据手册以获得最准确可靠的计时手段指导;另外还需注意某些情况下外部因素如电源电压波动也可能影响最终测得的结果准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值