0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何测量ARM Cortex-M MCU代码的执行时间

奈因PCB电路板设计 来源:麦克泰技术 作者:麦克泰 2021-08-26 09:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在许多实时应用中,如电机控制、发动机控制、无线通信等时间敏感的应用,CPU可能花费不到5%的时间执行代码。这些嵌入式系统通常用C语言编写,开发人员可能会使用到汇编语言优化代码,以满足时间期限(deadline)要求。测量部分代码的实际执行时间可以帮助我们找到代码中的时间关键点。

本文将展示如何轻松测量和显示基于Cortex-M MCU的代码片段的执行时间。

测量执行时间的方法

有很多方法可以测量代码执行时间。嵌入式工程师经常使用数字输出和示波器。我们可以在监视的代码执行之前,设置输出为高电平,代码执行后将输出设置为低电平。当然,在执行此操作之前需要进行大量设置工作:找到易于探测的输出引脚,将端口配置为输出,编写代码,编译等等。获得信号后,你可能需要对其进行一段时间的监测以查看其运行时间的最小值和最大值。

测量执行时间的另一种方法是使用具有跟踪功能的调试工具。你只需运行代码、查看跟踪、手动计算增量时间并将CPU周期转换为微秒。不幸的是,跟踪仅提供一次执行实例,你可能需要进一步查看跟踪捕获以找到最坏情况的执行时间,这可能是一个乏味的过程。

Cortex-M周期计数器

Cortex-M的处理器上的 CoreSight调试端口包含一个32位自由运行计数器,用于CPU时钟周期计数。计数器是调试监视和跟踪 (DWT) 模块的一部分,可轻松用于测量代码的执行时间。启用和初始化该功能所需的代码如下:

e2b842d0-e411-11eb-a97a-12bb97331649.png

使用DWT周期计数器测量代码执行时间

我们可以通过读取代码段前后的循环计数器的值来测量并计算代码片段的执行时间,如下所示。

e2c254fa-e411-11eb-a97a-12bb97331649.png

无符号数delta表示被测代码的实际执行时间(以CPU时钟周期为单位)。

在代码执行期间可能会发生中断,因此每次执行此序列获得时间值可能并不相同,我们也可以在测量期间禁用中断以移除中断的影响。但建议在测量中允许中断,因为它们会影响代码的时间期限。

e2ca3cd8-e411-11eb-a97a-12bb97331649.png

如果被测量的代码包含条件语句、循环或任何可能导致变化的东西,那么获得的值可能不代表最坏情况下的执行时间。要解决此问题,可以简单地添加一个峰值检测,如下所示。在进行任何测量之前,需要声明 max 并将其初始化为最小值(即 0)。

e2d42626-e411-11eb-a97a-12bb97331649.png

同样,如果需要了解最短执行时间,min只需在测量之前声明并初始化为最大计数值(即 0xFFFFFFFF)。代码如下:

e2dc8636-e411-11eb-a97a-12bb97331649.png

执行时间还取决于 CPU是否配备cache,某些Cortex-M4和Cortex-M7处理器集成了Cache。如果 系统使用了指令或数据cache,则同一代码段的多次测量结果可能会不一致。你可以考虑禁用cache来衡量最坏的情况。

大多数调试器能够实时显示这些变量值。我们可以使用Global声明显示的变量以保留其值并允许实时监控。这些值代表CPU时钟周期,但大多数调试器无法为显示目的缩放变量。假设CPU时钟速度为16 MHz,显示70.19微秒比显示1123个周期要方便得多。实际上有一种更好的方式来显示实时变量,使用μC/Probe实时监控工具,它还提供了缩放能力,以易读的形式查看变量值。

使用μC/Probe显示测量值

在应用中添加测量,监控四个代码片段的执行时间,并通过μC/Probe显示测量结果。

下图显示了使用 IAR的LiveWatch(左)和 μC/Probe 的Tree View控件(右)的原始测量值。elapsed_time_tbl[] 是一个数组,用于存储不同代码片段的测量值。

你还可以将min/max/current值分配给gauge和numeric indicator控件,如下图所示。这里的值以微秒为单位显示,示例中CPU以80 MHz 运行,使用了0.0125的缩放因子。仅显示最长执行时间。

uC/Probe还可以与Microsoft的Excel连接,从而在电子表格中显示实时值,如下图所示。

e31cca0c-e411-11eb-a97a-12bb97331649.png

总结

作为嵌入式开发人员,我们有许多工具可以用来测试和验证我们的设计。μC/Probe提供了许多功能,允许用户使用gauge、meter、numeric indictor、Excel或graph/plots来监控应用程序中的变量。基于Cortex-M处理器的DWT 周期计数器功能和μC/Probe,我们可以轻松实现Cortex-M MCU应用的设计验证工作。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18603

    浏览量

    386531
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9499

    浏览量

    388549
  • 代码
    +关注

    关注

    30

    文章

    4940

    浏览量

    73116

原文标题:教你一招:在ARM Cortex-M MCU上测量代码执行时间

文章出处:【微信号:pcbgood,微信公众号:奈因PCB电路板设计】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Cortex-M产品的特色

    与外部设备进行通信。 指令集:Cortex-M系列处理器支持ARM Thumb指令集,包括16位和32位的Thumb-2指令集,以及可选的DSP指令和浮点单元,提供了高性能的信号处理能力
    发表于 11-26 07:22

    Cortex-M内核中的精确延时的方法

    使用 CYCCNT寄存器来测量执行某个任务所花的周期数,这也可以用作时间基准相关的目的(操作系统中统计 CPU使用率可以用到它)。” Cortex-M中的DWT它有一个32位的寄存器叫
    发表于 11-21 07:51

    Cortex-M级别的转换

    一、 简述 Cortex-M 里面有特权级别的概念,不同级别可以设定不同的权限,如何转换特权级别基本是本章的内容。 二、操作模式 ARM M 核操作模式有两个: 线程(Thread)模式:在复位时或
    发表于 11-19 07:32

    STM32C031x4/x6:面向主流应用的Arm® Cortex®-M0+ 微控制器

    STMicroelectronics的STM32C0x Arm^® ^Cortex ^®^ -M0+ 32位MCU安装了高性能Arm
    的头像 发表于 10-27 15:05 332次阅读
    STM32C031x4/x6:面向主流应用的<b class='flag-5'>Arm</b>® <b class='flag-5'>Cortex</b>®-<b class='flag-5'>M</b>0+ 微控制器

    MSPM0G1507 80MHz Arm® Cortex-M0®+ MCU技术手册

    MSPM0G150x 微控制器 (MCU) 是 MSP 高度集成、超低功耗 32 位 MCU 系列的一部分,基于增强型 Arm Cortex-M0+ 32 位核心平台,工作频率高达 8
    的头像 发表于 09-30 09:08 578次阅读
    MSPM0G1507 80MHz <b class='flag-5'>Arm</b>® <b class='flag-5'>Cortex-M</b>0®+ <b class='flag-5'>MCU</b>技术手册

    MSPM0G3506-Q1 汽车 80MHz Arm® Cortex-M0®+ MCU技术手册

    MSPM0G350x 微控制器 (MCU) 是 MSP 高度集成、超低功耗 32 位 MCU 系列的一部分,基于增强型 Arm Cortex-M0+ 32 位核心平台,工作频率高达 8
    的头像 发表于 09-29 11:27 3110次阅读
    MSPM0G3506-Q1 汽车 80MHz <b class='flag-5'>Arm</b>® <b class='flag-5'>Cortex-M</b>0®+ <b class='flag-5'>MCU</b>技术手册

    【RA-Eco-RA6M4开发板评测】使用ULINK2开发瑞萨MCU

    · 支持 ARM7、ARM9、Cortex-M、8051 和 C166 设备 · JTAG 速度高达 10MHz · 针对基于 ARM Corte
    发表于 09-25 23:08

    请问NuMicro® Cortex-M® 系列芯片是否支持 I2C 监视器功能?

    NuMicro® Cortex-M® 系列芯片是否支持 I2C 监视器功能?
    发表于 08-21 06:04

    Analog Devices Inc. MAX32675C超低功耗Arm® Cortex®-M4F MCU数据手册

    MCU基于带浮点单元(FPU)的超低功耗Arm Cortex- M4,包括384KB(376KB用户)闪存和160KB SRAM。在整个闪存、SRAM和缓存上实现纠错编码(ECC),能
    的头像 发表于 06-03 10:04 665次阅读
    Analog Devices Inc. MAX32675C超低功耗<b class='flag-5'>Arm</b>® <b class='flag-5'>Cortex</b>®-<b class='flag-5'>M</b>4F <b class='flag-5'>MCU</b>数据手册

    PPEC新品发布丨图形化编程数字电源专用 ARM Cortex-M4 MCU

    PPEC32F334RBT7是森木磊石最新推出的图形化编程数字电源专用ARMCortex-M4MCU,以全面图形化零代码编程为电源开发赋能,有效解决了传统电源开发中代码复杂、调试周期长、技术门槛高等
    的头像 发表于 05-22 17:30 1130次阅读
    PPEC新品发布丨图形化编程数字电源专用 <b class='flag-5'>ARM</b> <b class='flag-5'>Cortex-M</b>4 <b class='flag-5'>MCU</b>

    tc397如何高精度(微秒级别)测量代码执行时间

    tc397如何高精度(微秒级别)测量代码执行时间
    发表于 04-21 07:31

    MSPM0G1505 80MHz Arm® Cortex-M0®+ MCU数据手册

    MSPM0G150x 微控制器 (MCU) 是 MSP 高度集成、超低功耗 32 位 MCU 系列的一部分,该系列基于增强型 Arm Cortex-M0+ 32 位内核平台,运行频率高
    的头像 发表于 04-15 14:08 873次阅读
    MSPM0G1505 80MHz <b class='flag-5'>Arm</b>® <b class='flag-5'>Cortex-M</b>0®+ <b class='flag-5'>MCU</b>数据手册

    MSPM0G3106 80MHz Arm® Cortex-M0®+ MCU数据手册

    MSPM0G310x 微控制器 (MCU) 是 MSP 高度集成、超低功耗 32 位 MCU 系列的一部分,基于增强型 Arm Cortex-M0+ 32 位内核平台,运行频率高达 8
    的头像 发表于 04-15 11:44 894次阅读
    MSPM0G3106 80MHz <b class='flag-5'>Arm</b>® <b class='flag-5'>Cortex-M</b>0®+ <b class='flag-5'>MCU</b>数据手册

    MSPM0C1103 24MHz Arm® Cortex-M0®+ MCU数据手册

    MSPM0C110x 微控制器 (MCU) 是 MSP 高度集成的超低功耗 32 位 MCU 系列的一部分,基于增强型 Arm Cortex-M0+ 内核平台,运行频率高达 24MHz
    的头像 发表于 04-15 09:39 1043次阅读
    MSPM0C1103 24MHz <b class='flag-5'>Arm</b>® <b class='flag-5'>Cortex-M</b>0®+ <b class='flag-5'>MCU</b>数据手册

    充电桩CCC认证什么时候执行

    充电桩CCC认证的执行时间表如下:
    的头像 发表于 12-25 17:12 1357次阅读