Maafkan saya jika ini pertanyaan konyol, tetapi saya tidak dapat menemukan jawaban.
Saya sudah lama bertanya-tanya apakah Arduino (atau umumnya mikrokontroler lain) senang jika kodenya ringan dan tidak harus melakukan terlalu banyak operasi. Apakah kode yang memiliki terlalu banyak ifs, loop terlalu banyak, dan segala macam perhitungan rumit menghabiskan Arduino lebih cepat daripada kode yang hanya berkedip LED?
arduino-uno
hardware
code-optimization
ahmadx87
sumber
sumber
Jawaban:
Tidak, kode tidak "usang" MCU. Secara umum apa pun yang Anda lakukan kira-kira tingkat aktivitas yang sama sedang dilakukan. Bahkan
delay()
tidak banyak pekerjaan saat "idle".Ada perintah untuk membuat CPU melakukan lebih sedikit - letakkan dalam mode IDLE atau SLEEP - tetapi ini digunakan untuk menghemat daya alih-alih mengurangi "keausan" pada MCU.
Tentu saja ada hal-hal spesifik yang memiliki masa hidup terbatas dan Anda hanya dapat menggunakannya dalam jumlah terbatas - hal-hal seperti menulis ke EEPROM dan menulis ke memori Flash - jadi Anda tidak ingin melakukan itu sepanjang waktu. Selain itu, tidak, apa pun yang Anda lakukan, itu tidak membuat MCU rusak.
sumber
Ini bukan. Yah, itu mungkin perlahan aus jika Anda menjalankannya seperti 20 tahun .... (seperti kebanyakan produk fisik lainnya) Setidaknya tidak bergantung pada kompleksitas kode tetapi berapa banyak operasi penulisan dilakukan di bagian memori yang sama. Selain itu, ketika aus itu hanya akan menjadi batu bata dan itu tidak akan menjadi kode yang lebih sederhana seperti berkedip LED.
Arduino (Uno) memiliki tiga bagian memori. SRAM, FLASH, dan EEPROM. SRAM lebih seperti gerbang transistor logis. Itu tidak akan usang dengan menyimpan variabel. FLASH dan EEPROM terdiri dari gerbang mengambang. Mereka perlahan aus ketika Anda menulis data baru. Dari lembar data mikrokontroler Ateml , ia menyatakan:
Namun, memori FLASH adalah ruang untuk eksekusi kode. Operasi penulisan tidak dapat dilakukan saat Arduino berjalan. Anda hanya menulis memori FLASH ketika Anda mengunggah kode baru. Jadi akan usang ketika Anda mengunggah kode setidaknya 10.000 kali.
Jika Anda benar-benar mau, Anda dapat membuat kode khusus untuk memprogram ulang sendiri memori FLASH biasanya untuk tujuan menjaga data variabel ketika Arduino dimatikan. Ketika Anda menulis program semacam ini, program ini akan aus secara perlahan karena memori FLASH tidak memiliki banyak daya tahan untuk menulis. Itu sebabnya Anda akan disarankan untuk menggunakan EEPROM yang memiliki harapan hidup lebih lama, jika Anda ingin menyimpan data bahkan ketika Arduino dimatikan.
Singkatnya, itu akan usang dengan menulis ulang FLASH atau memori EEPROM, bukan dengan eksekusi kode.
sumber
Untuk penghobi:
Tentang satu-satunya masalah yang membatasi kehidupan terkait perangkat lunak mungkin menulis ke memori FLASH secepat Anda dapat dari dalam suatu program. Tetapi beberapa program menggunakan variabel yang perlu bertahan acara seperti mengganti baterai.
Tentang satu-satunya masalah yang membatasi kehidupan terkait perangkat keras adalah memuat lebih dari output dengan beban resistansi rendah (bola lampu pijar), beban induktif (seperti langsung mengemudi relay mekanik) untuk menyebutkan hanya dua. Tetapi pertanyaannya hanya tentang perangkat lunak.
sumber
Jawaban lainnya bagus, tetapi ada satu pengecualian kecil.
RAM feroelektrik (FRAM) adalah bentuk memori yang menggabungkan non-volatilitas flash dan EEPROM, kemampuan menulis SRAM, dan kepadatan DRAM.
Namun , operasi baca pada FRAM merusak data yang disimpan dalam FRAM, dan operasi tulis merusak konstruksi FRAM itu sendiri (dan karena data dihancurkan dengan membacanya, itu harus ditulis kembali setiap kali). Jika kode Anda terletak di FRAM maka menjalankannya akan merusak MCU pada waktunya. Tetapi mengingat FRAM memiliki daya tahan tulis dalam jutaan miliar, kecil kemungkinan MCU akan menjadi tidak dapat beroperasi karena FRAM dalam masa pakai perangkat.
Contoh MCU yang menggunakan FRAM termasuk garis MSP430FRxx TI .
sumber
Mungkin tidak ... Chip Atmel mungkin menjadi lebih hangat dari waktu ke waktu (bahkan penundaan tidak mencegah hal ini), namun jika memiliki kemungkinan untuk melepaskan panasnya, saya tidak melihat masalah. Tetapi kebanyakan hanya overclocking yang dapat menyebabkan masalah yang sangat serius, atau menggunakan Arduino di kotak yang tertutup sepenuhnya atau di lingkungan yang panas.
Sebagai perbandingan: banyak komputer berjalan selama bertahun-tahun tanpa mematikan, Atmel (chip) dalam arti tidak ada perbedaan, selama panas yang dihasilkan dapat dihilangkan.
Anda dapat membaca lebih lanjut tentang sensor panas di Atmels di sini: Sensor Suhu Internal
sumber
delay
menggunakan jumlah yang sama kekuatan pemrosesan.delay
, yang hanya memutar CPU. Ini tentu saja