Apakah ada konstanta preprosesor untuk ukuran memori

13

Saya ingin kompilasi saya untuk mengecualikan beberapa kode tergantung pada ruang flash / program yang tersedia. Untuk digunakan dalam kode demo perpustakaan yang saya dukung. Sedangkan solusi saya saat ini adalah menggunakan # jika jenis prosesor. Tetapi saya ingin menjadi lebih umum dan tidak harus menentukan semua berbagai chip. Alih-alih akan lebih baik jika ada konstanta pra-prosesor yang menyatakan ukuran yang tersedia.

Di mana saya tidak cukup fasih dalam gcc dan atau avr-gcc saya mungkin berharap untuk menemukan beberapa konstanta yang sama dengan yang mendefinisikan awal dan akhir heap.

Contoh kasus. Apakah itu baik UNO dan Leo memiliki 32K Flash. Tetapi perpustakaan inti Leo menggunakan 4K untuk dukungan USB, sehingga hanya tersedia 28K. Demo Library saya hampir mencapai maksimum pada UNO dan saya ingin memangkas secara otomatis berdasarkan ruang program yang tersedia.

mpflaga
sumber
Saya telah melihat program yang melakukan ini, tetapi saya tidak dapat menemukannya
TheDoctor

Jawaban:

10

Temukan io__.hfile untuk mikrokontroler Anda, di Linux itu terletak di /usr/lib/avr/include/avr, pada Windows itu akan berada di lokasi yang agak mirip.

Gulir ke bawah ke bagian yang mengatakan /* Constants */. Ada beberapa makro menarik yang didefinisikan di sana, FLASHENDyang harus Anda minati. Anda dapat menggunakannya misalnya sebagai berikut:

#if FLASHEND > 0x8000
/* Include some extra code when sufficient flash is available. */

#endif
jippie
sumber