pátek 25. ledna 2019

ESP32, rychlost GPIO a Lua

Tento článek navazuje na podobný, poněkud letitý, článek ESP8266, rychlost GPIO a Lua z ledna 2017, který zase lehce navazuje na Brutální optimalizace kódu za použití logického analyzátoru.

Vše zůstalo stejné, jen jsem vyměnil mikrokontrolér za ESP32 a jal se měřit...







Měření

Opět jsem měřil jsem logickým analyzátorem Saleae a zjišťoval jsem dění na GPIO17 spouštěné sestupnou hranou signálu, taktéž na GPIO17.

MCU & LUA

Pro test byl použit lehce letitý hardware WEMOS ESP32. Z lenosti jsem nechal připojeny moduly GPS NEO 6M a OLED z jednoho prototypu.

Použit je Lua-RTOS-ESP32.


TEST 1 - PIN.PIO.SETHIGH(...)

Shodíme, nahodíme, shodíme, nahodíme a tak pořád dokola. K tomu nám slouží příkazy pio.pin.sethigh() a pio.pin.setlow(). Z obrázku vidíme, že se dostaneme na 16.25 µs, což je téměř 20x rychlejší než ESP8266.

function Test1()
    pio.pin.setdir(pio.OUTPUT, pio.GPIO17)

    print("Test 1 start")

    for i=1, 100 do
        pio.pin.sethigh(pio.GPIO17)
        pio.pin.setlow(pio.GPIO17)
    end

    print("end")
end


Šířka pulzu je 16.25 µs

TEST 2 - PIN.PIO.INV(...)

Protože tato implementace nemá ekvivalent příkazu SEROUT, tak jsem zkusil alespoň cyklicky negovat stav portu. Čas je 16.69 µs, což je tak šulnul s TEST 1.

function Test2()
    pio.pin.setdir(pio.OUTPUT, pio.GPIO17)

    print("Test 1 start")

    for i=1, 100 do
        pio.pin.inv(pio.GPIO17)
    end

    print("end")
end

Šířka pulzu je 16.69 µs

Žádné komentáře:

Okomentovat