标题: 有什么方法可以获得单片机中断服务函数中程序执行的时间? [打印本页]

作者: hxdby    时间: 2022-5-22 20:42
标题: 有什么方法可以获得单片机中断服务函数中程序执行的时间?
大家好!

请问有没有什么方法可以知道中断服务函数中程序执行的时间是多少?

比如我有一个单片机定时器中断,假设中断函数中有30行程序,那么从进入中断开始执行第一行程序,到最后一行结束跳出中断,这中间的时间如何获得?

现在主要是我定时器中断设置的是1ms进一次中断,而我的中断中的程序比较多(不确定执行时间是否超过1ms,不过按道理1ms也挺长了),想计算实际的程序执行时间,这样比较保险点。
希望各位大神赐教方法,谢谢!

作者: 人工置顶员    时间: 2022-5-23 04:01
顶一下
作者: wolfinn    时间: 2022-5-23 05:13
好象Keil调试功能本来就有这个功能,点运行进中断程序之前的时间值减去之后的时间值就可以了。
作者: cjjdemon    时间: 2022-5-23 09:11
进中断加一个IO口电平变化,出中断时此IO口电平反转,用示波器看一下可以大概推算出来。
作者: abob    时间: 2022-5-23 09:55
找一个空闲的IO, 进出中断的时候置高低。 拿示波器看脉宽就好了。
作者: cnos    时间: 2022-5-23 10:00
进中断,启动定时器,出中断,停止定时器,读取定时器的计数值,即可获得中断程序的执行时间。12MHz下,传统8051的定时器分辨率为1uS。STC的定时器,时钟可x12,分辨率约为0.1uS,如果主频设置到24Mhz,则分辨率可达0.05uS。这个分辨率应该够你用了。
作者: lkc8210    时间: 2022-5-23 10:57
如果你用的是Keil+89C52单片机
可以用以下方法
1 点击目标选项 如图



2 输入模拟晶振频率,为方便计时,可输入12, 然后点击OK



3 点击中断内的第一行的边边,加上断点
4 在中断内的最后一行加上一段简单的代码 如图,并加上断点
5 按F7进行编译



6 进入Debug Mode 如图



7 如代码会受按键影响,可添加IO模拟 如图



8 点击左上角运行
9 代码框会出现蓝黄箭嘴,如图,代表准备运行该行
10 左边的states是运行步数,在11.0592Mhz晶振频率下,一步是1.085us
11 左边的sec是运行时间
12 计下此时的运行步数或运行时间然后点击左上角运行



13 从运行步数得知,我这段代码用了1740-1698 = 42 步 = 45.57us
14 从运行时间得知,我这段代码用了0.00188802 - 0.00184245 = 0.00004557s





作者: Y_G_G    时间: 2022-5-23 14:11
最好的办法就是示波器
如果没有,那就仿真,如果是STC的8051仿真的时间会比实际的时间长
作者: lkc8210    时间: 2022-5-24 15:47
刚找到了一个更直观的方法(Keil V5.20)































作者: hxdby    时间: 2022-5-25 22:35
lkc8210 发表于 2022-5-24 15:47
刚找到了一个更直观的方法(Keil V5.20)

我的是ARM M0 MCU, 方法应该差不多,我试下,非常感谢图文并茂的解释,辛苦了!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1