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
    +关注

    关注

    146

    文章

    17316

    浏览量

    352493
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9164

    浏览量

    368997
  • 代码
    +关注

    关注

    30

    文章

    4823

    浏览量

    68983

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    如何使用Ozone分析Cortex-M异常

    Ozone可以帮助用户快速分析和查找导致CPU故障的软件bug。本文解释如何使用Ozone的调试功能,深入了解Cortex-M架构上的这些错误。
    的头像 发表于 11-29 11:14 905次阅读
    如何使用Ozone分析<b class='flag-5'>Cortex-M</b>异常

    MAX32675C超低功耗Arm® Cortex®-M4F MCU

    检测(SEC-DED),确保为要求苛刻的应用提供超可靠的代码执行。 *附件:MAX32675C超低功耗Arm® Cortex®-M4F
    的头像 发表于 11-28 11:50 486次阅读
    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>

    【RA-Eco-RA2E1-48PIN-V1.0开发板试用】原创测量代码行时间

    应用在所有Cortex-M处理器上,不限内核版本。 加入keil工程 添加文件目录 在hal_entry()里面添加如下函数代码 while里面实现流水灯,同时测量流水灯执行时间
    发表于 11-06 15:32

    实际项目开发中为何选择ARM® Cortex®-M4 内核的HK32MCU

    ®Cortex®-M4内核的HK32F407芯片的深度知识,并围绕各类实际案例详细解读了如何选型,为何选择ARM®Cortex®-M4内核的
    的头像 发表于 10-22 17:19 483次阅读
    实际项目开发中为何选择<b class='flag-5'>ARM</b>® <b class='flag-5'>Cortex</b>®-<b class='flag-5'>M</b>4 内核的HK32<b class='flag-5'>MCU</b>?

    基于瑞萨Arm Cortex-M85 MCU Feather SOM的解决方案

    开源社区已经从传统的黑客聚集地逐渐扩展到家庭、办公室以及工业应用等广泛领域。在这个过程中,瑞萨的Arm Cortex-M85 MCU Feather SOM凭借着卓越的性能和丰富的功能,为开源硬件爱好者和专业开发者提供了强大的支
    的头像 发表于 08-19 17:32 570次阅读

    深度探讨:无人机干扰器干扰执行时间的关键影响因素

    随着无人机技术的广泛应用,无人机干扰器作为防御和管控无人机的重要工具,其在军事、民用及公共安全等领域发挥着重要作用。然而,无人机干扰器的干扰执行时间直接决定了其有效性和实用性。本文将深入探讨无人机干扰器干扰执行时间的影响因素,并对这些因素进行详细解析。
    的头像 发表于 05-29 09:27 611次阅读

    请问stm32cubeIDE仿真怎么看程序执行时间

    就想keil仿真那样,可以时刻监视程序执行时间,cubeide怎么在仿真debug时,监视程序时间呢?
    发表于 04-02 07:47

    Cortex-M0+内核介绍

    ARM Cortex-M0+是2012年3月14日ARM公司发布的一款低功耗效率、能效最高的ARM处理器,可用于存在设计约束的嵌入式应用。它具有最小的硅面积和极少的
    的头像 发表于 03-27 09:13 1143次阅读
    <b class='flag-5'>Cortex-M</b>0+内核介绍

    G431CB把stack heap全分配到ccmram,代码执行速度并未改善是怎么回事?

    把stack heap全分配到ccmram发现函数执行时间也没有什么改善,附图是我的结果 函数执行速度非但没有改善,反而发现在ccmram执行很不稳定; 测试手段:用定时器3计数来实现该函数
    发表于 03-27 08:23

    兆易创新推出GD32F5系列Cortex-M33内核MCU

    兆易创新GigaDevice宣布,正式推出GD32F5系列高性能微控制器,该系列MCU基于Arm® Cortex®-M33内核,旨在满足各类高要求应用场景的需求。
    的头像 发表于 03-16 09:58 1297次阅读

    业界首款基于Arm Cortex-M85处理器的MCU

    所有RA8系列MCU均利用Arm Cortex-M85处理器和Arm的Helium技术所带来的高性能,结合矢量/SIMD指令集扩展,能够在数字信号处理器(DSP)和机器学习(ML)的实
    发表于 03-05 14:14 794次阅读
    业界首款基于<b class='flag-5'>Arm</b> <b class='flag-5'>Cortex-M</b>85处理器的<b class='flag-5'>MCU</b>

    Arm Helium技术诞生的由来 为何不直接采用Neon?

    经过 Arm 研究团队多年的不懈努力,Arm 于 2019 年推出了适用于 Armv8‑M 架构的 Arm Cortex-M 矢量扩展技术
    的头像 发表于 02-29 17:01 2500次阅读
    <b class='flag-5'>Arm</b> Helium技术诞生的由来 为何不直接采用Neon?

    Cortex-M85内核单片机如何快速上手

    2022年4月,Arm推出了全新的MCU级内核Cortex-M85。截止目前(2024年2月),Cortex-M85是最新、最强的Cortex-M
    发表于 02-29 09:35 805次阅读
    <b class='flag-5'>Cortex-M</b>85内核单片机如何快速上手

    ARM®Cortex®-M23 32位MCU数据表

    电子发烧友网站提供《ARM®Cortex®-M23 32位MCU数据表.pdf》资料免费下载
    发表于 02-22 14:32 0次下载
    <b class='flag-5'>ARM</b>®<b class='flag-5'>Cortex</b>®-<b class='flag-5'>M</b>23 32位<b class='flag-5'>MCU</b>数据表