Alokasi Memori RAM ESP32 dan Fungsinya

Posted on

ESP32 memiliki beberapa jenis memori dan pemetaan memori yang fleksibel. Pada artikel ini kita akan belajar khusus Alokasi Memori RAM pada chip ESP32.

Adapun berdasarkan dokumentasi dari Espressif, bahwa ESP32 memiliki alokasi memori sebagai berikut:

SRAM pada ESP32 memiliki dua bagian, Data RAM (DRAM) dan Instruction RAM (IRAM).

DRAM

DRAM digunakan untuk menyimpan data dinamis, seperti variabel dan struktur data yang digunakan oleh program yang berjalan. ESP32 memiliki kapasitas Data RAM yaitu 320 KB DRAM.

Namun, karena keterbatasan teknis, penggunaan DRAM yang dialokasikan secara statis maksimum adalah 160 KB. Sisa 160 KB lagi agar dapat menggunakan DRAM 320 KB secara penuh hanya dapat dialokasikan pada waktu proses sebagai heap.

Heap adalah area memori dinamis yang digunakan untuk alokasi memori selama runtime program. Alokasi memori dinamis dapat dilakukan dengan pemanggilan fungsi malloc() dan free(). Baca disini.

IRAM

IRAM digunakan untuk menyimpan instruksi program yang sedang dieksekusi. ESP32 memiliki Instruksi RAM yaitu 200 KB IRAM) pada ESP32.

Segmen Memori

Berikut adalah beberapa segmen memori penting pada ESP32:

  1. dram0_0_seg
    Wilayah memori ini adalah wilayah utama untuk alokasi memori dinamis (heap) pada ESP32. Ini digunakan untuk menyimpan data yang dialokasikan secara dinamis selama runtime program.
  2. dram0_1_seg
    Ini adalah wilayah memori tambahan untuk alokasi memori dinamis (heap) pada ESP32. Wilayah ini memberikan ruang tambahan untuk alokasi memori dinamis ketika dram0_0_seg mencapai batasnya.
  3. irom0_0_seg
    Ini adalah wilayah memori yang digunakan untuk menyimpan kode program yang dijalankan dari flash ROM. Flash ROM pada ESP32 berfungsi sebagai penyimpanan utama untuk program yang dieksekusi.
  4. irom1_0_seg
    Ini adalah wilayah memori tambahan untuk penyimpanan kode program dari flash ROM. Jika program Anda sangat besar, wilayah ini dapat digunakan untuk menyimpan bagian kode tambahan yang tidak muat dalam wilayah irom0_0_seg.
  5. rtc_data_slow
    Ini adalah wilayah memori yang digunakan untuk menyimpan data yang membutuhkan retensi selama penghentian daya (power-off). Data yang disimpan di sini tetap ada bahkan ketika ESP32 tidak memiliki pasokan daya.
  6. rtc_slow
    Ini adalah wilayah memori tambahan untuk penyimpanan data yang membutuhkan retensi selama penghentian daya. Wilayah ini juga digunakan untuk menyimpan konfigurasi RTC (Real-Time Clock) dan variabel lain yang memerlukan retensi.

Penting untuk memahami penggunaan wilayah memori ini dan batas kapasitas masing-masing wilayah saat merancang dan mengembangkan program ESP32. Memastikan penggunaan memori yang efisien dan memperhatikan batasan kapasitas dapat membantu mencegah masalah seperti “region overflow” yang.