www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Arduino - spremenljivka String

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
malci
Član
Član



Pridružen-a: Sob 15 Sep 2007 21:05
Prispevkov: 792
Aktiv.: 3.93
Kraj: Polhov Gradec

PrispevekObjavljeno: Pet Sep 25, 2015 9:04 pm    Naslov sporočila:  Arduino - spremenljivka String Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
frenki
Moderator
Moderator



Pridružen-a: Ned 23 Feb 2003 21:26
Prispevkov: 6540
Aktiv.: 29.45
Kraj: Ljubljana (JN76GB)

PrispevekObjavljeno: Sob Sep 26, 2015 9:07 pm    Naslov sporočila:   Odgovori s citatom

Ga ne dodeli, ali ga ne izpiše? Daj poskusi na koncu še izpis kakšnega newline-a.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
malci
Član
Član



Pridružen-a: Sob 15 Sep 2007 21:05
Prispevkov: 792
Aktiv.: 3.93
Kraj: Polhov Gradec

PrispevekObjavljeno: Sob Sep 26, 2015 9:26 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
frenki
Moderator
Moderator



Pridružen-a: Ned 23 Feb 2003 21:26
Prispevkov: 6540
Aktiv.: 29.45
Kraj: Ljubljana (JN76GB)

PrispevekObjavljeno: Sob Sep 26, 2015 10:37 pm    Naslov sporočila:   Odgovori s citatom

Daj poskusi obe roleti filat s prvo vrednostjo:
Koda:
niz2.substring(0,13);
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
vpeter
Član
Član



Pridružen-a: Pon 11 Jun 2012 16:05
Prispevkov: 337
Aktiv.: 2.35
Kraj: Maribor okolica

PrispevekObjavljeno: Ned Sep 27, 2015 9:29 am    Naslov sporočila:   Odgovori s citatom

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 Sad
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
frenki
Moderator
Moderator



Pridružen-a: Ned 23 Feb 2003 21:26
Prispevkov: 6540
Aktiv.: 29.45
Kraj: Ljubljana (JN76GB)

PrispevekObjavljeno: Ned Sep 27, 2015 1:02 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
malci
Član
Član



Pridružen-a: Sob 15 Sep 2007 21:05
Prispevkov: 792
Aktiv.: 3.93
Kraj: Polhov Gradec

PrispevekObjavljeno: Ned Sep 27, 2015 5:48 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5766
Aktiv.: 25.97
Kraj: Grosuplje

PrispevekObjavljeno: Ned Sep 27, 2015 6:16 pm    Naslov sporočila:   Odgovori s citatom

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.



Arduino_prevod.JPG
 Opis:
 Velikost datoteke:  36.73 KB
 Pogledana:  18 krat

Arduino_prevod.JPG



_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
malci
Član
Član



Pridružen-a: Sob 15 Sep 2007 21:05
Prispevkov: 792
Aktiv.: 3.93
Kraj: Polhov Gradec

PrispevekObjavljeno: Ned Sep 27, 2015 6:32 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
frenki
Moderator
Moderator



Pridružen-a: Ned 23 Feb 2003 21:26
Prispevkov: 6540
Aktiv.: 29.45
Kraj: Ljubljana (JN76GB)

PrispevekObjavljeno: Ned Sep 27, 2015 9:27 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
malci
Član
Član



Pridružen-a: Sob 15 Sep 2007 21:05
Prispevkov: 792
Aktiv.: 3.93
Kraj: Polhov Gradec

PrispevekObjavljeno: Ned Sep 27, 2015 10:40 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5766
Aktiv.: 25.97
Kraj: Grosuplje

PrispevekObjavljeno: Ned Sep 27, 2015 11:18 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
rafaellsi
Član
Član



Pridružen-a: Ned 11 Sep 2011 18:54
Prispevkov: 477
Aktiv.: 3.12
Kraj: Radovljica

PrispevekObjavljeno: Ned Sep 27, 2015 11:30 pm    Naslov sporočila:   Odgovori s citatom

Č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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
uc530
Član
Član



Pridružen-a: Pet 30 Okt 2015 15:06
Prispevkov: 17
Aktiv.: 0.17
Kraj: Po

PrispevekObjavljeno: Pet Okt 30, 2015 7:00 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mte
Član
Član



Pridružen-a: Pon 02 Jun 2008 17:47
Prispevkov: 53
Aktiv.: 0.28
Kraj: Sežana

PrispevekObjavljeno: Pet Okt 30, 2015 10:08 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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