chtel bych se zeptat zkusenejsich na praci s pameti.
obecne:
na Arduinu Mega pracuji s dlouhymi stringy. rad bych nasel optimalni zpusob prace.
pro zjednoduseni arduino mega ma 4k RAM
String1 ma 1200 znaku
String2 ma 1200 znaku
1, rad bych se zeptal jaky je rozdil (co v pameti probiha) mezi String1 = String1 + String2 (to vim...) a String1.concat(String2) (to nevim)
2, jak sloucit dlouhe stringy "optimalne" tedy, aby nedoslo k preteceni vyhrazeneho prostoru, kdyz mam na konkretni string udelany String1.reserve(2400) a String2.reserve(1200)? zbytek pameti pochopitelne potrebuju na jinou praci - dokazu se pohybovat v tom 3600 prostoru nebo musim ven?
po 1+2 mi to pise blbosti a to chapu, ale po 1.concat(2) mi to zamrzne a nemuzu to ani debugovat, tak patram co se deje.
na promennne typu String v zasade netrvam.
Dik.
Arduino Mega - memmory leak
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Re: Arduino Mega - memmory leak
Dobrý den,
String je objektový datový typ, nad kterým jsou definované jak různé metody (např. concat), tak přetížené operátory (+).
Pokud byste si chtěl počíst, jak je String implementovaný, tak vás odkáži sem: https://github.com/arduino/Arduino/blob ... String.cpp.
Na řádku 263 je definovaná metoda concat, kterou dále používají všechny další přetížené funkce concat i přetížený operátor +.
Ve vašem případě by už mohl být problém v tom, že začíná docházet RAM paměť. Všechny lokální proměnné se tuším vytvářejí na RAM paměti. Pokud zaplníte 3600B prostoru z 4kB, už by mohl nastat problém s nedostatkem místa.
Zkuste se podívat na možnost práce s daty uloženými ve Flash paměti Arduina https://www.arduino.cc/reference/en/lan ... s/progmem/.
String je objektový datový typ, nad kterým jsou definované jak různé metody (např. concat), tak přetížené operátory (+).
Pokud byste si chtěl počíst, jak je String implementovaný, tak vás odkáži sem: https://github.com/arduino/Arduino/blob ... String.cpp.
Na řádku 263 je definovaná metoda concat, kterou dále používají všechny další přetížené funkce concat i přetížený operátor +.
Ve vašem případě by už mohl být problém v tom, že začíná docházet RAM paměť. Všechny lokální proměnné se tuším vytvářejí na RAM paměti. Pokud zaplníte 3600B prostoru z 4kB, už by mohl nastat problém s nedostatkem místa.
Zkuste se podívat na možnost práce s daty uloženými ve Flash paměti Arduina https://www.arduino.cc/reference/en/lan ... s/progmem/.
Re: Arduino Mega - memmory leak
To ja samozrejme vim, ze dochazi pamet. mozna jsem to mel napsat jinak:
lze pri slouceni dvou dlouhych retezcu String pouizt nejakou funkci ktera prida string2 do promenne String1 v oblasti vyhrazenych pomoci reserve?
+ concat i && vyleze ven, a snazi se to udelat ve volne pameti a pak to zase vrati do puvodniho rezervovaneho mista. proto to spadne. (teda alespon takhle si myslim, ze to ve skutecnosti je)
premyslim treba tak ze udelat pole1[2400] a treba v cyklu pridavat po byte z pole2[1200] ? nebo cokoliv jineho me momentalne totiz nic konstruktivniho nenapada co bz netrvlo "vecnost".
lze pri slouceni dvou dlouhych retezcu String pouizt nejakou funkci ktera prida string2 do promenne String1 v oblasti vyhrazenych pomoci reserve?
+ concat i && vyleze ven, a snazi se to udelat ve volne pameti a pak to zase vrati do puvodniho rezervovaneho mista. proto to spadne. (teda alespon takhle si myslim, ze to ve skutecnosti je)
premyslim treba tak ze udelat pole1[2400] a treba v cyklu pridavat po byte z pole2[1200] ? nebo cokoliv jineho me momentalne totiz nic konstruktivniho nenapada co bz netrvlo "vecnost".
Re: Arduino Mega - memmory leak
a diky za cteni - progmem znam, usetri hodne mista 

Re: Arduino Mega - memmory leak
Nic jiného, než pole znaku me taky nenapadá. Když to zkombinujete s uložením zdrojových stringů pomoci PROGMEM, tak by to mohlo být poměrně optimální řešení.
Sent from my iPhone using Tapatalk
Sent from my iPhone using Tapatalk
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host