打印
[技术问答]

关于NOP准确延时函数记录

[复制链接]
1647|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shen_hao|  楼主 | 2017-11-2 09:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
while(1)
                        {
                                num++;
                        __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
                                if(num > 5143000) //1
                                        break;
                        }
                        count = TIMER_GetCounter(TIMER1) / 1000;
                        printf("NOP :%d\n",count);
//                        //先用这个测出一个num值,因为time  get count也会占用时间,所以势必不准确,然后放在上面去测
                        num=0;
                        TIMER_SET_CMP_VALUE(TIMER1, 0xFFFFFF);
                        while(1)
                        {                               
                                num++;
                                __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
                                count = TIMER_GetCounter(TIMER1) / 1000;
                                if(count == 1000)
                                        break;
                        }
           printf("NOP :%d\n",num);
                while(1);
/*
                        下面测数:1ms  ---3438   1s 3018417
                        上面按理说让num加到对应的数值,延迟应该差不多(稍微少一点),但事实情况是:586(1s,实际只有586ms)另一个自然为零,因为测试最小是ms
                        通过反复测试,不断去所有数值范围,
                        最后精确的测出,在此情况下,5143000为精确的1s。
                        另外:通过删除__NOP()的个数发现,单个延时在71ms.
                        问题:不清楚差别为什么这么大,下面测出的数不大反而小
                       
                        */

沙发
小S咯| | 2017-11-3 09:25 | 只看该作者
想要用NOP精确延时的话最好用汇编,像num++,if语句都要时间的,而且时间都是us级的。我测试过,一个nop大约70ns

使用特权

评论回复
板凳
shen_hao|  楼主 | 2017-11-3 09:40 | 只看该作者
小S咯 发表于 2017-11-3 09:25
想要用NOP精确延时的话最好用汇编,像num++,if语句都要时间的,而且时间都是us级的。我测试过,一个nop大约 ...

可以直接在c程序里写汇编吗?

70ns还是70us?

谢谢。我自己试试

使用特权

评论回复
地板
小S咯| | 2017-11-3 16:23 | 只看该作者
shen_hao 发表于 2017-11-3 09:40
可以直接在c程序里写汇编吗?

70ns还是70us?

70ns,纳秒。
还有用很多nop有些编译器会优化。
一般IC延时不会很精确,大概就可以了

使用特权

评论回复
5
玛尼玛尼哄| | 2017-11-5 18:04 | 只看该作者
去掉系统编译优化就靠谱了

使用特权

评论回复
6
shen_hao|  楼主 | 2017-11-8 09:06 | 只看该作者
谢谢

使用特权

评论回复
7
antusheng| | 2017-11-8 22:18 | 只看该作者
默认开启优化,会把重复没用的给你删掉。

使用特权

评论回复
8
zf1981| | 2018-9-3 13:50 | 只看该作者
ARM编译怎么写纳秒延时函数

使用特权

评论回复
9
xuanhuanzi| | 2018-9-4 19:10 | 只看该作者
重复的操作多了,应该可能会被优化掉

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

230

帖子

2

粉丝