想了解下如何查看STM32一个任务的执行时间,比如一个FFT计算的时间。
带UCOS系统和裸奔情况下,都能如何查看,需要怎么做。
在算法实现相同情况下,肯定裸开发的实现更快,有系统的系统相关管理等一样要占用一些资源,这些资源在裸开发时则完全可以投入实际应用。
对于任务执行时间的计算
有系统和裸开发是不同的,有系统的,一般在系统级提供相应的api,在执行任务前后进行调用,计算差值输出即可,
无系统的当然没有相应api供调用,但也可以借助一些外部信号标记任务前后状态变化历时,从而得出主任务时间,比如在主任务执行前,使得某个IO口输出一个特定标志信号(简单的IO翻转脉冲后维持一个稳定脉冲),在任务结束后再次输出这个脉冲,由逻辑分析仪捕获这些脉冲,计算差值即可得出主任务费时。
1.用ucos这个好说,OSTimeGet有这个函数的,计算返回值的差即可。
2.没有ucos的时候,有下面几种办法
直接获取RTC的时间值,不过最低单位是s,适合做任务统计。
1,放断点看Debug信息
2,配置一个IO,任务启停关联到电平输出,用示波器查看脉冲宽度
有系统的,比如ucos,那就很简单,有专门的函数可调用实现时间计算,有个OSTimeGet函数,执行FFT前调用下,执行完后调用下,两者差值就是了;
没有系统的,那就是利用示波器,在任务执行前给一个IO低电平,在任务执行完后给IO高电平,通过示波器看这个宽度就是时间。
裸机和操作系统都可以用硬件定时器来测量一个事件的执行时间,事件开始的时候开启定时器,结束的时候停止定时器
不过操作系统会存在发生任务切换的问题,如果要精确的测量,最好只开一个任务,或者测量的时候关掉其他的任务
用个IO口,开始时拉高,结束时拉低,用示波器或是逻辑分析仪从波形上看时间大小。
或是用定时器,前后,读取定时器计数寄存器中的值来转换成时间