相信看了郭天祥老师51视频的道友应该都知道,老师曾多次在视频中介绍了keil的代码运行时间功能:
鱼鹰也一直很想用上这个功能,但很不幸的是,我发现这个时间根本就不准确! 郭老师说,这个时间单位是秒(sec),是从单片机运行第一条代码开始计算的,但是当你真正用示波器验证这个时间差(因为不知道单片机什么时候才开始运行,所以只能看时间差)的时候,你会发现这个时间是不准确的。 所以以前鱼鹰在测试一段代码(比如软件延时代码)运行时间的时候,为了确保准确,都会折腾以下步骤: 1、搬来示波器(嗯,挺重的) 2、找好杜邦线(最好测试一下杜邦线的好坏) 3、测试代码前后插入端口输出高低电平代码(输出高低电平让示波器显示) 4、有时代码可能只执行一次,要么修改代码让它循环运行,要么使用示波器的单次触发功能。 当你完成了以上步骤,你才能真正开始你的测试工作。 那么请问各位道友,这些步骤做下来,需要耗费多少时间? 十分钟到半小时差不多吧,如果东西难找,时间更久! 难道没有更好的方式了吗?凭什么那些纯软件的就可以很快的测试代码运行时间,我们就不行? 所以鱼鹰一直记着这个事情,一直想要找到一种方便且简单的测量方法。 直到有一天,鱼鹰完成了 ucos ii 内核感知器的功能,喏,就是这个东西:
鱼鹰才重新思考 keil 的时间测量功能。 通过上图鱼鹰可以知道,这个时间相当准确,那么明明 keil 可以获得准确时间,为什么这个专门显示时间的功能反而不准了呢? 后来鱼鹰在 keil 窗口下(调试窗口)还意外看到了这个东西:
我了个去,还有一个小窗口专门显示呢,然后右击,又出现了这个:
当你认真观察后,发现有好几个选项,但是时间还是那么不准确(单位:秒)。 而鱼鹰在完成了内核感知器的时候,又再一次测试了这个窗口,发现真准(嗯,不能说脏话)。 于此,鱼鹰明白了,不是 keil 不能准确显示时间,而是没有设置准确。 那么到底怎么设置呢?鱼鹰想到了《stm32调试利器之itm》笔记中有一个关键的操作,就是设置内核时钟频率。 所以鱼鹰把默认的10 m改成了f103的72 m,并找来了示波器,一顿操作猛如虎,终于得出了结果。 真准!准到你怀疑人生!
是的,在线仿真下,你只要在常规的仿真器设置下,再加入这个设置,你就能得到你想要的时间。 而软件仿真下,你只要准确设置这个外部晶振频率,你就能很好的测量运行时间(stm32 f103,f4软件仿真效果不行)
那么又该如何测量时间呢? 在寄存器窗口显示的时间是从单片机运行第一条代码开始的时间,这个时间是累计的,如果用这个时间进行测量的话,必须在测试代码前记下时间,然后运行代码后再记录一次时间,两次时间相减,才是代码运行时间。 这个方法不错,但是鱼鹰有更好的方法。 看到那一个个选项了吗?
人家可以重置(reset)时间,比如鱼鹰现在用t1显示的时间(t0 和 寄存器窗口显示的时间一样,不信你可以看看),只要先重置一下这个t1(最上面那个),然后运行代码后暂停,t1显示的就是这段代码的运行时间了。 这样一来,你就能轻松实现代码的时间测量了。 既然得到我们想要的结果,我们就会思考以下几个问题: 1、为什么设置之后,时间就准确了呢? 2、它是怎么测量时间的? 3、它的测量精度是多少? 4、这个测量方法有什么限制没有? 其实这个几个问题都和 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版本你会发现右下角的时间窗口没有显示时间或者时间不更新,一个简单的解决方法是,切换到寄存器窗口,这样时间窗口就能正常更新了(这可是宝贵的经验哦)。
华硕新款GTX 710显卡性能升级,采用2GB GDDR5显存
采用CAN的K-85系列产品在船舶监控系统中的应用
LT1963A 通过稳压器的并联以提供较高的输出电流
第十二届电路保护与电磁兼容技术研讨会8月登陆西部
华为鸿蒙系统报名入口
KEIL的代码运行时间功能
清洁机器人企业Aventurier获千万美金级天使轮融资
常见的示波器探头有四种,四种探头的介绍
特斯拉不服“退一赔三”一审判决
i2Cloud云灾备运营管理软件特点
NAC的工作原理,以及它如何处理加法和减法等操作
三星Galaxy S Blaze 4G将于本月底上市
低功耗蓝牙模块是如何作用于传感器的?
HDMI光纤传输中光混缆(AOC)和全光传输哪个更好?
基于网络的运动控制技术、功能、结构类型
翠展微电子TPAK SiC系列解决方案
HPE的新存储边缘和云计算产品标志着智能时代的曙光
博通恶意收购高通计划将落空 天平正在向着高通倾斜
5G网络进军欧洲,芬兰Elisa将用户体验作为突破口
AMD 正在测试类似英伟达 DLSS 的超采样功能,提高光追性能