Apakah Arduino menjadi lelah karena terlalu banyak eksekusi perintah?

12

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?

ahmadx87
sumber
Lihat juga pertanyaan terkait . . . .
James Waldby - jwpat7

Jawaban:

20

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.

Majenko
sumber
2
Tetapi semua usia semikonduktor, bukan? injeksi hot carrier dan ketidakstabilan suhu bias adalah mekanisme yang saya ingat. Tentu saja akan memakan waktu bertahun-tahun.
MV.
5
@MV. Ya, tetapi apa yang Anda jalankan di mikrokontroler tidak benar-benar memengaruhinya. Apa pun yang Anda lakukan, Anda menjalankan CPU pada tingkat (kira-kira) yang sama. Anda menggunakan semua itu (cukup banyak) sepanjang waktu.
Majenko
1
Bukankah kode tidak langsung mempengaruhi panas yang dihasilkan? Komponen panas bisa cepat rusak.
Tiang
3
Hanya jumlah yang sangat kecil. Bahkan ketika melakukan 'tidak ada' itu bekerja keras dan pemrosesan.
Majenko
Terimakasih atas balasan anda. Sekarang saya dapat bersandar dan menulis kode serumit yang saya inginkan dan tidak khawatir tentang masa hidup Arduino saya! Tetapi apakah ini juga merupakan kasus untuk terus berinteraksi dengan komponen eksternal? Membaca sensor, komunikasi SPI dan sebagainya?
ahmadx87
6

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:

Memori Flash memiliki daya tahan setidaknya 10.000 siklus tulis / hapus. (Dari Bab 8.2)

EEPROM memiliki daya tahan setidaknya 100.000 siklus tulis / hapus. (Dari Bab 8.4)

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.

Bumsik Kim
sumber
6

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.

st2000
sumber
5

... (atau umumnya mikrokontroler lainnya) ...

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 .

Ignacio Vazquez-Abrams
sumber
1
Secara umum jika ada FRAM tidak ada memori lain. Bahkan tidak berkedip.
Majenko
3

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

Michel Keijzers
sumber
2
Cara Arduino menerapkan penundaan, adalah dengan terus-menerus memeriksa apakah cukup waktu telah berlalu. Jadi menjalankan program, atau delaymenggunakan jumlah yang sama kekuatan pemrosesan.
Gerben
Saya akan memperbarui (menghapus) bagian itu ... terima kasih!
Michel Keijzers
Ada perbedaan - kebanyakan komputer saat ini memiliki banyak fitur hemat daya; banyak hal mematikan ketika tidak diperlukan, dan ini terjadi secara otomatis. Arduino juga memiliki cara untuk mengurangi penggunaan daya, tetapi Anda harus menggunakannya secara eksplisit. Jika Anda memerlukan sesuatu yang hampir selalu mati, pelajari.sparkfun.com/tutorials/reducing-arduino-power-consumption adalah cara yang bagus untuk memulai. Secara khusus, sleep daya rendah menurunkan konsumsi daya sekitar seribu kali lipat - tidak seperti delay, yang hanya memutar CPU. Ini tentu saja
biayanya