ESP32 MemoryError

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: ESP32 MemoryError

Príspevok od používateľa gogo » 17 Mar 2023, 20:13

Zdravim,
konečne som sa k tomu dostal.
Napísal som kratučký script, kde som do eepromky
zapísal 100 bytov a následne som ich z nej vyčítal.
Všetko Ok, bez chyby.
Čo by sa dalo ešte skúsiť a odhaliť chybu.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: ESP32 MemoryError

Príspevok od používateľa peterple » 18 Mar 2023, 09:25

Milión vecí. Preto ti nikto nevie poradiť. To je totiž tak že ty to programuješ a ty si jediný kto na to môže prísť. Keby to aj niekto začal skúšať tak narazí na také detaily že môže mať iný ESP32 (viac pamäte, iný os), može mať inú verziu knižníc , tak sa vôbec nemusí dostať do žiadnych problémov.

Prvá vec čo by si mal urobiť je zadať do googla nasledovné slová ESP32 micropython MemoryError: memory allocation failed

Urobil som za teba a hneď prvý odkaz dáva niekoľko rád čo vyskúšať.
https://forum.micropython.org/viewtopic.php?t=4912

Obecne je to o tom že v určitom okamihu musíš vedieť ako veci fungujú. Ak ich chceš používať. Je fajn že máš máš k dispozícii jazyk ktorý pred tebou skrýva správu pamete a robí ju za teba. Nebýva s tým problém ak je pamäte nekonečne (GB) a úlohy nie sú nenažrané. Problém nastane ak je pamäte málo a úlohy sú pamäťovo nenažrané. Dosť často je to preto lebo programátor nemá ani potuchu ako to vo vnútri vlastne funguje a vytvára tak neoptimálne konštrukcie ktoré fungujú len vďaka tomu že aj keď sa tam neskutočne plýtva dnešný hw má obrovské pamätové kapacity ktoré často prekračujú bežné ľudskké chápanie. Čo ale neplatí pri doštičkách o veľkosti pár cm štvorcových.

V takom prípade si treba naštudovať ako funguje automatická alokácia (a aj dealokácia) premenných. Prípadne urobiť krok späť a nepoužívať jazyk s toutou funčnosťou a používať zo začiatku jazyk kde si musí alokáciu pamäte riešiť programátor sám. Po naučení sa ako to funguje sa dá vrátiť do vyšších sfér ale už s vedomosťami kde a čo robiť správne aby to ten automatický systém zvládal.

Je to samozrejme nepohodlné podobne ako ten kto jazdí s automatickou prevodovkou, už nechce (nevie) jazdiť s manuálnou. Teda ten čo má posledný model mercedesa, tak asi nebude zo začiatku veľmi dobre jazdiť s trabantom.

V tvojom prípade to komplikuje situácia že podobne môže byť napísaná aj nie jedna knižnica v tom ESP. Teda nehľadáš iba svoje chyby ale aj chyby iných začiatočníkov alebo mierne pokročilých.
0
Naposledy upravil/-a peterple v 22 Mar 2023, 19:14, upravené celkom 1 krát.
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: ESP32 MemoryError

Príspevok od používateľa jirka.jirka. » 22 Mar 2023, 18:32

Osobně, jestli ti můžu poradit, vykašli se na Python. Na takovýchto destičkách s frekvencí pár MHz a s RAM pár kilo je to docela brutus.

Já si teď rozjel Eclipse, do toho naroubovat esp-idf nebo jak se tomu nadává a píšu si pěkně C, kde je k tomu pěkně zpracovaná dokumentace a jede to jedna báseň (neplést s Arduino).

Všechno mám pod kontrolou, i když I2C mě tam potrápila na týden. :biggrin: ale ta to mohla moje nepozornost.

Popiš, co ten program má dělat. Třeba by se dalo k tomu tady s pomocí dopracovat step-by-step.

Psal jsi, že asm znáš z 51, takže cykly, přerušení ti nejsou cizí, takže c bude jenom o naučení se syntaxe.
0

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: ESP32 MemoryError

Príspevok od používateľa gogo » 26 Mar 2023, 16:22

Zdravim,

myslel som si, že to nakonec takto dopadne a že python bola zlá volba.
Všade sa písalo, že je to jednoduchý jazyk ako pre PC, tak aj pre ESP.
Tak som sa na to dal. Celú moju elektronickú prax som robil iba v asm.
Už mi viacerý hovorili, aby som skúsil niečo iné než asm, že je zastaralý.
Kedysi som skúšal aj C-čko, ale odradili ma smerníky-pointery. A pokial si
spomínam, tiež tam bola potrebná nejaká alokácia pamäte pre pole.
Už mi tiahne na 50-ku a neviem, či by som to s tým c-čkom ešte zvládol.

Čo sa týka toho programu, je to regulátor teploty pre 6 čidiel a teda výstupov.
Má to tft-dotykový displej, ESP a 6 čidiel DS18b20. Aspoň by som chcel, aby to malo,
keď sa to nepodarí, tak nebude nič.
Tú eepromku tam potrebujem len na uloženie 18 bytov. Pre každé čidlo je to
horný limit, dolný limit a mód regulácie. V prípade, že by vypadlo napájanie,
aby boli nastavenia uložené a mohli sa naspäť načítať.

Čo spomínal petrple, tak to som skúšal ako som písal v predchádzajúcich
odpovediach, ale nepomohlo to. Počet nealokovaných bytov v pamäti klesol,
ale nie na 0, aby sa program spustil.
Skúsim ešte nejaké úpravy programu a uvidíme.

Ďakujem!
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: ESP32 MemoryError

Príspevok od používateľa jirka.jirka. » 26 Mar 2023, 16:48

Nevím kdo tě od C odrazoval, ale v MCUčkách (stm, pic, ...) je to normální jazyk. Python nech na raspberry.

Ale jestli jsi assemblerista, tak další stupeň je C. Literatury jsou na C tuny (cz, sk, en, ...), podpora obrovská. To u toho pythona to na těchto mrňavých mcu bude dost opruz.

Jinak, možná se ti to podaří rozjet, ale za chvilku na to narazíš znova. Program bude bobtnat a šup, jsi tam kde jsi byl.

PS: ds18b20, eeprom, wifi, pmw už mi na ESP frčí. Pěkně v C. Display taky, ale ne dotykový, jenom nějaký mrňavý OLED z alika. Driver byl napsaný za jedno odpoledne.
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6205
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: ESP32 MemoryError

Príspevok od používateľa pocitujlasku » 26 Mar 2023, 16:53

ale no. 50 a stary? nestras. pointre su super, je to vlastne podobne ako @ v asm (ak si dobre pamatam zo skoly x51). je to len odkaz na adresu, kde sa nachadza zaciatok hodnoty danej premennej.
inak je c cko logikou dost podobne asm. ja som jednoduche veci v c vedel robit cca po tyzdni skusania, kym som pochopil tu logiku.
tft, ds nie je nic zlozite, na internete je kopec navodov.
esp by malo mat nejaku internu eeprom, takze tych par bajtov mozes ulozit aj tam
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: ESP32 MemoryError

Príspevok od používateľa balu » 26 Mar 2023, 22:06

gogo napísal:
26 Mar 2023, 16:22
...
Už mi viacerý hovorili, aby som skúsil niečo iné než asm, že je zastaralý.
Kedysi som skúšal aj C-čko, ale odradili ma smerníky-pointery. A pokial si
spomínam, tiež tam bola potrebná nejaká alokácia pamäte pre pole.
...
Nevím, jestli je asm zastaralý, ale v každém případě je dobré mít přehled o instrukční sadě procesoru. Když píšeš program v Cčku, tak Cčko kód optimalizuje a pokud víš, jak procesor funguje, můžeš jít optimalizacím naproti už při psaní kódu. Nejrychlejší, nejefektivnější a nejkratší bude vždy program napsaný v asm. Jenže rychlost psaní programu je pomalejší, než ve vyšším jazyce obecně. Proto se dneska všechno programuje ve vyšších jazycích. U malých procesorů je asm pořád do jisté míry dobrá volba.

Cčko je opravdu dost jednoduché a různých příkladů se po Internetu válí opravdu mraky. Co se pointerů v Cčku týká, tak se jimi ze začátku určitě nemusíš vůbec zabývat. Až zvládneš základy a podíváš se, co vlastně ten pointer je a jak se s ním pracuje, pak zjistíš, že díky pointerům si můžeš mraky práce velice zjednodušit a zefektivnit. Na první pohled vypadají sice složitě, ale jakmile pochopíš, jak funguje, zjistíš, že práce s nima se v podstatě stejná jako s jakoukoliv jinou proměnnou.

Alokace paměti pro pole - tohle překladač dělá sám. Tyhle malé procesory nemají zase tolik paměti, aby se pracovalo s velkými poli a bylo potřeba si dynamicky alokovat paměť. Popravdě - u těchto malých procesorů jsem dynamickou alokaci paměti ještě nikdy nepoužil (ani nevím, jestli ji Atmel Studio podporuje). Spíš je potřeba se zaměřit na to, že paměť těhle procesorů (hlavně těch 8-bitových) je velice omezená a je dobré definovat pole s konstantníma hodnotama (třeba texty na displej apod) do programové paměti a při "tisku" na displej pak tyto texty číst přímo z programové paměti. Pokud totiž větší množství textů nenadefinuješ do programové paměti, překladač pro ně vyhradí místo v RAM a při startu programu je tam nakopíruje. Pak se snadno může stát, že paměť dojde ještě dřív, než se spustí vlastní program...

Směle se do toho pusť a hlavně začni něčím jednoduchým.
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: ESP32 MemoryError

Príspevok od používateľa jirka.jirka. » 27 Mar 2023, 08:59

Jestli bych mohl poradit, tak začni tím, že si zvolíš platformu nebo jak tomu říct.

Za mě takto od stolu, vidím dvě cesty.

1. Arduino, včetně jejich IDE. Zde je ESP32 už integrované.
https://randomnerdtutorials.com/install ... tructions/. Na internetu je mraky knihoven, mraky tutoriálů. Bohužel za cenu, že ne vždy všechny knihovny fungují. Ale rozblikat ledku je na 2 hodiny pro nezkušeného.

2. ESP-IDF integrované např. do Eclipse
https://www.beyondlogic.org/getting-sta ... lipse-ide/. Zde je to už pěkné, čisté C se spoustou modulů, atp. Ale už to chce větší trpělivost. Je k tomu velmi dobře popsána dokumentace, podpora na internetu je slabší (neplést s nulovou) v porovnání s arduino. Rozblikat ledku zde už je ale na půl dne i s instalací.

Já osobně arduino nepraktikuji (až na nějaké velmi rychlé testíky, např. jsem využil rychlé ověření I2C komunikace s nějakým chipem) a funguju na tom ESP-IDF. Logy jsou tam poměrně dobře zpracované, konzole po uartu je krásná (připomíná terminál) :thumbup: Už žádné stiskni X, potom Y dostaneš se do podmenu, .... Jak se dostanu domů, hodím nějakou ukázku, co tam kluci dodávají. :thumbup:
1
Obrázok 1

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: ESP32 MemoryError

Príspevok od používateľa dan21 » 27 Mar 2023, 11:21

Ja mam velmi dobre skusenosti s https://platformio.org/ co je ID plugin do MS Code.
Podporuje rozne dosky (Arduino, ESP, ................)
1
Obrázok 1

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: ESP32 MemoryError

