Saya baru saja menemukan beberapa makro untuk kompiler mikrokontroler saya untuk memaksa (atau menyarankan) suatu fungsi dijalankan dari RAM.
http://processors.wiki.ti.com/index.php/Placing_functions_in_RAM
https://community.nxp.com/thread/389099
Dalam hal apa ini berharga? Mengapa saya tidak selalu mengeksekusi dari RAM jika manfaatnya hanya meningkatkan kecepatan? Apakah ini umumnya menyebabkan penarikan arus yang lebih tinggi?
microcontroller
ram
tarabyte
sumber
sumber
Jawaban:
Selain kecepatan & fitur lain yang telah disebutkan orang lain, mengeksekusi kode dari RAM dapat berguna dalam bootloader di mana Anda perlu memprogram ulang flash mikro Anda - Anda tidak dapat mengeksekusi kode dari flash yang sedang Anda hapus & pemrograman ulang.
sumber
Saya tidak melihat datasheet untuk mikro itu. Namun, sering kali dalam situasi ini mengambil dari RAM lebih cepat daripada mengambil dari flash dimana memori program diimplementasikan.
Keuntungan dari flash adalah jumlah yang besar bisa relatif murah. Oleh karena itu produsen mikrokontroler terkadang memasang banyak flash pada sebuah chip, kemudian memberikan ruang RAM yang lebih terbatas yang dapat dieksekusi oleh kode. Ini memungkinkan penyalinan rutin waktu-kritis ke dalam RAM, kemudian jalankan dari sana.
Switch kompiler yang Anda lihat mungkin berfungsi dengan linker dan menandai bagian flash yang akan disalin ke RAM oleh kode run-time kompiler yang berjalan dari reset. Implementasi yang berbeda akan bervariasi pada detailnya.
sumber
Ketika Anda ingin mengeksekusi dalam RAM karena lebih cepat, biasanya karena RAM itu adalah SRAM on-chip. Ini adalah sumber daya yang langka, yang mungkin Anda inginkan untuk data yang memerlukan akses baca / tulis.
Menggunakannya untuk kode ketika Anda sudah memiliki kode dalam ROM / flash berarti bahwa Anda memerlukan jumlah X flash dan jumlah X tambahan RAM.
Ini juga membutuhkan tahap penyalinan tambahan saat boot atau ketika Anda ingin menjalankannya, meskipun sebagian besar tidak signifikan.
Secara tradisional ini diselesaikan dengan cache instruksi, tetapi dalam mikrokontroler mungkin lebih masuk akal untuk menjaga generik SRAM internal, karena Anda tidak menggunakan mikrokontroler karena Anda menginginkan kecepatan eksekusi tercepat.
Ada juga masalah keandalan - mengeksekusi kode dalam ROM yang sebenarnya sulit untuk dimodifikasi oleh kode buggy.
sumber
Selain semua jawaban yang baik:
Karena dalam sistem tertanam, biasanya Anda tidak memiliki jumlah RAM yang diperlukan. Misalnya STM32 memiliki 32kB atau RAM dan 512kB EEPROM. Untuk dapat menjalankan seluruh program dalam RAM, Anda membutuhkan ukuran RAM yang lebih besar dari EEPROM.
sumber
Jawaban lain tampaknya tidak terlalu banyak membahas konsumsi daya, yang secara khusus Anda tanyakan.
Jawabannya adalah itu agak tergantung pada mikrokontroler, tetapi seringkali eksekusi dari RAM dapat mengurangi konsumsi daya karena memerlukan lebih sedikit energi untuk membaca instruksi dari RAM daripada dari memori flash.
Penggunaan tipikal adalah menjalankan fungsi "tidur" berdaya rendah dari RAM, dengan memori flash dimatikan. Tidak hanya konsumsi daya yang berkurang, tetapi jika mikrokontroler perlu bangun dengan cepat (misalnya sebagai respons terhadap interupsi eksternal) tidak ada penundaan saat memori flash dinyalakan kembali.
Beberapa bagian, seperti beberapa kisaran Atmel SAM, memiliki RAM daya ekstra rendah khusus yang dapat digunakan untuk tujuan ini. Ini memungkinkan sejumlah kecil kode untuk dimuat ke RAM khusus, sementara sebagian besar RAM yang tersedia dan semua memori lainnya dimatikan dan mikrokontroler memasuki mode tidur nyenyak.
sumber
Selain manfaat kecepatan potensial yang disebutkan oleh orang lain, kode RAM juga dinamis dan dapat dimodifikasi dengan cepat dengan beberapa kode khusus dalam FLASH sesuai kebutuhan.
Ini bisa sesederhana mengubah beberapa parameter atau bisa menjadi seluruh rutinitas pawang yang diunggah dari jarak jauh.
sumber
Menjalankan kode dari RAM secara signifikan lebih cepat daripada mengeksekusi dari memori flash. Sebagian besar CPU sangat dioptimalkan untuk akses RAM tercepat yang mungkin, dan bahkan memori flash tercepat hanya mencapai sebagian kecil dari kecepatan RAM.
Namun perlu diingat bahwa memindahkan kode dari flash ke RAM juga membutuhkan waktu. Jika kode dieksekusi hanya sekali, Anda hanya perlu membacanya sekali, dan karena itu Anda sebenarnya akan kehilangan waktu untuk menyalinnya ke dalam RAM terlebih dahulu alih-alih mengeksekusi secara langsung. Jika kode dieksekusi sesekali (jadi menyalinnya ke dalam RAM akan meningkatkan eksekusi pada kali kedua dipanggil), tetapi sistem ini umumnya menganggur, maka Anda akan mengeksekusi kode itu lebih cepat dengan menyalinnya ke dalam RAM, tetapi tidak ada yang peduli, karena sistem memiliki cukup waktu untuk dihabiskan.
Jadi optimasi seperti itu hanya sepadan dengan usaha, jika kode dieksekusi sering, dan Anda telah mengukurnya menjadi titik tersedak sistem.
Di sisi lain RAM perlu secara aktif menyimpan data yang tersimpan, sedangkan memori flash tidak, sehingga konsumsi daya total meningkat, jika RAM perlu tetap aktif. Namun ini hanya relevan, jika RAM tidak digunakan sama sekali, tetapi sebagian besar sistem modern akan - dengan satu atau lain cara - menggunakan RAM yang tersedia dan karenanya tetap aktif.
sumber
Ada dua alasan yang sangat umum untuk mengeksekusi kode dari RAM:
Beberapa mikroprosesor tidak dapat mengeksekusi dari flash selama pemrograman flash - meskipun banyak yang bisa melakukan ini selama kode berada di blok yang berbeda dari flash yang sedang ditulis. Menulis Flash mungkin memprogram ulang aplikasi (boot-loader case), atau ketika flash digunakan untuk menyimpan info program yang tidak mudah menguap (konfigurasi, kalibrasi, dll.)
Pada banyak mikroprosesor, RAM jauh lebih cepat daripada flash. Untuk perangkat ini, rutin kecil kecepatan kritis dapat dijalankan dari RAM, meskipun biasanya pasokan RAM jauh lebih singkat daripada flash.
sumber
Penggunaan lain untuk RAM hanya mengeksekusi keamanan terhadap bitflip acak. Kami menggunakan model ini pada cubesat kecil kami karena papan komputer utama memiliki ram ECC yang mentoleransi bitflip karena radiasi. Seluruh OS dimuat ke ram sebagai ramdisk pada startup berjalan sepenuhnya dalam lingkungan ECC.
Flash tidak dilindungi ECC (standar dari kartu micro SD), namun kami memiliki metode lain untuk memeriksa kerusakan (beberapa gambar, checksum, dll.)
sumber