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

ESP32 MemoryError

Príspevok od používateľa gogo » 07 Mar 2023, 19:55

Zdravim všetkých,

učím sa s ESP32 a micropython. Teraz skúšam trocha väčší
program (script má okolo 1200 riadkov) a pri spúšťaní mi vypíše
MemoryError: memory allocation failed, allocating 787 bytes.
Vedel by mi niekto skúsenejši s ESP32 vysvetliť, čo spôsobuje
túto chybu a ako ju odstrániť?
Používam Thonny IDE.

Ďakujem!
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
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. » 07 Mar 2023, 20:19

Já si s ESP hraju, sice ne s pythonem ale s klasickým C. Nemáš víc toho logu. ESP má poměrně obsáhlý log (teda pokud jej nemáš zakázaný, vstup MTDO), popř. ve firmware. Ale opět nevím jak u pythona.

Pokud ale máš, dej sem komplet log výstup. Z toho by to mohlo jít určit. Taky by se hodilo i ten prográmek, jinak je to takové :fortuneteller:
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 » 07 Mar 2023, 20:25

Sem len začiatočník, čo myslíš pod tým logem.
Logické výstupy?
0
Naposledy upravil/-a gogo v 07 Mar 2023, 20:47, upravené celkom 1 krát.

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
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. » 07 Mar 2023, 20:29

Určitě máš to ESP připojené přes UART na PC pro ládování programu. A taky pro debugging.

No a tam se po zapnutí určitě něco sype. U mě to vypadá takto.

Dál co přesně máš za desku? Nebo za modul? Já ujíždím na ESP32-WROOM-32 ... Ale jak píšu, možná to má jiné logy, možná to má logy disablované, bůh ví. Prostě dej co nejvíc informací.

Kód: Vybrať všetko

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
ets Jun  8 2016 00:22:57

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:6664
load:0x40078000,len:14848
load:0x40080400,len:3792
entry 0x40080694
I (27) boot: ESP-IDF v4.4.2-dirty 2nd stage bootloader
I (27) boot: compile time 19:16:30
I (27) boot: chip revision: 0
I (30) boot.esp32: SPI Speed      : 40MHz
I (35) boot.esp32: SPI Mode       : DIO
I (40) boot.esp32: SPI Flash Size : 4MB
I (44) boot: Enabling RNG early entropy source...
I (50) boot: Partition Table:
I (53) boot: ## Label            Usage          Type ST Offset   Length
I (60) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (68) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (75) boot:  2 factory          factory app      00 00 00010000 00100000
I (83) boot: End of partition table
I (87) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=1616ch ( 90476)                 map
I (128) esp_image: segment 1: paddr=00026194 vaddr=3ffb0000 size=03ca8h ( 15528)                 load
I (135) esp_image: segment 2: paddr=00029e44 vaddr=40080000 size=061d4h ( 25044)                 load
I (145) esp_image: segment 3: paddr=00030020 vaddr=400d0020 size=75654h (480852)                 map
I (319) esp_image: segment 4: paddr=000a567c vaddr=400861d4 size=10404h ( 66564)                 load
I (347) esp_image: segment 5: paddr=000b5a88 vaddr=50000000 size=00010h (    16)                 load
I (358) boot: Loaded app from partition at offset 0x10000
I (358) boot: Disabling RNG early entropy source...
I (370) cpu_start: Pro cpu up.
I (370) cpu_start: Starting app cpu, entry point is 0x40081318
I (0) cpu_start: App cpu up.
I (386) cpu_start: Pro cpu start user code
I (386) cpu_start: cpu freq: 240000000
I (386) cpu_start: Application information:
I (391) cpu_start: Project name:     ESP32_aqua_control
I (397) cpu_start: App version:      1
I (401) cpu_start: Compile time:     Nov  3 2022 18:09:50
I (407) cpu_start: ELF file SHA256:  24ab9d7403b20cf1...
I (413) cpu_start: ESP-IDF:          v4.4.2-dirty
I (419) heap_init: Initializing. RAM available for dynamic allocation:
I (426) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (432) heap_init: At 3FFB7C40 len 000283C0 (160 KiB): DRAM
I (438) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (445) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (451) heap_init: At 400965D8 len 00009A28 (38 KiB): IRAM
I (458) spi_flash: detected chip: gd
I (462) spi_flash: flash io: dio
I (466) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (18) gpio: GPIO[2]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown                : 0| Intr:0
I (19) gpio: GPIO[12]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldow                n: 0| Intr:0
I (26) gpio: GPIO[13]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldow                n: 0| Intr:0
I (35) gpio: GPIO[14]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldow                n: 0| Intr:0
I (44) MAIN: Task_GPIO_2 running on core: 1, xDelay = 1
I (150) MAIN: Task_DS18B20 running on core: 1, xDelay = 1
I (151) MAIN: Find devices:
I (176) MAIN:   0 : 5f3c01d607cb8228
I (201) MAIN:   1 : f13c01d607f01728
I (201) MAIN: Found 2 devices
I (250) MAIN: Task_LCD running on core: 1, xDelay = 1
I (251) SH1106: SH1106 OLED configured successfully
I (300) MAIN: Task_SHT30 running on core: 1, xDelay = 1
I (2509) wifi:wifi driver task: 3ffc3bb4, prio:23, stack:6656, core=0
I (2510) system_api: Base MAC address is not set
I (2510) system_api: read default base MAC address from EFUSE
I (2519) wifi:wifi firmware version: eeaa27d
I (2520) wifi:wifi certification version: v7.0
I (2524) wifi:config NVS flash: enabled
I (2528) wifi:config nano formating: disabled
I (2532) wifi:Init data frame dynamic rx buffer num: 32
I (2537) wifi:Init management frame dynamic rx buffer num: 32
I (2542) wifi:Init management short buffer num: 32
I (2547) wifi:Init dynamic tx buffer num: 32
I (2551) wifi:Init static rx buffer size: 1600
I (2555) wifi:Init static rx buffer num: 10
I (2559) wifi:Init dynamic rx buffer num: 32
I (2564) wifi_init: rx ba win: 6
I (2567) wifi_init: tcpip mbox: 32
I (2571) wifi_init: udp mbox: 6
I (2575) wifi_init: tcp mbox: 6
I (2579) wifi_init: tcp tx win: 5744
I (2583) wifi_init: tcp rx win: 5744
I (2587) wifi_init: tcp mss: 1440
I (2591) wifi_init: WiFi IRAM OP enabled
I (2596) wifi_init: WiFi RX IRAM OP enabled
I (2601) CNT: Connecting to JirkaTralala...
I (2606) phy_init: phy_version 4670,719f9f6,Feb 18 2021,17:07:07
I (2708) wifi:mode : sta (30:ae:a4:05:af:3c)
I (2709) wifi:enable tsf
I (2712) CNT: Waiting for IP(s)
I (3442) wifi:new:<7,0>, old:<1,0>, ap:<255,255>, sta:<7,0>, prof:1
I (4545) wifi:state: init -> auth (b0)
I (4583) wifi:state: auth -> assoc (0)
I (4611) wifi:state: assoc -> run (10)
I (4745) wifi:connected with JirkaTralala, aid = 3, channel 7, BW20, bssid = ec:4                1:58:ec:93:6e
I (4746) wifi:security: WPA2-PSK, phy: bgn, rssi: -47
I (4748) wifi:pm start, type: 1
EDIT: Nebo možnost dvě, začíst študovat: Thonny IDE python debugging

EDIT2: Mrknout na video https://www.youtube.com/watch?v=bdvYIumllx8 a program krokovat až tam, kde selže. Pak budeš vědět který řádek to dělá a můžeš to opravit.
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 » 07 Mar 2023, 20:58

