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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java是什么软件-详细解答Java到底是什么「建议收藏」

    Java是什么软件-详细解答Java到底是什么「建议收藏」许多想要接触计算机编程的朋友对于开发语言没有一个系统性的概念,会问出类似于Java是什么软件?这类问题,实际上我们通常不把Java定义为软件,那么Java到底是什么?Java开发用什么软件?请容我细细道来。

  • 算法时间复杂度分析(一)

    算法时间复杂度分析(一)金庸武侠中描述一种武功招式的时候,经常会用到“快、准、狠”这3个字眼。同样,在计算机中我们衡量一种算法的执行效率的时候也会考量3个方面:“快、省、稳”。具体点来讲就是我们在实现某一种算法的时候,最终目的就是要求计算机(CPU)在最短的时间内,用最少的内存稳定的输出正确的结果。这一章节主要来理解“快”,至于“省”和“稳”,我会在后续章节进行讲解。那如何来判断某一段代码运行的是否足够快呢…

  • 十二、Maven项目模板「建议收藏」

    十二、Maven项目模板「建议收藏」Maven提供用户,使用原型的概念,不同类型的项目模板(以数字614)是一个非常大的列表。Maven帮助用户快速开始使用以下命令创建新的Java项目mvnarchetype:generate什么是原型?原型是一个Maven插件,其任务是创建一个项目结构按照其模板。我们将使用快速启动原型插件在这里创建一个简单的Java应用程序。使用项目模板让我们打开命令控制

  • docker dockerfile详解_docker指令

    docker dockerfile详解_docker指令前言Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。Dockerfile简介Dockerfile是用来构建Docker镜像的构建文件,是由一系列

  • 运维架构

    运维架构运维架构1、运维团队配置运维团队分为:应用运维、系统运维、运维开发、监控运维、DBA团队和安全团队团队分工:应用运维:负责支持线上业务,各自会负责对应的业务线,主要职能是保证线上业务稳定性和同开发共

  • 2014手机号码归属地数据库

    2014手机号码归属地数据库2014手机号码归属地数据库2014年最新版《手机号码归属地数据库》(更新时间:2014年4月6日),总共1万条记录。数据字段:-号码段(即。号码前7位)-省-市-供应商(含,通信协议)演示样例数据:”1300000″,”北京”,”北京”,”中国联通(GSM)””1…

发表回复

您的电子邮箱地址不会被公开。

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