Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Janos250

    őstag

    válasz gyapo11 #12551 üzenetére

    Már nem pontosan emlékszem, de régebben próbaként csináltam olyan programozható led szalag meghajtást ESP32-n, hogy while-ban figyeltem a gépi ciklusok számát (a 80 Mhz-est, mert csak azt lehet), így elég pontosan lehetett időzíteni még a 200 körüli nanosec-eket is. Nem mértem hányszor ment le, de néhányszor le kellett menjen 200 nanosec alatt, mert másként pontatlan lett volna. Viszont az ESP32 oprendszere - ha nem tiltod le a megszakítást - egy millisec-enként megszakít talán 6-8 microsec időtartamra, mert akkor nézi meg, kell-e taskot váltani. Ha kell, akkor parkolópályára kerülsz egy ideig. Az oprendszer által kezelt megszakításokból kétféle van: az egyik csak egész millisecenként adja rá a vezérlést, a másik meg azonnal. Régebben használtam, már nem nagyon emlékszem rá :-(
    Az se mindegy, melyik magra teszed. A nullás kezeli a WiFit és a BT-ot, oda nem érdemes rakni időkritikus dolgokat.

  • ecaddsell

    aktív tag

    válasz gyapo11 #12551 üzenetére

    Csak az ESP32-ről vannak ilyen téren tapasztalataim, ami gyors de van néhány buktatója.
    Ha csak output pin-t váltogatsz akkor azt akár 4MHz-el is meg tudja tenni, azaz a loop idő microsec alatti (nem mértem meg, a neten megtalálható már mások megtették).

    Számomra az első pofon amibe beleszaladtam az ESP32-vel az az interrupt latency volt. Ugye ez az az idő ami eltelik a között, hogy valami input pin-re jelet adsz és a kód eljut odáig, hogy elkezdi futtatni az első általad kért utasítást. Ez pedig nagyságrendileg 2 microsec. Ha nincs semmi kritikus időzítésed akkor nem hangzik soknak, de ha kiszámolod, hogy egy 240 MHz-es magnak ez hány gépi kódú utasítás akkor kijön 1 döbbenetesen nagy szám, kb. 500 utasítás (ennek nagy részéért az RTOS felel, ha ez vigasztal).

    Ebből talán már látszik, hogy maga proci gyors, elég komplex műveleteket végezve (ezt nem megszakításban) 64 bites ill. double számokkal (sima float van HW-esen), nagy tömbökben stb. sosem volt gondom ezzel. Viszont a nagy interrupt latency az azt jelenti, hogy ha nagyon sok a megszakítás az nagyon vissza tudja fogni és kevésbé kiszámíthatóvá teszi.
    Ebbe sajnos akkor futottam bele amikor a 10 digit/s-es frekimérő felbontását szerettem volna javítani, amihez 10 000 mérés kellett volna másodpercenként (ha a jelnek van ennyi periódusa).

    Az STM32-vel ilyen gond nincs (mondjuk egy F103-ra eleve aligha varázsolsz valami oprendszert ami bezavarjon) viszont a blue pill-t leszámítva nincs értékelhető Arduino támogatása (vagy legalábbis amikor néztem nem volt) és pl. a nagyobb F407-nek (ebben már van float) már nem mellékesen a legkisebb tokozás is a már nem éppen barátságos 100pin (akkor sem barátságos amikor gyártatod a NYÁK-ot, részletek eléggé off).

    Nálam a megoldás az volt, hogy még egy CPLD-t teszek a már eleve külön panelen lévő CPLD mellé ami a gyors logikát kezeli, ha már az ESP32 ebben nem jó. Ennek a VHDL kódját már meg is csináltam és működni látszott amikor parkolópályára került egy kicsit ez a projekt (sőt most per pill. felújítás miatt minden ami ehhez kell le van fóliázva...).

    Az igazi az lenne, ha lenne kis pin számú (nem BGA) CPLD nagyobb logikával megfizethető áron (sajnos a gyártók ezen a vonalon alig fejlesztenek, nekik ez nem business). Az arduino/ESP32 tök jó arra, hogy user interfész logikázzon és azt gyorsan össze is lehet dobni, de ha valami tényleg gyors kell legyen ahhoz HW logika kell.

    Egyébként ha rákeresel arra, hogy pin toggle majdnem minden infót készen kapsz, de 1 blue pill. (meg programozó ha nincs) nem akkora befektetés és ha nincs is szkópod a legtöbb multiméter sokkal többet tud mint amilyen sebességgel ezek tudják a pint módosítani (pl. az elég olcsó ANENG AN8008 10MHz-ig).

Új hozzászólás Aktív témák