Mne z toho vypadne len toto.
U teba je toho hromada.

rst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:5008
ho 0 tail 12 room 4
load:0x40078000,len:10600
ho 0 tail 12 room 4
load:0x40080400,len:5684
entry 0x400806bc

Modul mám ten istý ESP32-WROOM-32.
Začalo mi to robiť, až keď som pridal do programu zápis a načítanie hodnôt
z vonkajšej eeprom 24C02. Takže problém bude asi s tou eeprom-kou.
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
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. » 07 Mar 2023, 21:07

Bez programu ani ránu. A ano, pokud jsi přidal něco do kódu a začalo to padat, tak už víš odkud vítr vane.

Mrkni na ty odkazy co jsem ti dal v editech v minulém příspěvku. A zkus si to odkrokovat. Někde to narazí, budeš vědět kde.
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 » 07 Mar 2023, 21:11

Budem študovať.
Ďakujem za pomoc a dám vedieť, či sa podaril problém vyriešiť.
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
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. » 07 Mar 2023, 21:15

Určitě když najdeš řešení, mohl bys ukázat co jsi měl špatně, jak jsi to našel a jak opravil. Ostatní, kdo si to budou číst se to rádi dozví. :thumbup:
0

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

Re: ESP32 MemoryError

Príspevok od používateľa pocitujlasku » 07 Mar 2023, 22:32

Skusim si tipnut: nacitavas data z eeprom do nejakej premennej, ktora je definovana ako pole (dost velke).
Ta hlaska znamena, ze ti dosla RAM. a najcastejsi problem je: bud nejaky sialeny program, ktory ma xx cyklov a vnoreni, alebo mas deklarovane premennne, ktore si alokuju vela miesta.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

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 » 11 Mar 2023, 15:58

Som tu späť.
Ten debugger moc nepotešil. Nefunguje, tak ako napr. u jednočipov,
že sa dá program krokovat, zastavovať a pod. Tu to ide, ale len
s klasickým pythonom. S micropythonom nie. Tam je ešte jedno
okno (Shell = REPL), kde sa dá sledovať stav hl. programu a to tak,
že v hl. programe sa robia poznámky pomocou príkazu print()
a tieto sa zobrazia v tom pomocnom okne a vieme, že program
je tohoto okamihu v poriadku na danom mieste.
#pocitujlaska, máš pravdu, došla RAM-ka. Program má okolo 1200
riadkov, aj som robil nejaké úpravy, ale stále tá istá chyba. Na nete
som hladal niečo o uvolnení pamäte, ale nepomohlo ani to.
Najväčšia chyba je to, že interpreter jazyka python zaberá v pamäti
tiež dosť miesta.
Neviem, čo ešte skúsiť. Keby tak mohol poradiť niekto, kto sa
s niečím podobným stretol.
Na jednom fóre už radili, aby prechádzali na typ esp-čka
ESP32-WROVER B, ten má pridaných 8M PSRAM
Zatial tolko.
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
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. » 11 Mar 2023, 16:01

Dej sem program nebo mi kup :fortuneteller:

Sice jsem s micropythonem nikdy nepracoval, ale bez zdrojáků ani prd. :roll:
0

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

Re: ESP32 MemoryError

Príspevok od používateľa pocitujlasku » 11 Mar 2023, 22:50

gogo: nejde o pocet riadkov, v takom asembleri mas tisice riadkov kodu, ale vysledny zabera par kb.
Casty problem su polia a premenne, ktore su deklarovane na zbytocne vysoke typy. napr. ak riesim cyklus, ktory prebehne dajme tomu 100x nedam premennu int64, ale staci byte. podobne texty. ak su staticke, tak ich dat do programovej pamate a odtial volat, aby sa zbytocne nekopirovali do ramky, ale volat ich priamo odtial cez pointer.
Lenze bez kodu su toto len take dohady.
1
Obrázok 1
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

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 » 12 Mar 2023, 12:16

