实际上,鱼鹰在《延时功能进化论(合集)》一篇中,也简单介绍了怎么准确测量运行时间,但因为主角还不是它,所以还是没有详细说明。这次主角终于轮到它了,那务必就要说清楚,争取让大家都用上这个强大的功能。事实上,这个功能的使用,鱼鹰是准备私藏的,只留给那些支持本公众号的道友的,但考虑到这个功能使用的场合太多,太重要,所以还是公开分享给公众号的各位道友吧(公众号分享的原则是,基础且重要的知识点务必无条件分享,但又要区分对待那些真正支持公众号的道友)。而对于前段时间支持公众号的道友只有一份小笔记提供,后台回复关键字即可领取(评论区查看关键字)相信看了郭天祥老师51视频的道友应该都知道,老师曾多次在视频中介绍了KEIL的代码运行时间功能:鱼鹰也一直很想用上这个功能,但很不幸的是,我发现这个时间根本就不准确!郭老师说,这个时间单位是秒(sec),是从单片机运行第一条代码开始计算的,但是当你真正用示波器验证这个时间差(因为不知道单片机什么时候才开始运行,所以只能看时间差)的时候,你会发现这个时间是不准确的。所以以前鱼鹰在测试一段代码(比如软件延时代码)运行时间的时候,为了确保准确,都会折腾以下步骤:3、测试代码前后插入端口输出高低电平代码(输出高低电平让示波器显示)4、有时代码可能只执行一次,要么修改代码让它循环运行,要么使用示波器的单次触发功能。那么请问各位道友,这些步骤做下来,需要耗费多少时间?难道没有更好的方式了吗?凭什么那些纯软件的就可以很快的测试代码运行时间,我们就不行?所以鱼鹰一直记着这个事情,一直想要找到一种方便且简单的测量方法。直到有一天,鱼鹰完成了 uCOS II 内核感知器的功能,喏,就是这个东西:通过上图鱼鹰可以知道,这个时间相当准确,那么明明 KEIL 可以获得准确时间,为什么这个专门显示时间的功能反而不准了呢?后来鱼鹰在 KEIL 窗口下(调试窗口)还意外看到了这个东西:我了个去,还有一个小窗口专门显示呢,然后右击,又出现了这个:当你认真观察后,发现有好几个选项,但是时间还是那么不准确(单位:秒)。而鱼鹰在完成了内核感知器的时候,又再一次测试了这个窗口,发现真准(嗯,不能说脏话)。于此,鱼鹰明白了,不是 KEIL 不能准确显示时间,而是没有设置准确。所以鱼鹰把默认的10 M改成了f103的72 M,并找来了示波器,一顿操作猛如虎,终于得出了结果。是的,在线仿真下,你只要在常规的仿真器设置下,再加入这个设置,你就能得到你想要的时间。而软件仿真下,你只要准确设置这个外部晶振频率,你就能很好的测量运行时间(STM32 F103,F4软件仿真效果不行)在寄存器窗口显示的时间是从单片机运行第一条代码开始的时间,这个时间是累计的,如果用这个时间进行测量的话,必须在测试代码前记下时间,然后运行代码后再记录一次时间,两次时间相减,才是代码运行时间。人家可以重置(Reset)时间,比如鱼鹰现在用t1显示的时间(t0 和 寄存器窗口显示的时间一样,不信你可以看看),只要先重置一下这个t1(最上面那个),然后运行代码后暂停,t1显示的就是这段代码的运行时间了。既然得到我们想要的结果,我们就会思考以下几个问题:其实这个几个问题都和 DWT(这个模块鱼鹰在很多笔记中写过) 这个外设模块有关。我们知道,STM32F1 和STM32F4 系列单片机里面有一个DWT模块,这个可以简单的认为是一个定时器,而它的时基就是内核时钟!也就是说,DWT 是由内核时钟驱动的,如果CPU内核频率是72 M,那么它就能达到 1 / 72 M 的精度,即1 / 72 微秒!而且它是 32 位计数器,最大可测量时间 60 多秒(这个具体需要计算一下),对于单片机而言,足够了!因为单片机的内核频率是可以设置的,而 KEIL 本身是不知道CPU在什么频率下运行,所以我们需要通过设置,告诉 KEIL CPU的运行频率,这样KIEL才能根据这个频率换算出准确的时间。目前已知 F1 和 F4 是有 DWT 这个外设的,所以没问题,但是 F0 应该就不行了(具体没测过)。第二个是软件问题,首先KEIL 对于 F4 的软件仿真支持不怎么好,所以你会发现F4在软件仿真下也是无法测量的,但是不会影响在线仿真。其次就是 KEIL版本问题,5.14用的挺好,但5.20版本你会发现右下角的时间窗口没有显示时间或者时间不更新,一个简单的解决方法是,切换到寄存器窗口,这样时间窗口就能正常更新了(这可是宝贵的经验哦)。
推荐阅读:
终极串口接收方式,极致效率
为什么说你一定要掌握 KEIL 调试方法?
延时功能进化论(合集)
指针,很难吗?| 解析指针的过程与意义(一)
如何写一个健壮且高效的串口接收程序?
KIEL 调试那些事儿之窗口展示——变量(二)
打了多年的单片机调试断点到底应该怎么设置?| 颠覆认知
-THE END-
如果对你有帮助,记得转发分享哦
微信公众号「鱼鹰谈单片机」
每周一更单片机知识
长按后前往图中包含的公众号关注
鱼鹰,一个被嵌入式耽误的畅销书作家
个人微信「EmbeddedOsprey」
长按后打开对方的名片关注