有点很奇怪的现象,前后读取结构体的值改变了

2019-07-25 11:15发布

其他程序我就不放了,主要就是一个测量脉宽的实验。
一次更新就是1s,arr是10000,下面我打印了一个计数的总值,然后两种换算成秒的方式。
但是换算秒的公式放在前面和后面的值读出来完全不一样,有点懵逼,求高手指点。
int main()
{
        u32 time,time1,time2;
        USART_Config();
        tim1ic_init();
        printf ( " 按下K1,测试K1按下的时间 " );
        while(1)
        {
                if (tim1initstruct.icfinishflag==1)
                {
                        time1=tim1initstruct.icupdate;
            time2=tim1initstruct.icccr;
                        time=tim1initstruct.icupdate*10000+tim1initstruct.icccr;
                        printf("高电平时间为: %.4f s ",(float)(time1)+((float)time2)/10000);  
                        printf("高电平时间为: %d s ",time);
                        printf("高电平时间为: %.4lf s ",(double)(time)/(double)(10000));
                        time=tim1initstruct.icupdate*10000+tim1initstruct.icccr;
                        printf("高电平时间为: %.4lf s ",(double)(time)/(double)(10000));   //很奇怪 后面在读这个数的时候数值变了
                        tim1initstruct.icfinishflag=0;
                }
        }
       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
正点原子
1楼-- · 2019-07-26 07:30
蛋白质khun 发表于 2017-11-11 15:45
不好意思,我以为没人回复我了呢,我仿真看了一下,应该是因为更新中断的数值在自加,导致数值不一样,但 ...

单步跟踪,看看到底怎么回事?
蛋白质khun
2楼-- · 2019-07-26 08:45
 精彩回答 2  元偷偷看……
蛋白质khun
3楼-- · 2019-07-26 13:25
正点原子 发表于 2017-11-12 01:51
单步跟踪,看看到底怎么回事?

假如我调试的时候不设置断点一直全速运行,那我输出的结果 要么最后一个数值就和前面是一样的,这是正确结果,要么就是0。
正点原子
4楼-- · 2019-07-26 13:29
蛋白质khun 发表于 2017-11-13 15:01
假如我调试的时候不设置断点一直全速运行,那我输出的结果 要么最后一个数值就和前面是一样的,这是正确 ...

写个if,在if里面设置断点。
这种很简单的思路,自己要回去想。
蛋白质khun
5楼-- · 2019-07-26 14:44
正点原子 发表于 2017-11-14 01:15
写个if,在if里面设置断点。
这种很简单的思路,自己要回去想。

我在主函数的if语句里,第一个printf前添加一个延时函数,最后一个打印出来的数就正确了,不能理解原因,为什么要在打印之前延时
蛋白质khun
6楼-- · 2019-07-26 18:26
正点原子 发表于 2017-11-14 01:15
写个if,在if里面设置断点。
这种很简单的思路,自己要回去想。

断点什么的我都设置了,中断和主函数里设置了几个断点,每到一个断点才重新运行都会先进一趟更新中断,如果主函数我只在if后面设置断点,那么运行一切正常,如果不加断点全速,最后一个输出结果又变成0了

一周热门 更多>