Muiden täällä olevien vastausten erinomaisten ehdotusten lisäksi haluan kommentoida, että voi olla valtava ero siinä, kuinka paljon kääntäjät (ja linkkerit) voivat optimoida koodia.
Olen työskennellyt yrityksessä muutama vuosi sitten, jossa tuote käytti ATMega8: ta. Kun saavuin paikalle, tällä tuotteella oli kolme erilaista lähdekoodirakennetta, jotka antoivat erilliset ominaisuudet eri tuotekokoonpanoille. Lähdekoodi on koottu käyttäen edullista C-kääntäjää, ja jokainen koodijoukko mahtui tuskin laitteen FLASH-muistin 8K tavuun.
Pyysin yrityksen ostamaan huippuluokan kääntäjän AVR-yhteisössä tunnetulta yritykseltä. Sitten menin työskentelemään ohjelmistojen lähdekoodien parissa ja asetin kääntäjävaihtoehdot optimointia varten.
Kun olen valmis, kaikki tuotevaihtoehdot mahtuvat yhteen kuvaan, joka on alle 8 kt tavua. Itse asiassa minulle oli tarpeeksi tilaa lisätä vain lähetettävän ohjelmiston UART koodiin, jotta ohjelmisto voisi levittää sisäisiä tietoja, joita käytettiin tuotteen parametrien kalibrointiin. UART-lähtö laukaistiin, kun 28 V-signaali syötettiin yhteen A / D-kanavasta jännitteenjakajan kautta. Liipaisinta tarvittiin, koska ohjelmiston UART-lähtö käytti GPIO: ta, joka oli normaalisti signaali, joka oli tuotteen lähtö.