Tu je ten program.
Len ma hned neukamenujte :pain: , lebo toto je moja väčšia prvotina v micropythone.
Doteraz som robil len s mcu8051 a v assemblery. Teraz som chcel na staré
kolená vyskúšať niečo nové. Možno omyl.
Prílohy
test.txt
(47.75 KiB) 63 stiahnutí
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
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. » 12 Mar 2023, 12:22

A kde to cca spadne? Určitě se ti podařilo něco najít. Popř. aspoň kdybys určil, kde to cca chcípne. Přes debug výstupy )třeba UART) z ESP to můžeš docela dobře zjistit. :thumbup:

A jen ze zvědavosti. By mě zajímalo, co tě vedlo z ASM do pythona? :?: Já na to kdysi dávno koukal a je to moloch na tady ty naše chcípáčky. Ale na raspberry na něj nedám dopustit. :thumbup:
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 » 12 Mar 2023, 15:33

Padá to na funkcii načitanie hodnot z eeprom.
Možno je niečo v tých funkciách, ale sú súčasťou pythonu
v ESP. Keď dám tú funkciu preč, tak to ide.
Nevýhoda je, že to nevypíše, na ktorom riadku je chyba ako
pri ostatných chybách. Tu zdelí iba: Memory error:
memory allocations errors xxx bytes.
Prečo ten python? Všade písali, že je lahký, ešte k tomu boli
aj tie esp-čka a chcel som niektoré veci, aby som ich skúsil
pridať na sieť, aby som videl trebárs v mobile hodnoty z čidiel,
na webe.
Tak ako písal pocitujlasku, tento program mám napísaný v asm,
ešte nie je úplne dokončený má okolo 4000 riadkov. Velkosť je
okolo 35kB. O pythone sa rozprávalo, že to dokáže s tretinovou
dľžkou. To možno áno, ale tá náročnosť na pamäť.
Som z toho teraz trocha sklamaný, lebo celkom sa to darilo až
teraz nastali takéto problémy. Neviem čo s tým. Možno to bola
fakt chyba ísť do pythonu. Alebo ešte skúsiť ten model s pridanou
8M PSRAM.
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
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. » 12 Mar 2023, 15:43

A spadne to hned při prvním řádku toho vyčítání z EEPROM?

Řádek 846. Tzn. narazí na první výčet a šlus?

Kód: Vybrať všetko

z_eeprom=i2c.readfrom_mem(80,5,1)
Nebylo by snazší si vyčíst 90 bytes najednou a hrabat se v tom? Než pokaždé načíst, zpracovat, načíst další byte, zkontrolovat. Ale jinak nikde nevidím problém. Nejsem pythonista. Myslel jsem, že tam máš použito třeba nějaké malloc, které neuvolňuješ, atp. Ale nikde nic.
0

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4318
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: ESP32 MemoryError

Príspevok od používateľa misocko » 12 Mar 2023, 17:02

Možno blbá otázka. Skúšal si aj samostatný, krátky kod na pracu s eeprom? Či ti to vôbec funguje.
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 » 12 Mar 2023, 17:21

Myslíš načítať to do nejakého zoznamu a odtial to potom vyťahovať?
A s ukladaním presne naopak, zapísať do zoznamu a ten potom zapísať do eeprom.
Skúšal som samostatný program s eeprom a ten mi funguje. Sice to je len zápis
5 bytov, ale ide.
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
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. » 12 Mar 2023, 17:24

Udělej si nějaký miniprográmek:
kompletně ji někde v nějakém FOR naplnit a pak zpětně vyčíst a porovnat. To že jede nějakých 5 bytes od adresy 0 neznamená, že je ten driver OK
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 » 12 Mar 2023, 20:43

Ok. Vyskúšam.
Ďakujem!
0

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