https://github.com/earlephilhower/ESP8266Audio könyvtárat szeretném használni, de ez bootoláskor dől el hogy tényleg kell-e.
Ha csak #include "AudioFileSourceSPIFFS.h" van a kódban, semmi más, akkor is megeszik vagy 10kb ramot. Átnéztem de nem találom a bűnöst.
Egy extern boolt szeretnék beletenni, ha az false, felejtse el az egész projektet, de arra se jövök rá hogy hova tűnik a ram.
THX!
- 955 megtekintés
Hozzászólások
Ha linkeket, includeolod a header fájlt, a memória foglalás - nem dinamikus - megtörténik, Ha ez futamidejű bool opció, akkor nem Uszód meg. Nézd meg a forráskódját, mit foglal le (valami Time buffer lesz), csökkentsd a méretet vagy tedd dinamikusra. A lib vélhetően nem runtime függő include-ra készült. 8266 esetén talán nem fáj annyira 10kB
- A hozzászóláshoz be kell jelentkezni
Az a 10kb pont rohadtul fáj. Ha minden benne van a cuccomban marad 25kb, abból -10 az már nagyon necces.
- A hozzászóláshoz be kell jelentkezni
Van egy ilyenem:
#include <ESPFlashString.h>
uint8_t sg[55]; // setup uint8_t gpio (espflash)
ESPFlash<byte> sgf("/sg");
bool success_sg = sgf.getFrontElements(sg, sizeof(sg));
Ebből már a könyvtár tudhatja hogy van-e rá szükség. Hülyeséget írtam. Ötlet?
Szerk: vagy nem?
- A hozzászóláshoz be kell jelentkezni
Futásidejű változó alapján nem tudsz beállítani olyan dolgot, ami fordítási időben dől el. Itt most az utóbbi az igaz. A statikusan linkelt dolgokat kellene csökkenteni. Ha lesz időm, meglesem, mi től van 10kB, csökkenthető-e?
- A hozzászóláshoz be kell jelentkezni
Itt írják hogy ténylegesen csak azt include-old, ami kell, ezzel csökkenteni lehet a 10kB-ot
https://github.com/earlephilhower/ESP8266Audio/blob/master/src/ESP8266A…
- A hozzászóláshoz be kell jelentkezni
Túl vagyok rajta, 4 sor maradt, a ram meg ugyanannyi.
- A hozzászóláshoz be kell jelentkezni
Melyik 4 sor maradt? Melyik üzemmódot használod? Így könnyebb megnéznem.
- A hozzászóláshoz be kell jelentkezni
Nagyon szépen köszönöm. Ezek maradtak:
#include "AudioFileSourceSPIFFS.h"
#include "AudioGeneratorWAV.h"
#include "AudioOutputI2SNoDAC.h"
- A hozzászóláshoz be kell jelentkezni
Felhúztam egy ArduinoIDE-t (platformIO-t használok), 8266-os fordítást megoldottam.
Egy üres projektbe berántottam LIB-et, de az 33kB-ot adott hozzá. Sikerült nem üres projektben 15kB növekményt elérni, ezzel lehetett tesztelni.
Valami miatt nem tdtam csökkenteni a 15kB-ot (ami fura), de próbált ki a Te configodban is, hogy pl. a AudioGeneratorWAV.cpp fájlban megszünteted a baromi hosszú (és sok) Serial.printf_P(PSTR("...")) stringet, ami a kódterületre rak be kb. 3-5kB-nyi szöveget. Ezzel kicsit lehet csökketeni, talán.
- A hozzászóláshoz be kell jelentkezni
Köszi, feltétlen kidobálom, de a ram a gond, nem a flash.
Idáig nem foglal semmi ramot.
#include "AudioFileSourceSPIFFS.h"
#include "AudioGeneratorWAV.h"
AudioFileSourceSPIFFS *wavfile = {nullptr};
AudioGeneratorWAV *wav = {nullptr};
Az üres src könyvtárba elkezdtem bedobálni amit hiányol.
- A hozzászóláshoz be kell jelentkezni
AudioFileSource.h
AudioFileSourceFS.cpp
AudioFileSourceFS.h
AudioFileSourceSPIFFS.h
AudioGenerator.h
AudioGeneratorWAV.cpp
AudioGeneratorWAV.h
AudioLogger.cpp
AudioLogger.h
AudioOutput.h
AudioOutputI2S.cpp
AudioOutputI2S.h
AudioOutputI2SNoDAC.cpp
AudioOutputI2SNoDAC.h
AudioStatus.h
Ha csak ez van az src mappában, semmi ramot nem foglal és működik, még figyelmeztetést se ad a fordító. Amilyen profi ez a könyvtár, annyira szarul van megírva.
#if(AUDIO_E)
#include "AudioFileSourceSPIFFS.h"
#include "AudioGeneratorWAV.h"
#include "AudioOutputI2SNoDAC.h"
AudioGeneratorWAV *wav = {nullptr};
AudioFileSourceSPIFFS *wavfile = {nullptr};
AudioOutputI2SNoDAC *wavout = {nullptr};
bool waven = false;
#endif
void boottest() {
#if(AUDIO_E)
if (waven) {
AudioFileSourceSPIFFS *wavfile;
AudioOutputI2SNoDAC *wavout;
String pl = USRDIR + "pcm0808m.wav";
wavfile = new AudioFileSourceSPIFFS(pl.c_str());
wavout = new AudioOutputI2SNoDAC();
wav = new AudioGeneratorWAV();
wav->begin(wavfile, wavout);
}
#endif
}
void loop() {
#if(AUDIO_E)
if (waven == true) {
if (wav->isRunning()) {
if (!wav->loop()) {
wav->stop();
waven = false;
delete wavfile;
delete wavout;
delete wav;
wavfile = NULL;
wavout = NULL;
wav = NULL;
}
}
}
#endif
}
- A hozzászóláshoz be kell jelentkezni
Amennyire szét van szedve, annyira zavaros az include hierarchy. Lehet mindent beszippant, bármit is csinálsz.
Vélhetően úgy tervezték, hogy csak ezt fogja tudni, nem egy nagyobb rendszer része lesz, emiatt nem foglalkoztak a memóriával. Vannak részei, amik esp32-n is mennek, ott nem számít annyira 10-20kB.
- A hozzászóláshoz be kell jelentkezni
Köszönöm hogy ránéztél. Nem bíztam benne hogy ezt sikerül megoldanom, azért nyitottam a topikot.
- A hozzászóláshoz be kell jelentkezni
Ezek szerint célba értél? Sikerült csökkenteni kicsit a memóriát?
- A hozzászóláshoz be kell jelentkezni
108 bájtot eszik ha nincs használva a 10k helyett. ):
- A hozzászóláshoz be kell jelentkezni
És mi lett a megoldás?
- A hozzászóláshoz be kell jelentkezni
Nagyon örülök!
- A hozzászóláshoz be kell jelentkezni
szerk: válasz: neduddg
Kitöröltem a felesleges fájlokat. Fogalmam sincs róla mi zabálta meg a ramot.
Ezek maradtak az src mappában:
AudioFileSource.h
AudioFileSourceFS.cpp
AudioFileSourceFS.h
AudioFileSourceSPIFFS.h
AudioGenerator.h
AudioGeneratorWAV.cpp
AudioGeneratorWAV.h
AudioLogger.cpp
AudioLogger.h
AudioOutput.h
AudioOutputI2S.cpp
AudioOutputI2S.h
AudioOutputI2SNoDAC.cpp
AudioOutputI2SNoDAC.h
AudioStatus.h
void boottest() {
#if(AUDIO_E)
if (waven) {
String pl = USRDIR + "pcm0808m.wav";
wavfile = new AudioFileSourceSPIFFS(pl.c_str());
wavout = new AudioOutputI2SNoDAC();
wav = new AudioGeneratorWAV();
wav->begin(wavfile, wavout);
}
#endif
}
A fenti függvény így helyes, véletlen bent maradt két sor. Nem tudom mi a rák van vele, de ha az egész "gyári" cucc benne van akkor bukok 10kB ramot. Ellenőrizhető, kíváncsi vagyok rá ki fejti meg.
Teve? Áldom a neved is amióta kijavítottad a .tar könyvtárat.
- A hozzászóláshoz be kell jelentkezni
Hasonlo esetekben azt szoktam hogy a *.elf-re raengedek egy `nm main-akarmi.elf | sort` -ot es abbol ki lehet banyaszni hogy mik azok a statikus objektumok (nev szerint) amik megeszik a RAM-ot.
Illetve forditsd -fdata-sections kapcsoloval + utana -Wl,--gc-sections modon linkeld. Akkor kiszedi azokat a statikus objektumokat amikre nincs hivatkozas.
- A hozzászóláshoz be kell jelentkezni
Az nem opcio, hogy egy kulso, dinamikusan betoltott kodbol hasznalod ezt, amit csak akkor toltesz be, ha a boolod szerint kell?
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Arduino-t használok, szerintem abban ez nem kivitelezhető. Egyébként meg se tudnám csinálni.
- A hozzászóláshoz be kell jelentkezni