如何衡量函数执行所需的时间?
这是一个相对较短的函数,执行时间可能在毫秒范围内.
这个特殊问题涉及用C或C++编程的嵌入式系统.
在嵌入式系统上执行此操作的最佳方法是在进入功能时设置外部硬件引脚,并在离开功能时将其清除.这最好通过一个小的汇编指令来完成,这样你就不会过多地扭曲你的结果.
编辑:其中一个好处是您可以在实际应用程序中执行此操作,而不需要任何特殊的测试代码.像这样的外部调试引脚(应该是!)是每个嵌入式系统的标准做法.
有三种可能的解决方案:
硬件方案:
使用处理器上的空闲输出引脚,将示波器或逻辑分析仪连接到引脚.在调用要测量的函数之前,将引脚初始化为低电平状态,将引脚置为高电平状态,并在从函数返回后将引脚置为无效.
*io_pin = 1; myfunc(); *io_pin = 0;
书虫解决方案:
如果函数相当小,并且您可以管理反汇编代码,则可以破解处理器体系结构数据手册,并计算处理器执行每条指令所需的周期.这将为您提供所需的循环次数.
时间=#cycles*处理器时钟速率/每个指令的时钟滴答
对于较小的函数或用汇编语言编写的代码(例如PIC单片机),这更容易实现
时间戳计数器解决方案:
一些处理器具有时间戳计数器,其以快速递增(每几个处理器时钟滴答).只需读取函数前后的时间戳即可.这将为您提供已用时间,但要注意您可能必须处理计数器翻转.