Optimasi
Pemrograman tingkat rendah untuk sistem tertanam sangat berbeda dari pemrograman untuk perangkat tujuan umum, seperti komputer dan ponsel. Efisiensi (dalam hal kecepatan dan ruang) jauh lebih penting karena sumber daya berada pada premium. Itu berarti hal pertama yang harus dilakukan jika Anda kehabisan ruang adalah untuk melihat bagian mana dari kode Anda yang dapat Anda optimalkan.
Dalam hal mengurangi penggunaan ruang program (Flash), ukuran kode bisa sangat sulit untuk dioptimalkan jika Anda tidak berpengalaman, atau jika Anda lebih terbiasa pemrograman untuk komputer desktop yang tidak cenderung membutuhkan keterampilan itu. Sayangnya, tidak ada pendekatan 'peluru ajaib' yang akan bekerja untuk semua situasi, meskipun akan membantu jika Anda mempertimbangkan dengan serius apa yang sebenarnya perlu dimiliki sketsa Anda . Jika fitur tidak diperlukan, keluarkan.
Terkadang juga membantu untuk mengidentifikasi di mana beberapa bagian kode Anda sama (atau sangat mirip). Anda mungkin dapat menyingkatnya menjadi fungsi yang dapat digunakan kembali yang dapat dipanggil dari berbagai tempat. Namun, perlu diketahui bahwa kadang-kadang mencoba membuat kode terlalu dapat digunakan kembali akhirnya membuatnya menjadi lebih bertele-tele. Ini keseimbangan yang sulit untuk dipukul yang cenderung disertai dengan latihan. Menghabiskan waktu untuk melihat bagaimana perubahan kode mempengaruhi output kompiler dapat membantu.
Optimalisasi data Runtime (SRAM) cenderung sedikit lebih mudah ketika Anda terbiasa. Jebakan yang sangat umum untuk programmer pemula menggunakan terlalu banyak data global. Apa pun yang dinyatakan pada lingkup global akan ada selama sketsa seumur hidup, dan itu tidak selalu diperlukan. Jika variabel hanya digunakan di dalam satu fungsi, dan itu tidak perlu bertahan di antara panggilan, maka jadikan itu variabel lokal. Jika suatu nilai perlu dibagi di antara berbagai fungsi, pertimbangkan apakah Anda dapat meneruskannya sebagai parameter alih-alih menjadikannya global. Dengan begitu Anda hanya akan menggunakan SRAM untuk variabel-variabel tersebut saat Anda benar-benar membutuhkannya.
Pembunuh lain untuk penggunaan SRAM adalah pemrosesan teks (misalnya menggunakan String
kelas). Secara umum, Anda harus menghindari melakukan operasi String jika memungkinkan. Mereka adalah babi memori besar. Misalnya, jika Anda mengeluarkan banyak teks ke serial, gunakan beberapa panggilan untuk Serial.print()
bukannya menggunakan penggabungan string. Coba juga untuk mengurangi jumlah string literal dalam kode Anda jika memungkinkan.
Hindari rekursi jika memungkinkan juga. Setiap kali panggilan rekursif dilakukan, dibutuhkan tingkat stack yang lebih dalam. Refactor fungsi rekursif Anda untuk menjadi iteratif sebagai gantinya.
Gunakan EEPROM
EEPROM digunakan untuk penyimpanan jangka panjang hal-hal yang hanya berubah sesekali. Jika Anda perlu menggunakan daftar besar atau mencari tabel data tetap, maka pertimbangkan untuk menyimpannya di EEPROM terlebih dahulu, dan hanya menarik apa yang Anda butuhkan saat diperlukan.
Jelas EEPROM cukup terbatas dalam ukuran dan kecepatan, dan memiliki jumlah siklus tulis yang terbatas. Ini bukan solusi yang bagus untuk keterbatasan data, tetapi mungkin cukup untuk meringankan beban pada Flash atau SRAM. Sangat mungkin juga untuk berinteraksi dengan penyimpanan eksternal yang serupa, seperti kartu SD.
Ekspansi
Jika Anda telah kehabisan semua opsi lain, ekspansi mungkin menjadi suatu kemungkinan. Sayangnya, memperluas memori Flash untuk menambah ruang program tidak dimungkinkan. Namun, adalah mungkin untuk memperluas SRAM. Ini berarti Anda mungkin dapat memperbaiki sketsa Anda untuk mengurangi ukuran kode dengan mengorbankan peningkatan ukuran data.
Mendapatkan lebih banyak SRAM sebenarnya cukup mudah. Salah satu opsi adalah menggunakan satu atau lebih chip 23K256 . Mereka diakses melalui SPI, dan ada perpustakaan SpiRAM untuk membantu Anda menggunakannya. Berhati-hatilah karena mereka beroperasi pada 3.3V, bukan 5V!
Jika Anda menggunakan Mega, Anda bisa mendapatkan pelindung ekspansi SRAM dari Lagrangian Point atau Rugged Circuits .