MicroPython入坑记(三)板子上的Python到底有多快?

MicroPython入坑记(三)板子上的Python到底有多快?

大家好,又见面了,我是全栈君。

前几篇都是直接在命令上操作,然而执行py文件才是王道,其实类似nodemcu的lua固件,MicroPython也提供了一个简单的文件系统用来存代码。并自动在开机时执行:

boot.py

main,py

两个文件

windows用户的话,推荐一个软件:uPyLoader界面如下

MicroPython入坑记(三)板子上的Python到底有多快?

可以看到,左边是本地的文件,右边是ESP8266的文件,两边可以互相传输,也可以删除上边的文件,其他功能自行探索,这个软件自带了一个编辑器,不过很弱。

还是推荐用vim或者vscode来写代码,然后用这个软件把代码传进去。

测试代码么,先来个循环:

 

import time
import micropython
def loop1():
    t1=t2=0
    for i in range(5):
        t1=time.ticks_us()
        for i in range(100):
            pass
        t2=time.ticks_us()
        print(t2-t1)
        time.sleep(2) 
loop1()

默认工作在80MHZ下,结果是:

=== with open("test_loop.py") as f:
===     exec(f.read(), globals())
=== 
4715
4695
4742
4698
4697
>>>   

 脚本确实不快,100次循环足足用了4.5ms,即使把速度调成160MHZ,也就2.5ms左右也就一次循环25us左右,而ESP32下速度就很赞了:

paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== with open("test_loop.py") as f:
===     exec(f.read(), globals())
=== 
346
262
274
267
278
>>> 

10多倍的提速2us-3us循环一次,甚至可以写dht11那样的时序驱动了。esp8266就没办法了吗?当然有!

MicroPython官方文档上专门有篇代码提速的文章,其中提到了可以用装饰器micropython.native micropython.viper来给代码打鸡血(编译成机器码)

import time
import micropython

@micropython.native
def loop1():
    t1=t2=0
    for i in range(5):
        t1=time.ticks_us()
        for i in range(100):
            pass
        t2=time.ticks_us()
        print(t2-t1)
        time.sleep(2) 
loop1()

 

加了个@micropython.native装饰器,速度立马鸡血:

paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== with open("test_loop.py") as f:
===     exec(f.read(), globals())
=== 
326
320
320
320
320
>>> 

 赶上esp32了有木有?那……esp32用这个得多快?不好意思,esp32这功能还没弄好,哈哈

另一个装饰器的例子:

import time
import micropython

@micropython.viper
def loop1():
    t1=0
    t2=0
    for i in range(5):
        t1=int(time.ticks_us())
        for i in range(100):
            pass
        t2=int(time.ticks_us())
        print(t2-t1)
        time.sleep(2) 
loop1()  

结果:

paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== with open("test_loop.py") as f:
===     exec(f.read(), globals())
=== 
51
51
50
51
51
>>>  

这就更碉堡了,又提升了6倍,都快接近100倍了,虽然需要改一点点代码才能过,继续期待esp32的这功能吧

另外还有个插入汇编的功能,就不试了。

 

转载于:https://www.cnblogs.com/yafengabc/p/8681713.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107607.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WPF依赖属性(wpf 依赖属性)

    一、什么是依赖属性依赖属性就是一种自己可以没有值,并且可以通过绑定从其他数据源获取值。依赖属性可支持WPF中的样式设置、数据绑定、继承、动画及默认值。将所有的属性都设置为依赖属性并不总是正确的解决方案,具体取决于其应用场景。有时,使用私有字段实现属性的典型方法便能满足要求。MSDN中给出了下面几种应用依赖属性的场景:1.希望可在样式中设置属性。2.希望属性支持数据绑定。3.希望可使…

    2022年4月11日
  • UML——包图[通俗易懂]

    UML——包图[通俗易懂]UML——包图

    2022年4月24日
  • DataGrip2021.1激活码破解方法

    DataGrip2021.1激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
  • java中的scanner是什么_java中的Scanner类是什么?如何使用?「建议收藏」

    java中的scanner是什么_java中的Scanner类是什么?如何使用?「建议收藏」java中的Scanner类是什么?如何使用?发布时间:2020-05-2016:36:48来源:亿速云阅读:204作者:鸽子Scanner类介绍java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户的输入。创建Scanner对象的基本语法:Scanners=newScanner(System.in);实例:接下来我们演示一个最简单的数据…

    2022年7月8日
  • Android 中文 API (30) —— CompoundButton.OnCheckedChangeListener「建议收藏」

    Android 中文 API (30) —— CompoundButton.OnCheckedChangeListener「建议收藏」 前言  本章内容是android.widget.CompoundButton.OnCheckedChangeListener,翻译来自德罗德,再次感谢德罗德!期待你一起参与AndroidAPI的中文翻译,联系我over140@gmail.com。 声明  欢迎转载,但请保留文章原始出处:)    博客园:http://www.cnblogs.com/    Android中文翻…

    2022年6月3日
  • vmware虚拟机上安装win7系统_window10 虚拟机

    vmware虚拟机上安装win7系统_window10 虚拟机文章目录一、前言二、VMware下载三、XP系统镜像下载四、创建XP虚拟机一、前言最近需要搞windows系统兼容测试,根据数据显示,目前市面上占比TOP3的系统如下:排名系统占比1win7sp159.25%2win1029.83%3xpsp38.87%4其他–没想到2021年了,xp系统还占了8.87%。我自己本机是win10,不想安装双系统,决定弄个xp虚拟机好了。在网上下载了一个xp的iso镜像文件,使用虚拟机加载却提示:

    2022年8月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号