• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

如何查看STM32一个任务执行时间

great_CC 2020-07-18 浏览量:1003

想了解下如何查看STM32一个任务的执行时间,比如一个FFT计算的时间。

带UCOS系统和裸奔情况下,都能如何查看,需要怎么做。


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 在算法实现相同情况下,肯定裸开发的实现更快,有系统的系统相关管理等一样要占用一些资源,这些资源在裸开发时则完全可以投入实际应用。


    对于任务执行时间的计算

    有系统和裸开发是不同的,有系统的,一般在系统级提供相应的api,在执行任务前后进行调用,计算差值输出即可,

    无系统的当然没有相应api供调用,但也可以借助一些外部信号标记任务前后状态变化历时,从而得出主任务时间,比如在主任务执行前,使得某个IO口输出一个特定标志信号(简单的IO翻转脉冲后维持一个稳定脉冲),在任务结束后再次输出这个脉冲,由逻辑分析仪捕获这些脉冲,计算差值即可得出主任务费时。

    • 发布于 2020-07-19
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 如果只计算fft肯定是裸机快,具体时间可以用串口打印,计算前开启定时计数器,计算后把定时器结果用串口打印出来就知道了
    • 发布于2020-07-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 没有RTC的情况

    1.用ucos这个好说,OSTimeGet有这个函数的,计算返回值的差即可。

    2.没有ucos的时候,有下面几种办法

    1. 利用定时器的计数值,可以做简单的时间估算。
    2. 可以任务前后翻转一个IO,用逻辑分析仪或者示波器抓波形,看看时间间隔。
    3. 可以开启debug进入反汇编,看汇编代码的指令,可以知道机器周期,从而知道执行时间。


    有RTC的情况,并且任务比较长的时候

    直接获取RTC的时间值,不过最低单位是s,适合做任务统计。

    • 发布于2020-07-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 1,放断点看Debug信息

    2,配置一个IO,任务启停关联到电平输出,用示波器查看脉冲宽度

    • 发布于2020-07-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 有系统的,比如ucos,那就很简单,有专门的函数可调用实现时间计算,有个OSTimeGet函数,执行FFT前调用下,执行完后调用下,两者差值就是了;

    没有系统的,那就是利用示波器,在任务执行前给一个IO低电平,在任务执行完后给IO高电平,通过示波器看这个宽度就是时间。

    • 发布于2020-07-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 裸机和操作系统都可以用硬件定时器来测量一个事件的执行时间,事件开始的时候开启定时器,结束的时候停止定时器

    不过操作系统会存在发生任务切换的问题,如果要精确的测量,最好只开一个任务,或者测量的时候关掉其他的任务

    • 发布于2020-07-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 用个IO口,开始时拉高,结束时拉低,用示波器或是逻辑分析仪从波形上看时间大小。

    或是用定时器,前后,读取定时器计数寄存器中的值来转换成时间

    • 发布于2020-07-20
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

如何查看STM32一个任务执行时间