Príspevok od používateľa gogo » 30 Mar 2023, 16:10

Zdravim,

Ďakujem všetkým za podporu, aby som to skúsil.
Nainštaloval som Arduino IDE pripojil ESP-čko a ide to.
Len mám starší notebook a je to pomalé.
Nainštalujem ešte Platformio a ESP-IDF a budem znova študovať.
Poprosil by som Vás, či by ste mi poslali nejaký link
k tým softom, čo ste uvádzali, kde je nejaký dobrý ukážkový
a štúdijný materiál.

Ďakujem!
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2574
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: ESP32 MemoryError

Príspevok od používateľa maskrtnik01 » 30 Mar 2023, 16:27

https://docs.espressif.com/projects/esp ... index.html
https://github.com/espressif/esp-idf/tr ... 2/examples

Inak dá sa to v pohode aj mimo platformio, stačí do Visual Studio Code nainštalovať esp-idf, a cez toto rozšírenie potom celý toolchain.
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: ESP32 MemoryError

Príspevok od používateľa jirka.jirka. » 30 Mar 2023, 19:52

Tady dávám ukázku toho terminálu, co jsem slíbil.

ESP32 simple terminal over UART

Kde jsem si vytvořil možnost zobrazit stav FreeRTOSu, opvádání relátek, zobrazení uptime, ... Na toto nám tvůrci ESP-IDF vytvořili funkce, které se jenom pěkně naplní a už to frčí. Kdybych to měl oprogramovávat, tak to budou stovky hodin. Takto to bylo rozchozeno za dvě hodinky. :thumbup:

Zvládá to nápovědu (ne vždy se ale chytí). Pak přejde putty do režimu, kdy nezobrazí barvy, ... Ale pořád se to dá ovládat.

EDIT:
Tady si dovolím ještě jeden soubor, kde je vidět debug log, se kterým se dá zjistit, kde tvůj fw spadne, co se děje, spousta toho logu je moje, protože nemám programátor, tak debuguju pomocí tohoto.

DEBUG VIDEO

Můžeš v něm vidět, že se snaží připojit na wifi. Bohužel jsem změnil jméno/heslo k takové, kam se nikdy nepřipojí, protože neexistuje. Ale je zde i ošetřené, že po pár pokusech přejde do normální funkce. Taky nastavení GPIO pinů, atp.
0

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: ESP32 MemoryError

Príspevok od používateľa gogo » 30 Mar 2023, 21:32

ĎAKUJEM !!!
Ešte som si zohnal knihu Arduino prúvodce světem.
Pomôže to trochu alebo je to dobré len na to Arduino.
Ten syntax C by sa z toho dal na začiatok použiť?
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: ESP32 MemoryError

Príspevok od používateľa jirka.jirka. » 30 Mar 2023, 21:40

Arduino je kapitola sama o sobě. Je to C a C++ tak nějak dokupy. Hodně se toho dočteš na google.

Zkus vyhledat něco takového: Is Arduino c or c++?

Taky úplně nevím, jak je na tom to jejich IDE. Nikdy jsem nepřišel na to, jak mít program ve více složkách/souborech. Protože jsem zvyklý si program členit. Pak vím, že WiFi je ve složce WiFi, pwm v druhé, .... U Arduino IDE je to jeden nekonečný soubor. To je pak rodeo.
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6205
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: ESP32 MemoryError

Príspevok od používateľa pocitujlasku » 31 Mar 2023, 08:33

arduino je take oskriptovane c a c++. Jeho primarny ucel bol prilakat ludi k programovaniu.
Ak chces rozclenit, tak jedine cez include a proste v adresari si povytvaras subory (staci aj .h a tam nasypat logiku) a pri spusteni IDE sa ti nacitaju do zaloziek.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: ESP32 MemoryError

Príspevok od používateľa balu » 31 Mar 2023, 09:53

pocitujlasku napísal:staci aj .h a tam nasypat logiku
Arduino není určené pro větší projekty. Když vidím výše zmíněnou poznámku, tak se mi ježí všechny zbytky vlasů na hlavě ... Na jednu stranu chápu, že tohle je takové nouzové řešení, ale takhle se to proste ve světě normálního programování nedělá.
0
Naposledy upravil/-a balu v 31 Mar 2023, 10:59, upravené celkom 1 krát.

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: ESP32 MemoryError

Príspevok od používateľa jirka.jirka. » 31 Mar 2023, 10:01

Arduino není určené pro větší projekty. Když vidím výše zmíněnou poznámku, tak se mi ježí všechny zbytky vlasů na hlavě ... Na jednu stranu chápu, že tohle je takové nouzové řešení, ale takhle se to proste ve světě normálního programování nedělá.
Souhlas. Při představě, že bych měl stávající projekt s odhaduju více než 10 soubory C a k tomu stejně H souborů, tak to bude v jedné složce psycho. Proto Arduino nedělám.

Ale od toho tato diskuze není. Autor Gogo si sám vybere co chce dělat a v čem. Sám si musí nastudovat výhody/nevýhody jednotlivých platforem. Toto za něj nikdo nerozhodne.

1. Adruino C/C++
2. Čisté C (s "pluginem" ESP-IDF)
3. Čisté ASM (ano i tato možnost je).
4. Platformio
1
Obrázok 1

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6205
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: ESP32 MemoryError

Príspevok od používateľa pocitujlasku » 31 Mar 2023, 10:52

balu: ja stale beriem, ze arduino je na take to domace pouzitie. a tam nie je az taky problem si to takto rozdelit.
osobne som to pouzil raz, ked som detvakom robil "blikajuco-hrajucu skrinku". A melodie som dal zvlast, aby mi to zbytocne neprekazalo v hlavnom programe.
Ja som len odpovedal na otazku, ci sa to da.
jirka.jirka: praveze by si mal len 10 h suborov, sice prasarna, ale ako som pisal, na domace hranie privries oci.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: ESP32 MemoryError

Príspevok od používateľa balu » 31 Mar 2023, 11:07

pocitujlasku: Já jsem to možná napsal trošku nešikovně ... pochopil jsem, že jde o nouzové řešení a zároveň jsem chtěl napsat, že takhle v reálu opravdu ne a jestli to vyznělo jako nějaký útok proti Tobě, tak tímto způsobem to rozhodně myšleno nebylo.

Jenom, že už jsem na jiném fóru řešit dotaz tazatele, že mu nejde přeložit program (Atmel Studio) a pak se ukázalo, že místo, aby do projektu vložil .C soubory a v .H souborech měl jen funkční prototypy a odkazy (extern) na proměnné a tyhle .H soubory includoval, tak měl všechno psané v .H souborech. No - a jakmile došlo na to, že includoval .H soubor do jiného, tak mu to nešlo přeložit, protože mu to hlásilo duplicitní definice proměnných a funkcí.

Tolik pro vysvětlení.
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2574
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: ESP32 MemoryError

Príspevok od používateľa maskrtnik01 » 31 Mar 2023, 11:09

Aj ja som za ESP-IDF, či už cez platformio alebo aj nie. Ale keď už arduino, nespadnúť do toho a zaujímať sa aj o fungovanie "pod kapotou". Veľa problémov vzniká pomiešaním nekompatibilných knižníc, a bez znalosti ich fungovania sú neriešiteľné.

Ja som sa raz pustil do jedného projektu pre jednoduchosť cez arduino core, a ani s pomocou logického analyzátora som nerozbehal externý spi adc. Tak som sa nahneval, prepísal to do esp-idf, a po chvíli experimentovania som našiel chýbajúci detail - presnejšie ten adc vyžaduje po cs low malý delay, až tak toleruje impulzy na sclk a prenos dát.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok