60 nap alatt Arduino #40-#41 - Kódméret csökkentés

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Avatar
normen
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2012. május 27. vasárnap, 6:00

Hozzászólás Szerző: normen »

szegoj írta: Ha az egyik sztringben például az '1'-es karaktert '2'-re cserélem (a pde fájl mérete nem változik!), a lefordított program mérete váratlanul, kb. 50 bájttal megnő.
Standard C-s karaktertömböt vagy Arduino API féle string osztályt?
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

Hozzászólás Szerző: szegoj »

A sztring deklarációja:

Kód: Egész kijelölése

char* text;

És egy példa, itt cseréltem volna a sztring közepén az '1' karaktert.

Kód: Egész kijelölése

e.print("<tr><td>1</td><td>");
A fordításhoz az Arduino 0022-es verzióját használom
Avatar
glezmen
Bitmanipulátor
Hozzászólások: 139
Csatlakozott: 2012. augusztus 9. csütörtök, 6:00

Hozzászólás Szerző: glezmen »

a konyhai idozites projectnel jeleztem is a forrasban, hogy az Arduinos map fuggveny hasznalhata helyett 'kezzel' megirva latvanyosan csokkent a leforditott kod merete (200 byte!)

szoval a gyarilag adott fuggvenyek egyszeruen hasznalhatok, a kod is tisztabb lesz, de ha a meret fontos akkor erdemes ranezni :)
Avatar
normen
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2012. május 27. vasárnap, 6:00

Hozzászólás Szerző: normen »

szegoj írta:A sztring deklarációja:

Kód: Egész kijelölése

char* text;

És egy példa, itt cseréltem volna a sztring közepén az '1' karaktert.

Kód: Egész kijelölése

e.print("<tr><td>1</td><td>");
A fordításhoz az Arduino 0022-es verzióját használom
Ez így nem egészen tiszta....

Először deklarálsz egy karaktertömbre mutató pointert. Ennek inicalizálásáról, értékadásáról, módosításáról semmit nem közöltél. Majd bemásolsz egy olyan kódrészletet (egy sort), ami egy ismeretlen (csak feltételezem, hogy egy etherneten működő webszerverről van szó) osztály print metódusát hívja meg egy statikus karakterlánccal.

Ezek alapján nem tudom milyen segítséget vagy tippet vársz tőlünk....

Üdv.
NorMen
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

Hozzászólás Szerző: szegoj »

Ja, igen...
A két sor között látszólag nincs összefüggés. :D

De van, a print függvényz (e.print) a következőképp definiálja az Ethernet library:

Kód: Egész kijelölése

 void e.print(char* text) ...
Ezek után írok a zárójelek közé sztringeket.
Ezek persze még nem íródnak ki a porton, hanem a memória bufferben gyűlnek a tényleges kiíró utasításig.

A probléma, hogy a buffert kellett "nagyra", 1k-ra definálnom, úgy tűnik ez már a 328-as avr-nek is sok (mármint Arduinonak). Másik érdekesség a kódméret: kb 8200 bájtnál jelentkezett a probléma (8192 laphatár ?)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az Arduino esetén a csomagméret 6-700 byte lehet (2k SRAM van a chipben!)
Laphatár az nem jelenik meg 8192-nél....
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

Hozzászólás Szerző: szegoj »

A 2k SRAM-ból "nagyvonalúan" 1k-t használok, de ez ellen az Arduino nem tiltakozik, csak időnként megviccel, pl. a kiinduló problémánál.
(Vélhetőleg, a buffer is tele van már ilyenkor)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Amit az Arduino keret használ:
- soros vételi buffer ~32 vagy ~64 byte
- belső stack és társai ~400-450 byte
- belső lefoglalt változók ~40-150 byte

És még örülj, ha marad valami :)...

A fordításnál NINCS memóriafoglaltság ellenőrzés. Ha egymásra írsz, hát így jártál....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Kódméret csökkentés?

Ötlet! Felejtsük el az arduinot. És tanuljunk inkább Bascomot.

Legfeljebb bekel érnünk fele akkora kódmérettel!
:lol:

Már úgyis régen átmentünk Viringbe (Gcc?)! Mivel a legtöbben kevésnek találták az Arduinot.
:D
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2012. szeptember 17. hétfő, 22:30-kor.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Arduino a futó téma...
De mehetünk ASM fele is a megfelelő fórumban :)

Bascom nem fele. Harmada/negyede....
Lsd: 43. lecke :)
Avatar
glezmen
Bitmanipulátor
Hozzászólások: 139
Csatlakozott: 2012. augusztus 9. csütörtök, 6:00

Hozzászólás Szerző: glezmen »

na, eljutottam oda hogy elfogyott a SRAM :D
legalabbis gondolom hogy ez lehet a hiba, kicsi kodatszervezessel fut rendesen tovabb...
ha valakinek esetleg van otlete hogy lehetne a SRAM-ban meg egy kis helyet talalni (mondjuk a flash rovasara) ne tartsa magaban
(a szovegek F("") modon flash-be eroszakolasa megvolt)

addig osszehackelgetem amolyan jo kis Commodore-os modon hogy egy valtozonak a ket kulon 4 bites felet masra hasznalom, es egyeb vidamsagok :D
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Szoftveres sorosportot vedd visszább. 32->4 byte (hardwareserial.h).
Avatar
glezmen
Bitmanipulátor
Hozzászólások: 139
Csatlakozott: 2012. augusztus 9. csütörtök, 6:00

Hozzászólás Szerző: glezmen »

Robert írta:Szoftveres sorosportot vedd visszább. 32->4 byte (hardwareserial.h).
ezt lehetne kicsit szajbaragosabban? :D
a headert megtalaltam, ezt eleg beinclude-olni, vagy valami define-t is beallitsak?

egyebkent nem hasznalok soros portot (Serialt), ilyenkor is segit?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

hardwareserial.cpp:

Kód: Egész kijelölése

#if (RAMEND < 1000)
  #define RX_BUFFER_SIZE 32
#else
  #define RX_BUFFER_SIZE 128
#endif
helyett

Kód: Egész kijelölése

#if (RAMEND < 1000)
  #define RX_BUFFER_SIZE 4
#else
  #define RX_BUFFER_SIZE 16
#endif

Amúgy: Ardino alatt vagy. Nem azt fordítja a kódba amiket használsz, hanem amit úgy gondolt a készítő, hogy _kezdő_ művészek esetén az a biztos ha nem piszkál sehova. Mindent berakunk és a kódból így _biztosan_ megtalálom. Ha hibaüzenet van, akkor a kezdő nem tudja mi a baj!
Válasz küldése