Arduino koodin enimmäiskoko

Tuli pikku probleemi.

Näyttäisi siltä, että koodini on paisunut liikaa…

HEX-tiedosto alle 65k menee vielä läpi kun sen siirtää
Arduinoon (tai mulla on pelkkä 328 lankulla), mutta 68k
flashaus ei enää onnistu. Onko koodi nyt liian suuri vai
onko vika jossain muualla? Runkokoodi on aika kompakti,
mutta kirjastoja on käytössä joitakin. Miten optimoida?
Onkohan dudessa jotain vipusia tai IDE 1.0.3:ssa?

avrdude: 24478 bytes of flash written
avrdude: verifying flash memory against SleepTest2Working.cpp.hex:
avrdude: load data flash data from input file SleepTest2Working.cpp.hex:
avrdude: input file SleepTest2Working.cpp.hex auto detected as Intel Hex
avrdude: input file SleepTest2Working.cpp.hex contains 24478 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 12.92s



avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x2298
         0x8f != 0x80
avrdude: verification error; content mismatch

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Vastaavasti hiukka pienempi menee läpi:

[code]
avrdude: erasing chip
avrdude: reading input file ‚ÄúSleepTest2Working.cpp.hex‚ÄĚ
avrdude: input file SleepTest2Working.cpp.hex auto detected as Intel Hex
avrdude: writing flash (23604 bytes):

Writing | ################################################## | 100% 14.48s

avrdude: 23604 bytes of flash written
avrdude: verifying flash memory against SleepTest2Working.cpp.hex:
avrdude: load data flash data from input file SleepTest2Working.cpp.hex:
avrdude: input file SleepTest2Working.cpp.hex auto detected as Intel Hex
avrdude: input file SleepTest2Working.cpp.hex contains 23604 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 12.47s

avrdude: verifying …
avrdude: 23604 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done. Thank you.[/code]

Periaatteessa buildin raportista pitäs näkyä koko mihin se on sen saanut tungettua. Jos tuo koko on piirin kokoa (mahdollisesti vielä bootloader vie tilaa) isompi, niin se ei tule mahtumaan.

Jos noin on, niin sitten vain optimoimaan.

tod.näk ei edes lataa koodia atmelliin jos on liian iso.
tsekkaa sieltä boards.txt tiedostosta lautasi kohdalta mikä on ladattavissa oleva maximi koodin koko. seon kohdassa lauta.upload.max.size=xxxxxx tms.

verification error tarkoittaa että luettu merkki on eri kuin kirjoitettu , eli bitit on jostain syystä mennyt poikittain ko muistipaikassa

Kiitti kommenteista.

Boards.txt on 30702 tms., ihan niin kuin pitääkin.

Ja Limba, ei tosiaan lataa mitään, jos tulee toi virheilmoitus.

Ajatus optimoinnista kypsyttää etukäteen, käyttämällä PROGMEM
-juttuja saisi varmaan supistettua koodia, mutta kun en ole tota
käytellyt eikä nyt olisi aikaa alkaa harjoitella.

Perkules… voikohan precompilerille antaa jotain asetuksia,
ihan kun olisin jossain joskus nähnyt jotain :astonished:

Edit: poistin yhden do-while -rakenteen, ja nyt koodi menee
lankulle, mutta varmaan ihan nippa nappa, joten hyvät neuvot
ovat yhä tarpeen.

Gcc:lle pitäisi sanoa -Os Silloin kääntäjä optimoi pieneksi

PROGMEM laittaa flashille jota et oikeastaan halunnut kai. Ennemmin haluat tunkea isoja vakiodatoja EEPROMille (sinin ja kosinin hakutaulut yms.)

Voisiko myös bootsectorsize fuse vaikuttaa lataukseen?

Oma 328 nauttii kauniisti 31 * 2^10 + n bittisestä imagesta, tosin se ei ole arduino, eikä C:llä koodattu laite.

Kokeilepa lukea flashi siltä kontrollerilta. Antako se koko 32 kiloa pihalle. Pari flashia porsinut itsellä noista 8 sarjan kontrollereista jo ihan pienen käytön jälkeen.

Nuo jutut nyt tulee ensimmäisenä mieleen.