共10条
1/1 1 跳转至页
[求助]tornado编程中如何计算一段代码的运行时间?
个人认为计算运行时间比较麻烦的地方在于时间的刻度,在vxWorks里面能够提供的最小刻度是tick,这个时间刻度对于代码的运行显然太大了,我们在做代码优化的时候也曾经做过计算代码运行时间的工作,使用的是tick + dec,tick不用细说了,一般10毫秒一个,dec是ppc类型的cpu都有的一个中断,一般是一个16或32位的寄存器,根据板内时钟计算得到一个值,这个值递减到0刚刚好是一个tick。可以在需要计算的代码执行前记录一个tick值和一个dec值,在代码执行完后再计算一次,两次的结果都换算成dec的中断数然后相减,换算一下得到时间。
对于ARM和Mips没有dec寄存器,但是总要为vxWorks提供tick时钟的,一般使用定时器模拟,定时器的即时值能读出来的,就使用这个值,如果不能读出来就麻烦了。我用过一款arm的cpu型号是ks8695,里面的定时器不能读取即时值,后来在单板上加了一个逻辑芯片自己做了一个时钟计算代码效率。
中断不可取,1ms的时间刻度太大了,没有办法度量函数的执行,中断太频繁cpu的占用率会大量增加,另外中断在每个tick内10次的压栈出栈操作会让测出来的时间不准确。
我最近看了风河的scopetools,感觉用来测试内存、函数都不错,profileScope用来测试任务和函数的占用率,它的原理是用不与系统时钟同步的另一个时钟定期采样,测到的是一个近乎平均的值,可以用在满负荷的时候测试函数的运行,避免了单次测试的偶然性。
MemScope用了动态对内存申请释放函数打补丁的方法,用于监控内存,可以分析到哪个任务的哪个函数具体第几行申请了内存以及是否释放,查内存泄漏很方便。
共10条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |