Fórum témák
» Több friss téma |
Jól gondolod nincs rá nyomtatva a külső PSRAM chip
Hát ez baj...
Megpróbálom az állandó értékeket a Flash-ba pakolni, de az meg lassú. De ez van.
Ilyen S3-as panelt keres: Bővebben: Link
Adatlap: Bővebben: Link 5. oldal: 8Mb flash, 8Mb PSRAM A hozzászólás módosítva: Okt 9, 2023
Jó, mert ezen sem látom a memória ic-t, ezért lehetett volna akár az enyémen is!
Ezek az IC-k benne vannak a fém lap alatt a pricival együtt? A wroom-nak nincs, csak az 1-nek, meg a többinek. Ezt már kibogaráztam. ( 8 mega nem is kevés különben!)
Az ESP32-S3-DevKitC-1-N8R8 típusszám végén az N8R8 jelzi, hogy 8 MB QD flash és 8 MB OT RAM memóriát tartalmaz a modul. Mivel az OT rövidítés octal SPI-t takar (8 adatvonal), feltételezem, hogy ez négy további kivezetést elvesz a GPIO lábak közül.
Pár éve valaki linkelt egy russzki videót, amikor is memória chip-et cseréltek házilag valamelyik ESP32-es lapkán.
32MB-t tettek fel, és a proci a teszt szerint tényleg ennyit is látott utána.
Tudtommal.
Mind a két memória modul ugyanazon a SPI buszon van, csak a CS címzés van külön. És a RAM kétszer (vagy négyszer?)gyorsabb mint a FLASH. Persze a kivezetett pinek azért változnak, erre oda kel figyelni a kiosztásuknál! A hozzászólás módosítva: Okt 10, 2023
Sziasztok!
Küzdök még kicsit, de nem jó. Mintaszam=16384; Float típusú tömbökkel operálnék. Elvileg ekkor 1 tömb 4*16384 Byte, ami 65536byte, ami 64KByte. Két ilyennél ezt a hibát kapom a fordítótól: DRAM segment data does not fit. region `dram0_0_seg' overflowed by 28848 bytes Elvileg az 520KByte-ba ennek és a kicsi kódnak bele kéne férnie. Arduino IDE 2.1.0 Board: ESP32-WROOM-DA Module De ezzel sem jó: NodeMCU-32S Mi lehet a gond?
Ok, megvan a hiba. Egy cikluson belül nem lehet értéket adni mindegyik tömbnek, mert nincs lefoglalva a memóriában, szerintem összezavarodik. Most elvileg megy, ha külön cikusban egymás után adok értéket nekik.
"Mind a két memória modul ugyanazon a SPI buszon van, csak a CS címzés van külön."
Meg az adatvonalak száma különbözik. A flash négy adatvezetéket használ, a RAM meg nyolcat. Ezért írtam, hogy feltehetőleg 4 GPIO kivezetést elvesz a RAM nélküli modulokhoz képest.
Ez gyanús nekem hogy ram függő... én nem láttam még 8bites psramot az esp-en.
https://www.reddit.com/media?url=https%3A%2F%2Fpreview.redd.it%2Fyv...7fa9eb Itt a psram össz 8lábú 4 adat, 2 vezérlő, 2 táp
Itt a doksi róla, nézd meg a 26. oldal táblázatát:
Bővebben: Octal SPI Már 8bites adatvonalal rendelkeznek. Bővebben: Link Octal SPI flash/PSRAM memóriával ellátott ESP32-S3-WROOM-1/1U modulokkal és ESP32-S3-WROOM-2 modulokkal rendelkező kártyák esetén a GPIO35, GPIO36 és GPIO37 érintkezők az ESP32-S3 közötti belső kommunikációt szolgálják. és SPI flash/PSRAM memória, így külső használatra nem áll rendelkezésre. A hozzászólás módosítva: Okt 11, 2023
Köszi az infót, Nem tudtam hogy az S3 már ilyen okos, én leragadtam a simánál, ott még csak 4 bit volt
Vennem kell másikat, de szűkös a keret mostanában sajnos. Tegnap borozgattaam, miközben a Malloc-al foglalkoztam. De ma megnéztem, és rájöttem miért hagytam ott és ittam inkább tovább...
A Ciklus_max az a tömb mérete, 16384. De nem férek el benne, de elvileg 500+KByte-nak kellene lennie. Ebben el kellene férnie nem? Ez 128KByte, de már ez sem fér el. Az IDE nem panaszkodik minden esetben, de volt olyan futás ami felment az ESP-re, de folyton újraindult. De azt egy hibás const -okozta. Szóval hibásan írtam, hogy megvan a hiba. Sajnos nincs meg. Másképpen kell a memóriát használni? Nekem sajnos kell ez a fajta memória, a Flash-ben is kell valamennyit tárolnom, de 3-4 ilyen tömbre szükségem lenne. Még így is Hanoi tornyait kell játszanom. A hozzászólás módosítva: Okt 11, 2023
Normál deklarációval/helyfoglalással létre tudod hozni ezt a tömböt, a fordító elfogadja?
Mi az oka hogy futásidőben malloc-al foglalsz helyet?
A linkeden másképp írják... ptr = (cast-type*) malloc(byte-size)
Akkor ez miért is ptr = (int!!!!*)malloc(2 * Ciklus_max * sizeof(float!!!!));
Ha csak létrehozom, akkor afordító nem szól semmit sem. Azonban, ha fel akarom tölteni adatokkal, akkor már igen.
Másképpen van a linken? Az azért jó, mert másoltam! Megnézem. Valamit nagyon benézek úgy érzem.
Sziasztok
Egy ht-ct62-est szeretnék programozni (ESP32C3+SX1262 Lora modul van 1 modulban) Egy külső CP2102-es usb-ttl modullal szeretném programozni. Az EN-lábon nyomógomb+kondi+ellenállás IO0 GND-re kötve. IO9-et is GND-re húztam ellenálláson keresztül. VCC pedig USB 5V -> A1117/3,3 + kondi -ról kapja a tápot. Kipróbáltam már több Bordot és a sebességet is lejjebb vettem, de Failed uploading: uploading error: exit status 2 vel száll el mindig. Nagyon kevés info van erről az eszközről. Tudnátok segíteni, hogy miket nézek meg mit állítsak?
Linkről:
ptr = (int*) malloc(100 * sizeof(int)); Since the size of int is 4 bytes, this statement will allocate 400 bytes of memory. And, the pointer ptr holds the address of the first byte in the allocated memory. Kód:
Nem sikerül allocálni. Nem lehet, hogy elromlott az ESP? Futás a Serial monitoron: Eddig megy... Memory not allocated. Ciklusok után... Ha értéket adnék nekik, akkor rögtön hibával elszáll, azaz az IDE is azt mondja, hogy túlléptem a megengedett határt. A Malloc-al ki szerettem volna deríteni, hogy rosszul csináltam-e valamit és azért nem jó, vagy nincs elég memória ehhez, nem töltöm fel a tömböket, csak létrehozom például így: float Adatok[16278]; float Re[16278]; float Im[16278]; A pointernek egésznek kell lennie, mert a memória területre mutat. Lehet ennek long-nak kell lennie? 540KByte meghaladná az integert? Na ez még lehet. Megnézem.
Átírtam a pointert long-ra, és a tömböket sem definiáltam előre, úgy sem sikerül lefoglalni ekkora értékeket.
Kipróbálom sokkal egyszerűbb adatokkal feltölteni.
Miért akarsz dinamikusan foglalni?
Mikrokontrollereken erősen ajánlott a statikus foglalás.
De miért long ha float?
Foglald inkább statikusan, "megfelelően"... és első körben ne csak pointert foglalj... A hozzászólás módosítva: Okt 11, 2023
Erre már a fordító is mérges, de már nem látom át rendesen....
A (float)i is egy teszt, ha nincs előtte, akkor sem megy. IDE DRAM segment data does not fit. region `dram0_0_seg' overflowed by 94392 bytes De ilyen hibát dobott akkor is, mikor a const Mintaszam-al akartam pár dolgot megoldani, ezért kellett a Ciklus_max. Ez teszt, nem éles, több változó is kell majd. Sokkal. A hozzászólás módosítva: Okt 11, 2023
A pointer nem lehet float. Az egész szám ami a kezdő memória címre mutat. float-el el sem idul. Nálam nem, kipróbáltam.
Az volt az első. Ha adatokat adok ciklusban akkor elszáll minden. Addig jó. Értékadásnál lenne baj? Nem tudom. Ez volt az első, nem ment, ezért próbálta a foglalással.
Elolvastad az általam linkelt dokumentációt? Ott le van írva, hogy melyik RAM (nem egy összefüggő RAM van a mikrokontrollerben) mekkora és mire használható. Ráadásul egy RTOS környezet fut rajta, ami egy csomó mindent lefoglal, taskokat hoz létre, stb.
Átnézem mégegyszer, de nem vágom ennyire. Angolom már nem az igazi.
Átfutottam, de nem láttam a megoldást, de most megnézem részletesebben.
persze hogy nem lehet, De floatra mutató pointer igen, és neked az kell, nem int, meg long....
ptr = (long*)malloc(2 * Ciklus_max * sizeof(float)); itt tuti float* kell --- Azért javasoltam a statikus foglalást, mert a hibaüzenet szerint ez nem fér be ebbe a ram-ba... Ha meg nem fér be akkor a malloc sem tudja begyömöszölni |
Bejelentkezés
Hirdetés |