Чи змучене Arduino занадто велике виконання?

Вибачте, якщо це дурне питання, але я не знайшов відповіді.

Я цікавлюся деякий час, чи Arduino (або взагалі будь-який інший мікроконтролер) отримує задоволення, якщо код світлий і він не повинен виконувати занадто багато операцій. Чи є код, який має занадто багато ifs, занадто багато циклів і всілякі складні розрахунки, зношуються Arduino швидше, ніж код, який просто блимає світлодіодом?

12
Також див. Пов'язані питання . . . .
додано Автор Martin C. Martin, джерело

5 Відповіді

Ні, код не "зношується" з MCU. Загалом, незалежно від того, що ви робите, виконується приблизно однаковий рівень активності. Навіть delay() робить багато роботи, поки вона "холосте".

Є команди, які роблять CPU менше - розміщують його в режимі IDLE або SLEEP - але вони використовуються для економії енергії, а не для зменшення "зносу" на MCU.

Звичайно, існують певні речі, які мають обмежений термін служби, і ви можете використовувати їх лише обмежену кількість разів - такі, як записування в EEPROM і записування в флеш-пам'ять - так що ви не хочете робити це весь час. Крім цього, ні, незалежно від того, що ви робите це не носити MCU.

20
додано
Дякуємо за відповідь. Тепер я можу відкинутись і написати коди настільки складно, як хочу, і не турбуватися про життя мого Arduino! Але чи це теж для постійного взаємодії з зовнішніми компонентами? Читання датчиків, SPI зв'язку і так далі?
додано Автор Marcin, джерело
@Mast Це робить різницю лише тоді, коли частини системи фактично вимикаються, коли вони не використовуються - це дійсно досить складна річ, особливо, беручи до уваги затримку (це вимагає деякого часу для включення живлення - наприклад, Intel Skylake займає близько 70 тактових циклів для включення всього AVX). Перевірка того, що допомагає, досить проста - просто виміряти, скільки енергії споживається; це дуже багато тепла, яке генерується. Також розглянемо повне використання енергії, а не тільки енергію - напр. повільніші коди забирають більше часу, а економія енергії може бути менш ефективною, чим швидше кодувати завдання.
додано Автор Mauricio, джерело
Ви можете дуже швидко зруйнувати ваш EEPROM, якщо ви пишете йому агресивно. Щоб полегшити життя, AVRC надає виділені оновлення команди, які виконують лише запис, якщо змінено значення, яке має багато випадків використання (наприклад, регулярно написаний, але рідко змінений код стану), але не є срібною кулею. Я вважаю, що EEPROM виходить з ладу на рівні байта або слова, тому ви можете певною мірою обійти це, якщо це необхідно.
додано Автор metadaddy, джерело
Але весь напівпровідниковий вік, чи не так? Гарячі ін'єкції носія і нестабільність температури ухилу є механізмами, які я пам'ятаю. Звичайно, це займе багато років.
додано Автор echoblaze, джерело
@MV. Так, але те, що ви працюєте на мікроконтролері насправді не впливає на нього. Що б ви не робили, ви керуєте процесором на (приблизно) рівні. Ви використовуєте все це (дуже багато) весь час.
додано Автор Majenko, джерело
Тільки дуже маленька крихітна кількість. Навіть коли "нічого" не робиться, вона працює і обробляється.
додано Автор Majenko, джерело
Чи не впливовий код буде впливати на генеровану теплоту? Гарячі компоненти можуть зношуватися швидше.
додано Автор Chong Sun, джерело

Це не. Ну, це може повільно зношуватися, якщо ви працюєте, як 20 років .... (як і більшість інших фізичних продуктів)? Принаймні, він не залежить від складності коду, але скільки операцій написання виконується в тій же самій секції пам'яті. Більш того, коли він зношується, він буде просто замурований, і він не стане більш простим кодом, як блимання світлодіода.

Arduino (Uno) має три частини пам'яті. SRAM, FLASH і EEPROM. SRAM більше схожий на логічний транзистор. Зберігання змінних не буде зношуватися. FLASH і EEPROM складаються з плаваючих воріт. Вони повільно зношуються, коли ви пишете нові дані. З даних мікроконтролера Ateml зазначено:

Флеш-пам'ять має витривалість принаймні 10 000 циклів запису/стирання. (З глави 8.2)

     

EEPROM має витривалість принаймні 100 000 циклів запису/стирання. (З глави 8.4)

Однак, FLASH пам'ять - це простір для виконання коду. Операція запису не виконується під час запуску Arduino. Ви записуєте FLASH-пам'ять лише при завантаженні нового коду. Таким чином, він буде зношуватися, коли ви завантажуєте код щонайменше 10000 разів.

Якщо ви дійсно хочете, ви можете зробити спеціальний код для самоперепрограмування FLASH пам'яті, як правило, з метою збереження змінних даних, коли Arduino вимкнено. Коли ви пишете цю програму, вона буде зношуватися повільно, тому що FLASH пам'ять не має великої витривалості. Ось чому вам буде запропоновано використовувати EEPROM, який має набагато більшу тривалість життя, якщо ви хочете зберегти дані, навіть коли Arduino вимкнено.

Підводячи підсумок, він буде зношуватися шляхом перезапису FLASH або EEPROM пам'яті, а не за допомогою виконання коду.

6
додано

Для любителів:

Про єдину проблему, пов'язану з програмним забезпеченням, що обмежує життя, може бути записування в FLASH-пам'ять так швидко, як можна зсередини програми. Але деякі програми використовують змінні, які необхідні для виживання подій, таких як зміна батарей.

Про єдину проблему, пов'язану з обмеженням життя, пов'язана з завантаженням виходів з низькими навантажувальними навантаженнями (лампи розжарювання), індуктивними навантаженнями (наприклад, безпосередньо механічними реле), щоб назвати лише два. Але йдеться лише про програмне забезпечення.

5
додано

... (або взагалі будь-який інший мікроконтролер) ...

Інші відповіді великі, але є один невеликий виняток.

Ferroelectric RAM (FRAM) is a form of memory that combines the non-volatility of flash and EEPROM, the writability of SRAM, and the density of DRAM.

However, read operations on FRAM are destructive to the data stored in the FRAM, and write operations are destructive to the FRAM construction itself (and since the data is destroyed by reading it, it must be written back each time). If your code is located in FRAM then running it will wear down the MCU in time. But given that FRAM has a write endurance in the millions of billions it is unlikely that the MCU will become inoperable due to FRAM in the lifetime of the device.

Прикладами мікроконтролерів, що використовують FRAM, є Лінія TSP MSP430FRxx .

4
додано
Загалом, якщо є FRAM, іншої пам'яті немає. Навіть не спалах.
додано Автор Majenko, джерело

Напевно, не ... Мікросхема Atmel може стати теплішою з часом (навіть затримка не заважає цьому), однак, якщо у неї є можливість випустити тепло, я не бачу проблеми. Але в основному тільки оверклокінг може викликати дійсно серйозні проблеми, або використання Arduino в повністю закритій коробці або в гарячому середовищі.

Для порівняння: багато комп'ютерів працюють упродовж багатьох років без вимикання, Atmel (чіп) в цьому сенсі не має ніякої різниці, доки генерований тепло може бути звільнений.

You can read more about a heat sensor in Atmels here: Internal Temperature Sensor

3
додано
Існує різниця - більшість комп'ютерів сьогодні мають тонни функцій економії енергії; багато речей вимикається, коли не потрібно, і це відбувається досить автоматично. У Arduino також є способи зменшення споживання електроенергії, але ви повинні використовувати їх явно. Якщо вам потрібно щось, що вимикається більшу частину часу, learn.sparkfun. com/tutorials/reduction-arduino-power-consumpt & zwnj; ion - це чудовий спосіб почати. Зокрема, низький рівень енергоспоживання знижує споживання електроенергії приблизно в тисячу разів, на відміну від затримки , який просто обертає процесор. Це має свою вартість, звичайно :)
додано Автор Mauricio, джерело
Те, як Arduino реалізує затримку, постійно перевіряє, чи пройшло достатньо часу. Таким чином, запуск програми або наявність затримки використовує однакову кількість обчислювальної потужності.
додано Автор Al., джерело
Я буду оновлювати (видалити) цю частину ... спасибі!
додано Автор Pat, джерело