论坛» 嵌入式开发» MCU

[求助]tornado编程中如何计算一段代码的运行时间?

菜鸟
2007-02-26 02:32 1楼
多谢!
菜鸟
2007-02-26 07:26 2楼
woodhead兄呢?帮帮忙阿
菜鸟
2007-02-27 17:55 3楼
你可以使用时戳的功能!
菜鸟
2007-02-27 18:10 4楼

个人认为计算运行时间比较麻烦的地方在于时间的刻度,在vxWorks里面能够提供的最小刻度是tick,这个时间刻度对于代码的运行显然太大了,我们在做代码优化的时候也曾经做过计算代码运行时间的工作,使用的是tick + dec,tick不用细说了,一般10毫秒一个,dec是ppc类型的cpu都有的一个中断,一般是一个16或32位的寄存器,根据板内时钟计算得到一个值,这个值递减到0刚刚好是一个tick。可以在需要计算的代码执行前记录一个tick值和一个dec值,在代码执行完后再计算一次,两次的结果都换算成dec的中断数然后相减,换算一下得到时间。

对于ARM和Mips没有dec寄存器,但是总要为vxWorks提供tick时钟的,一般使用定时器模拟,定时器的即时值能读出来的,就使用这个值,如果不能读出来就麻烦了。我用过一款arm的cpu型号是ks8695,里面的定时器不能读取即时值,后来在单板上加了一个逻辑芯片自己做了一个时钟计算代码效率。

菜鸟
2007-02-28 19:13 5楼
多谢二位!我找到了方法
菜鸟
2007-02-28 23:12 6楼
使用的什么方式?精度如何?
菜鸟
2007-03-01 20:03 7楼
就是用得时间戳的函数,精度应该还可以吧
菜鸟
2007-03-15 19:30 8楼

时间戳功能指的是什么啊?是关于tick的那几个api么?楼主能否把具体步骤说得详细些阿?

菜鸟
2007-03-23 04:56 9楼

timeStamp。

如果资源够,整个中断率很高的定时器,挂中断来测时间嘛。

直接把主时钟搞成1ms也不错。如果1ms够用,机器允许的话。

菜鸟
2007-03-23 20:45 10楼

中断不可取,1ms的时间刻度太大了,没有办法度量函数的执行,中断太频繁cpu的占用率会大量增加,另外中断在每个tick内10次的压栈出栈操作会让测出来的时间不准确。

我最近看了风河的scopetools,感觉用来测试内存、函数都不错,profileScope用来测试任务和函数的占用率,它的原理是用不与系统时钟同步的另一个时钟定期采样,测到的是一个近乎平均的值,可以用在满负荷的时候测试函数的运行,避免了单次测试的偶然性。

MemScope用了动态对内存申请释放函数打补丁的方法,用于监控内存,可以分析到哪个任务的哪个函数具体第几行申请了内存以及是否释放,查内存泄漏很方便。

共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]