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


前幾篇都是直接在命令上操作,然而執行py文件才是王道,其實類似nodemcu的lua固件,MicroPython也提供了一個簡單的文件系統用來存代碼。並自動在開機時執行:

boot.py

main,py

兩個文件

windows用戶的話,推薦一個軟件:uPyLoader界面如下

可以看到,左邊是本地的文件,右邊是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的這功能吧

另外還有個插入匯編的功能,就不試了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM