|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
malci Član
Pridružen-a: Sob 15 Sep 2007 21:05 Prispevkov: 792 Aktiv.: 3.93 Kraj: Polhov Gradec
|
Objavljeno: Pet Sep 25, 2015 9:04 pm Naslov sporočila: Arduino - spremenljivka String |
|
|
Pozdravljeni!
Že nekaj večerov ne napredujem v razvoju programa, ker mi velike težave povzroča uporaba spremenljivke String.
Ne zastopim, zakaj mi v spodnji kodi ne dodeli vrednosti spremenljivki "roleta2" ?
Sem poizkusil že mnogo načinov (global variable, drugo ime, isto ime..) a mi ne uspe.
Je mogoče razlog v preveliki porabi flash spomina? ( Binary sketch size: 24.944 bytes (used 77% of a 32.256 byte maximum) (0,87 secs))
Uporabljam AtmegaStudio 6.2 z dodatkom VisualMicro. Sem pa poizkusil tudi v original Arduino softwaru, pa ni nič bolje.
Koda: |
void parsing(){
Serial.println(sprejem2);
String niz2=sprejem2.substring(sprejem2.indexOf('&ROLETA')-5,sprejem2.lastIndexOf('&ROLETA')+8);//iz sprejema2 izbere niz2, ki vsebuje zanimive podatke
Serial.println(niz2); // cel zanimiv niz
int LengthOfString=niz2.length();
Serial.println(LengthOfString);
String roleta1=niz2.substring(0,13);
String roleta2=niz2.substring(13,26);
Serial.println(roleta1);
Serial.println(roleta2);
} |
Na serijskem portu je naslednji odgovor:
Koda: |
SUCCESS - Found index.htm file.
GET /ajax_inputs&ROLETA1DOL&5&ROLETA1GOR&5&ROLETA2DOL&5&ROLETA2GOR&5&ROLETA3DOL&5&nocache=365707.5280789286 H
ROLETA1DOL&5&ROLETA1GOR&5&ROLETA2DOL&5&ROLETA2GOR&5&ROLETA3DOL&5&
65
ROLETA1DOL&5&
|
Imate kakšen namig, kaj naj še poizkusim?
lp
uroš
_________________ Elektronika za hobi |
|
Nazaj na vrh |
|
|
frenki Moderator
Pridružen-a: Ned 23 Feb 2003 21:26 Prispevkov: 6540 Aktiv.: 29.45 Kraj: Ljubljana (JN76GB)
|
Objavljeno: Sob Sep 26, 2015 9:07 pm Naslov sporočila: |
|
|
Ga ne dodeli, ali ga ne izpiše? Daj poskusi na koncu še izpis kakšnega newline-a.
|
|
Nazaj na vrh |
|
|
malci Član
Pridružen-a: Sob 15 Sep 2007 21:05 Prispevkov: 792 Aktiv.: 3.93 Kraj: Polhov Gradec
|
Objavljeno: Sob Sep 26, 2015 9:26 pm Naslov sporočila: |
|
|
Sem zamenjal narekovaje, pa je isto. Mi pa spremenljivke ne dodeli, Saj če zatem vstavim še kak "Serial.println("xxx");" se mi izpieš, a so vmes prazne vrstice.
Je pa res, da mi je danes ko sem prvič probal (ampka samo prvič) izpisal tudi drugo spremenljivko, sedaj pa ne več. Rahlo me že ta arduino uno
_________________ Elektronika za hobi |
|
Nazaj na vrh |
|
|
frenki Moderator
Pridružen-a: Ned 23 Feb 2003 21:26 Prispevkov: 6540 Aktiv.: 29.45 Kraj: Ljubljana (JN76GB)
|
Objavljeno: Sob Sep 26, 2015 10:37 pm Naslov sporočila: |
|
|
Daj poskusi obe roleti filat s prvo vrednostjo:
Koda: |
niz2.substring(0,13); |
|
|
Nazaj na vrh |
|
|
vpeter Član
Pridružen-a: Pon 11 Jun 2012 16:05 Prispevkov: 337 Aktiv.: 2.35 Kraj: Maribor okolica
|
Objavljeno: Ned Sep 27, 2015 9:29 am Naslov sporočila: |
|
|
frenki je napisal/a: |
Daj poskusi obe roleti filat s prvo vrednostjo |
Odgovor iz "drugega" foruma - nič ne izpiše.
Offtopic: Tale tema je dokaz kako neumna ideja je bila razdelitev foruma na dva
|
|
Nazaj na vrh |
|
|
frenki Moderator
Pridružen-a: Ned 23 Feb 2003 21:26 Prispevkov: 6540 Aktiv.: 29.45 Kraj: Ljubljana (JN76GB)
|
Objavljeno: Ned Sep 27, 2015 1:02 pm Naslov sporočila: |
|
|
Ni logično. Trenutno nisem doma, bom pa zvečer priključil arduina, da vidim kako se obnaša pri meni.
Offtopic: Vpeter osebno se strinjam z napisanim mnenjem, je pa ta debata tukaj brezpredmetna. Tema za akterje delitve.
|
|
Nazaj na vrh |
|
|
malci Član
Pridružen-a: Sob 15 Sep 2007 21:05 Prispevkov: 792 Aktiv.: 3.93 Kraj: Polhov Gradec
|
Objavljeno: Ned Sep 27, 2015 5:48 pm Naslov sporočila: |
|
|
Sem danes poskusil testno spremeniti kodo (skrajšati) in sem deklariral string "sprejem2" da vsebuje podatke, kot bi jih sprejel iz etherneta. In ja, koda deluje. In koda deluje po pričakovanju. Tako da je mogoče res samo v pomankanju SRAM-a (kot so mi namignili v drugem forumu).
Mogoče kdo ve, kako pridem do podatka, koliko ga je porabljenega?
Iz tega: ( Binary sketch size: 24.944 bytes (used 77% of a 32.256 byte maximum) se verjetno ne da razbrati?
lp
uroš
_________________ Elektronika za hobi |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5766 Aktiv.: 25.97 Kraj: Grosuplje
|
Objavljeno: Ned Sep 27, 2015 6:16 pm Naslov sporočila: |
|
|
malci, toda to ni edini podatek, ki ti ga vrne prevajalnik.
Pod to vrstico imaš tudi podatek, koliko dinamičnega spomina je ostalo na razpolago.
Opis: |
|
Velikost datoteke: |
36.73 KB |
Pogledana: |
18 krat |
|
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
malci Član
Pridružen-a: Sob 15 Sep 2007 21:05 Prispevkov: 792 Aktiv.: 3.93 Kraj: Polhov Gradec
|
Objavljeno: Ned Sep 27, 2015 6:32 pm Naslov sporočila: |
|
|
Ja res je še ena ( oz več) vrsta s podatki.
Koda: |
Compiling 'ArduinoRoleteProject' for 'Arduino Uno'
Binary sketch size: 25.088 bytes (used 78% of a 32.256 byte maximum) (3,72 secs)
Minimum Memory Usage: 1465 bytes (72% of a 2048 byte maximum)
Uploading to I/O board using 'COM5'
Done uploading
|
Samo ta druga vrsta je drugačna, ali pa jo jaz ne znam prevesti, glede na zgornjo sliko.
A če "Minimum Memory Usage" pomeni razpoložljiv SRAM, potem ga mi še ni zmanjkalo.
lp
uroš
_________________ Elektronika za hobi |
|
Nazaj na vrh |
|
|
frenki Moderator
Pridružen-a: Ned 23 Feb 2003 21:26 Prispevkov: 6540 Aktiv.: 29.45 Kraj: Ljubljana (JN76GB)
|
Objavljeno: Ned Sep 27, 2015 9:27 pm Naslov sporočila: |
|
|
Takole pravi dokumentacija:
Citiram: |
The ATmega328 chip found on the Uno has the following amounts of memory:
Flash 32k bytes (of which .5k is used for the bootloader)
SRAM 2k bytes
EEPROM 1k byte
The ATmega2560 in the Mega2560 has larger memory space :
Flash 256k bytes (of which 8k is used for the bootloader)
SRAM 8k bytes
EEPROM 4k byte |
Napisan imaš minimum memory usage, ki ni nujno enak dejanskemu. Nisem prepričan, če je v to všteta tudi vsa poraba knjižnic. Serial je sicer zagotovo požrešen s svojim bufferjem.
|
|
Nazaj na vrh |
|
|
malci Član
Pridružen-a: Sob 15 Sep 2007 21:05 Prispevkov: 792 Aktiv.: 3.93 Kraj: Polhov Gradec
|
Objavljeno: Ned Sep 27, 2015 10:40 pm Naslov sporočila: |
|
|
Težava zaenkrat rešena. Namreč, ko sem zmanjšal velikost buffer-ja za polovico (iz 100 na 60), je program začel delovati po pričakovanju. Očitno je potem težava v SRAM-u.
Sem tudi gledal vključene knjižnice, ter eno izključil ker ne vem čemu služi in tudi brez nje deluje (WString.h), a se velikost programa ni spremenila. Zgleda, da knjižnice ne vplivajo na skupno velikost.
Nič, ne preostane mi drugega kot ugotoviti kaj vse uporablja SRAM (spremenljivke, še kaj drugega?), optimizirati program ali pa zamenjati arduinota.
Bi pa tukaj vprašal, če kdo ve, ali je bootloader naložen na samem mikrokrmilniku? Če bi ta arduino uno uporabil z bascom in zunanjim SPI programatorjem, se ta bootloader verjetno izbriše, stem bi pridobil nekaj prostora, je potem še možnost ta bootloader povrniti nazaj?
lp
uroš
_________________ Elektronika za hobi |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5766 Aktiv.: 25.97 Kraj: Grosuplje
|
Objavljeno: Ned Sep 27, 2015 11:18 pm Naslov sporočila: |
|
|
malci je napisal/a: |
Bi pa tukaj vprašal, če kdo ve, ali je bootloader naložen na samem mikrokrmilniku? Če bi ta arduino uno uporabil z bascom in zunanjim SPI programatorjem,
se ta bootloader verjetno izbriše, stem bi pridobil nekaj prostora, je potem še možnost ta bootloader povrniti nazaj? |
Bootloader je naložen v flashu krmilnika.
Uno uporablja optiboot bootloader in zavzema 512Bytov pomnilnika (flasha).
Seveda, če ga pobrišeš pridobiš to polovico kB za program.
In seveda lahko programiraš bootloader nazaj(tega ali pa katerega drugega).
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
rafaellsi Član
Pridružen-a: Ned 11 Sep 2011 18:54 Prispevkov: 477 Aktiv.: 3.12 Kraj: Radovljica
|
Objavljeno: Ned Sep 27, 2015 11:30 pm Naslov sporočila: |
|
|
Če se iz knjižnice ničesar ne uporablja, potem ta ne vpliva na velikost prevedenega programa porabljene količine pomnilnika. Je prevajalnik ni vključil in zato je rezultat isti, kot če je sploh ne uporabiš, vključiš v skico(program).
V količino porabljenega SRAM so verjetno vključene tudi knjižnice, vendar se mi zdi da prikaže le porabo pomnilnika za globalne spremenljivke (vsaj v Arduino okolju je tako). Med izvajanjem preograma pa svoje zahtevajo še lokalne spremenljivke, .......
Za zmanjšanje porabe Srama obstaja trik z uprabo progmem knjižnice. Ali recino, če imaš dosti izpisov konstantnih stringov na serial ali LCD, z uporabo "F" :
Koda: |
Serial.print(F("Kar nekaj: ")); |
Na zgornji način, ti spremenjivke shrani v fleš spomin.....
Najbolj enostavno pa je, da vzameš večji procesor (Arduino), recimo mega2560 ...
|
|
Nazaj na vrh |
|
|
uc530 Član
Pridružen-a: Pet 30 Okt 2015 15:06 Prispevkov: 17 Aktiv.: 0.17 Kraj: Po
|
Objavljeno: Pet Okt 30, 2015 7:00 pm Naslov sporočila: |
|
|
Pred časom sem uporabljal tale dodatek v skicah, da sem spremljal porabo srama:
Koda: |
void setup (){
Serial.begin(9600);
Serial.println("test prikaza prostega delovnega rama");
}
int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
void loop(){
Serial.print ("kolicina prostega RAM-a : ");
Serial.print(freeRam());
Serial.println ("Kb");
delay(1000);
} |
LP
|
|
Nazaj na vrh |
|
|
mte Član
Pridružen-a: Pon 02 Jun 2008 17:47 Prispevkov: 53 Aktiv.: 0.28 Kraj: Sežana
|
Objavljeno: Pet Okt 30, 2015 10:08 pm Naslov sporočila: |
|
|
Meni je v preteklosti uporaba spremenljivk razreda String delala težave, sploh ko sem v enem programu potreboval precej spremenljivk tega tipa - nekaj časa je vse lepo delalo, po nekaj minutah se je pa cel program začel zelo čudno obnašat, brez neke smiselne logike.
Ko sem začel namesto visokonivojskih stringov uporabljat nizkonivojske c-jevske spremenljivke char* ter nizkonivojske funkcije za manipulacijo z njimi, je vse začelo delat brez vsakršnih težav. Res malo več dela, ampak tako sem eliminiral možnost memory leakov pri visokonivojskih String-ih.
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 48 dni
Powered by phpBB © 2001, 2005 phpBB Group
|