如何用SysTick实现测量程序运行时间

发布者:Meshulun最新更新时间:2024-06-27 来源: elecfans关键字:SysTick  测量程序  运行时间 手机看文章 扫描二维码
随时随地手机看文章

在实际的项目开发过程中,常常遇到需要得到一段代码的运行时间,通常的方法是用示波器来测量,这篇博文将用SysTick来实现精确测量程序运行的时间。STM32F4的内核定时器SysTick是一个24位的定时器,需要注意最大的测量时间。

如何用SysTick实现测量程序运行时间

1,开发环境

1,固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0

2,编译器:ARMCC V5.06

3,IDE:Keil uVision5

4,操作系统:Windows 10 专业版

2,程序源码

MeasureTime.h文件

[cpp] view plain copy/**

******************************************************************************

* @file MeasureTime.h

* @author XinLi

* @version v1.0

* @date 24-October-2017

* @brief Measure program run time module.

******************************************************************************

* @attention

*

* 《h2》《center》Copyright © 2017 XinLi《/center》《/h2》

*

* This program is free software: you can redistribute it and/or modify

* it under the terms of the GNU General Public License as published by

* the Free Software Foundation, either version 3 of the License, or

* (at your option) any later version.

*

* This program is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU General Public License for more details.

*

* You should have received a copy of the GNU General Public License

* along with this program. If not, see 《https://www.gnu.org/licenses/》。

*

******************************************************************************

*/

#ifndef __MEASURETIME_H

#define __MEASURETIME_H

#ifdef __cplusplus

extern “C” {

#endif

/* Header includes -----------------------------------------------------------*/

#include “stm32f4xx.h”

/* Macro definitions ---------------------------------------------------------*/

/* Type definitions ----------------------------------------------------------*/

/* Variable declarations -----------------------------------------------------*/

/* Variable definitions ------------------------------------------------------*/

/* Function declarations -----------------------------------------------------*/

/* Function definitions ------------------------------------------------------*/

/**

* @brief Start measure time.

* @param None.

* @return None.

*/

__STATIC_INLINE void MeasureTimeStart(void)

{

SysTick-》CTRL |= SysTick_CLKSource_HCLK; /* Set the SysTick clock source. */

SysTick-》LOAD = 0xFFFFFF; /* Time load (SysTick-》 LOAD is 24bit)。 */

SysTick-》VAL = 0xFFFFFF; /* Empty the counter value. */

SysTick-》CTRL |= SysTick_CTRL_ENABLE_Msk; /* Start the countdown. */

__nop(); /* Waiting for a machine cycle. */

}

/**

* @brief Stop measure time.

* @param [in] clock: System clock frequency(unit: MHz)。

* @return Program run time(unit: us)。

*/

__STATIC_INLINE double MeasureTimeStop(uint32_t clock)

{

uint32_t count = SysTick-》VAL; /* Read the counter value. */

SysTick-》CTRL &= ~SysTick_CTRL_ENABLE_Msk; /* Close counter. */

double time = 0.0;

if(clock 》 0)

{

time = (double)(0xFFFFFF - count) / (double)clock; /* Calculate program run time. */

}

return time;

}

#ifdef __cplusplus

}

#endif

#endif /* __MEASURETIME_H */

main.c文件

[cpp] view plain copy/**

******************************************************************************

* @file main.c

* @author XinLi

* @version v1.0

* @date 24-October-2017

* @brief Main program body.

******************************************************************************

* @attention

*

* 《h2》《center》Copyright © 2017 XinLi《/center》《/h2》

*

* This program is free software: you can redistribute it and/or modify

* it under the terms of the GNU General Public License as published by

* the Free Software Foundation, either version 3 of the License, or

* (at your option) any later version.

*

* This program is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU General Public License for more details.

*

* You should have received a copy of the GNU General Public License

* along with this program. If not, see 《https://www.gnu.org/licenses/》。

*

******************************************************************************

*/

/* Header includes -----------------------------------------------------------*/

#include “main.h”

#include “MeasureTime.h”

/* Macro definitions ---------------------------------------------------------*/

/* Type definitions ----------------------------------------------------------*/

/* Variable declarations -----------------------------------------------------*/

