Standard C-s karaktertömböt vagy Arduino API féle string osztályt?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ő.
60 nap alatt Arduino #40-#41 - Kódméret csökkentés
A sztring deklarációja:
És egy példa, itt cseréltem volna a sztring közepén az '1' karaktert.
A fordításhoz az Arduino 0022-es verzióját használom
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 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
szoval a gyarilag adott fuggvenyek egyszeruen hasznalhatok, a kod is tisztabb lesz, de ha a meret fontos akkor erdemes ranezni
Ez így nem egészen tiszta....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.A fordításhoz az Arduino 0022-es verzióját használomKód: Egész kijelölése
e.print("<tr><td>1</td><td>");
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
Ja, igen...
A két sor között látszólag nincs összefüggés.
De van, a print függvényz (e.print) a következőképp definiálja az Ethernet library:
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 ?)
A két sor között látszólag nincs összefüggés.
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 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 ?)
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!
Már úgyis régen átmentünk Viringbe (Gcc?)! Mivel a legtöbben kevésnek találták az Arduinot.
Ötlet! Felejtsük el az arduinot. És tanuljunk inkább Bascomot.
Legfeljebb bekel érnünk fele akkora kódmérettel!
Már úgyis régen átmentünk Viringbe (Gcc?)! Mivel a legtöbben kevésnek találták az Arduinot.
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2012. szeptember 17. hétfő, 22:30-kor.
na, eljutottam oda hogy elfogyott a SRAM
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
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
hardwareserial.cpp:
helyett
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!
Kód: Egész kijelölése
#if (RAMEND < 1000)
#define RX_BUFFER_SIZE 32
#else
#define RX_BUFFER_SIZE 128
#endif
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!