Näytä sivun lähdekoodiVanhat versiotPaluulinkitTakaisin ylös Sisällysluettelo avr-gcc:n käyttökelpoistaminen Muistinkäytön ymmärtäminen Käyttämättömien funktioiden poistaminen main-funktion push/pop avr-gcc:n käyttökelpoistaminen Atmel AVR -mikrokontrollerien avoimen lähdekoodin avr-gcc-kääntäjä on ihan hyvä, mutta kääntäjässä näkyy PC-lähtöisyys ja tiukka standardien tulkinta. Tästä johtuen kääntäjä on perusasetuksiltaan lähes käyttökelvoton pienimpien tinyAVR:ien kanssa, koska kääntäjä generoi turhaa koodia ja tuhlaa turhaan rammia. Oheen kerätään sekalaisia ohjeita ja vinkkejä ohjelman koon pienentämiseksi. Muistinkäytön ymmärtäminen .text = ohjelmakoodi .data = alustetut globaalit muuttujat. Älä koskaan manuaalisesti alusta nollaksi, tuhlaat vaan turhaan flashia. .bss = alustamattomat globaalit muuttujat (alustuvat nollaksi) flash-ohjelmamuistiin menevät osat : .text + .data rammia kuluttavat osat: .data + .bss + stack (jonka koko on dynaaminen) Käyttämättömien funktioiden poistaminen Ohjelmassa olevat kutsumattomat funktiot tulevat defaulttina flash-ohjelmointitiedostoon. Niiden poistaminen automaattisesti: Kääntäjälle: -ffunction-sections Linkkerille: -gc-sections main-funktion push/pop Mikrokontrollerimaailmassa main-funktion ympärillä ei ole mitään sellaista prosessorin tilaa, joka täytyisi säilyttää, mutta tätä kääntäjä ei automaattisesti ymmärrä. Kääntäjä noudattaa tiukasti C-standardia, ja varmuuden vuoksi tallentaa kaikki mainissa käytetyt rekisterit stackiin. Tämä vie ohjelmamuistia mutta erityisesti tämä vie rammia tavalla, joka on ohjelmoijan vaikea ymmärtää/muistaa/tietää muuta kuin vilkaisemalla assembly-listausta ja näkemällä kasan täysin järjettömiä PUSHeja. Esim. Tiny25:ssä on 128 tavua rammia josta tämä ominaisuus voi syödä jopa 20%! Asia korjataan seuraavasti: int main() __attribute__((noreturn)); int main() { ... } ohjeita/avr-gcc.txt Viimeksi muutettu: 2014/12/06 06:04(ulkoinen muokkaus) Kirjaudu sisään