/* Variable definitions ------------------------------------------------------*/

static __IO double runTime = 0.0;

/* Function declarations -----------------------------------------------------*/

__STATIC_INLINE void delay_1us(void);

/* Function definitions ------------------------------------------------------*/

/**

* @brief Main program.

* @param None.

* @return None.

*/

int main(void)

{

for(;;)

{

MeasureTimeStart();

delay_1us();

runTime = MeasureTimeStop(84);

}

}

/**

* @brief One microsecond delay.

* @param None.

* @return None.

*/

__STATIC_INLINE void delay_1us(void)

{

__nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();

__nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();

__nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();

__nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();

__nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();

__nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();

__nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();

__nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();

__nop(); __nop(); __nop(); __nop();

}


关键字:SysTick  测量程序  运行时间 引用地址:如何用SysTick实现测量程序运行时间

上一篇:总结一些在LwIP移植的时候体会
下一篇:一个关于LPUART输出异常问题分享

推荐阅读最新更新时间:2026-03-25 10:42

如何用SysTick实现测量程序运行时间
在实际的项目开发过程中,常常遇到需要得到一段代码的运行时间,通常的方法是用示波器来测量,这篇博文将用SysTick来实现精确测量程序运行的时间。STM32F4的内核定时器SysTick是一个24位的定时器,需要注意最大的测量时间。 1,开发环境 1,固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 2,编译器:ARMCC V5.06 3,IDE:Keil uVision5 4,操作系统:Windows 10 专业版 2,程序源码 MeasureTime.h文件 [cpp] view plain copy/** *********************************************
[单片机]
如何用<font color='red'>SysTick</font>实现<font color='red'>测量</font><font color='red'>程序</font><font color='red'>运行</font><font color='red'>时间</font>
STM32 | 一种简单、实用的测量程序运行时间的方法
前言 平时我们可能很少去关注程序运行的时间,但是在一些情况下可能需要对程序进行一个整体的复盘、优化。 那么,程序运行的时间就是一个可以考虑的方面,可以测一下某些代码块、函数、算法的运行时间,然后整体考虑看看有没有必要进行优化。 之前在某工控类项目中,我就有接到一个任务去测试程序中关键代码的执行时间,并输出报告。当时是使用一个GPIO+示波器进行测试的,也可以使用逻辑分析仪来测。 当时测量的方法很简单: 在要测试的代码块/函数之前设置该GPIO的电平为高电平,在要测试的代码块/函数之后设置该GPIO为低电平,使用示波器测高电平的时间,就知道了这一代码块/函数的运行时间。 下面就通过实例来介绍一下这种简单而有效的方法。
[单片机]
STM32 | 一种简单、实用的<font color='red'>测量</font><font color='red'>程序</font><font color='red'>运行</font><font color='red'>时间</font>的方法
电机长时间空载运行与负载运行,哪种情况更容易发热?
有的用户在购买的新电机之后,安装在设备上都会进行空载试运行。而在运行的过程中,是负载运行。有的客户会问空载运行与负载运行,在这两种情况下哪种情况鞥容易发热? 只要是在正常的带载范围内,步进电机带负载的转速和空载没有区别。步进电机控制器工作在恒流斩波环境,当电源,控制器,电机都连好以后,对于电源来说,其负载是恒定的,不管电机的负载如何变化,电源的电压,电流都不会变化(假定电源为稳压电源),所谓恒流斩波,仅仅是通过斩波的方式来达到恒流的目的,即电源所提供的能量由控制器和电机来共同消耗,电机取用的能量仅仅是电源提供的一部分,还有一部分消耗在控制器上了,步进电机的空载发热源自铜损,铁损和电机轴的阻尼负载;带载发热也同样源自铜损,铁损和
[嵌入式]
STM32万年历时钟调试经验(时间精度问题,断电RTC不持续运行
最初调试STM32的万年历,使用的是内部的 LSI晶振作为RTC晶振来源,发现有两个问题: 第一:由于LSI晶振频率大约在40KHZ附近,实际上会在30~60KHZ之间波动,导致计时不准,基本上一个小时会有1分钟左右的偏差。 第二: 由于LSI内部晶振,在断电的时候,并不在后备供电区域范围内,而外接的3.3V电池连接到VBAT上,只给后备供电区域供电,导致系统断电后,电池只能维持后备RTC的计数,并没有给LSI晶振供电(见下图所示:),导致RTC总是保持在断电之前的时间。虽然重新上电后又可以继续运行。但是需要重新校准了 。 最后使用了外界的32.768KHZ的外部LSE晶振作为RTC晶振来源,调试过程中发现,反复修改,问题
[单片机]
STM32万年历时钟调试经验(<font color='red'>时间</font>精度问题,断电RTC不持续<font color='red'>运行</font>)
Melexis的新款微功耗开关助力延长物联网电池运行时间
2023年9月28日,比利时泰森德洛—— 全球微电子工程公司Melexis今日宣布,Melexis推出超低功耗霍尔开关MLX92216和MLX92217,具有功耗仅为1微瓦且误差更小等优势,有助于准确预测电力成本并延长电池运行时间 。这两款磁性器件能用于检测开/关位置,可取代传统干簧管开关,成为物联网(IoT)、工业和白色家电应用的首选。 现代社会对采用电池供电的智能设备的需求在与日俱增,对延长电池运行时间的要求更加日益迫切,物联网应用因此正面临巨大挑战。因此,满足业界对超低功耗、高可靠性、高精度元件的需求,对继续推动嵌入式和联网设备的持续发展至关重要。 Melexis发布的微瓦级开关MLX92216和MLX9221
[物联网]
Melexis的新款微功耗开关助力延长物联网电池<font color='red'>运行</font><font color='red'>时间</font>
功率分析仪中运行的不同时间的解释
功率分析仪知识科普:时间的定义 功率测试仪定义:时间 在上面的段落中,它被讲述了很多次:周期时间,测量时间,...... 以下是在功率分析仪中运行的不同时间的解释。除此之外,还解释了同步和其他一些重要的事情。 功率测试仪采样时间 最快时间是两个值之采样间的时间。此时间取决于每秒的模/数转化次数。例如,在LMG95中,我们每秒大约有100000次转换(对于每个电压和电流通道),因此每10μs我们会看到一个新的采样值。 同步 您必须选择要同步的信号。为什么必须同步? 例如,如 RMS 值 一节中所述,这些值是在定义的观测时间内定义的。对于周期性信号,这是信号的周期时间(或周期时间的整数倍)。因此,仪器必须测量多个周期的信号。在
[测试测量]
电机短时工作制有几种_电机短时运行时间有几种
  电机短时工作制有几种   1、短时工作制   电机短时通电,温升未达到稳定就停止工作,并且下一次工作要等到电器冷却到介质温度以后,这种情况称为短时工作制。   2、长期工作制   电机的长期工作制是指电器接通电源后连续工作到发热稳定的工作制。   3、间断工作制   电机的间断工作制是指电器一会儿通电,一会儿断电的反复循环的工作过程。   电机短时运行时间有几种   短时运行的时限优先采用10、30、60和90 mi n。
[嵌入式]
电机短时工作制有几种_电机短时<font color='red'>运行</font><font color='red'>时间</font>有几种
NanoGraf研全球能量密度最高锂电池 将电动汽车运行时间延长28%
据外媒报道,为了更好地实现电动化未来,当地时间6月10日,先进电池材料公司NanoGraf表示,已经生产出全球能量密度最高的18650圆柱形锂离子电池,与由传统电池化学成分制成的电池相比,运行时间可延长28%。 NanoGraf电池(图片来源:NanoGraf) 在美国国防部以及其他机构的支持下,NanoGraf的科学家、技术人员兼工程师团队发布了一款硅阳极电池,能量密度达800 Wh/L,能够为消费电子产品、电动汽车、士兵作战时使用的装备等提供极大的好处。 NanoGraf公司总裁Kurt (Chip) Breitenkamp博士表示:“这是电池行业的一次突破。现在,电池能量密度已经趋于稳定,在过去10年内只增
[汽车电子]
NanoGraf研全球能量密度最高锂电池 将电动汽车<font color='red'>运行</font><font color='red'>时间</font>延长28%
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved