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

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条回答
正点原子
1楼-- · 2019-08-22 17:21
回复【楼主位】lwtlwt:
---------------------------------
那个时间你不能和示波器比
只能在仿真环境下看的!!!
lwtlwt
2楼-- · 2019-08-22 19:54
回复【2楼】正点原子:
---------------------------------
谢谢!
请问应该在哪看一段代码实际运行时间是多长呢(不用示波器和逻辑分析仪的方法)?以前用的是AVR,在AVRSTUDIO下可以看到精确的运行时间。另外,我现在用的硬件仿真器是JTAG V7,用硬件仿真也看不了函数运行时间是多长,是不是我看错了地方?我现在观察的是调试窗口左边的Internal --> sec,Analysis windows看到的时间也是一样的。
lwtlwt
3楼-- · 2019-08-23 01:11
 精彩回答 2  元偷偷看……
正点原子
4楼-- · 2019-08-23 01:20
回复【4楼】lwtlwt:
---------------------------------
可以看的
在软件仿真的时候,MDK的最右下脚.
有个  t1:0.00000xxxx sec的,就是仿真的执行时间.
lwtlwt
5楼-- · 2019-08-23 03:59
回复【5楼】正点原子:
---------------------------------
右下脚显示的时间就是我上面所说的Internal---Sec。
这个时间与实测值相差很大
正点原子
6楼-- · 2019-08-23 04:17
回复【6楼】lwtlwt:
---------------------------------
差距总是有的,呵呵.软件仿真肯定不可能完全替代真实情况的.这点你要明确.

一周热门 更多>