请教:延时函数用软件仿真和实测值差异较大

2019-08-22 13:08发布

 就是一个简单的延时函数: void Delay_us(unsigned int t)
{
    unsigned int i;
    volatile unsigned int n;     for(i = 0; i < t; i++)
   {
      for(n = 0; n < 14; n++);
   }
}

void main(void)
{
    .....
    LED_ON; 
    Delay_us(1000);
    LED_OFF;
    ....
}

将工程选项中的Debug选择 use simulator,用软件仿真Delay_us函数,观察其运行时间(调试窗口左边的Internal中的sec可以看到已运行的时间),其结果为1027uS(Delay_us(1000),但我用示波器观察,波形的宽度却为1750uS,相差很大,请问可能是什么原因?以下原因已排查:
1、示波器没有问题,使用也没有问题(这型号示波器我用了快8年了)
2、LED_ON LED_OFF执行时间很短,就一条指令

我的单片机型号是:STM32F103R8,工程选项中选的也是这个型号,工程选项中的晶振为8M,实际也为8M,main函数之前的初始化代码已经系统内核频率设定为72MHZ,Debug中唯一的设置项:limit speed to real time也试过了,没有作用。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
lwtlwt
2019-08-22 19:54
回复【2楼】正点原子:
---------------------------------
谢谢!
请问应该在哪看一段代码实际运行时间是多长呢(不用示波器和逻辑分析仪的方法)?以前用的是AVR,在AVRSTUDIO下可以看到精确的运行时间。另外,我现在用的硬件仿真器是JTAG V7,用硬件仿真也看不了函数运行时间是多长,是不是我看错了地方?我现在观察的是调试窗口左边的Internal --> sec,Analysis windows看到的时间也是一样的。

一周热门 更多>