Чи затягується Arduino через занадто велике виконання команд?


12

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

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


Також дивіться пов'язані запитання . . . .
Джеймс Уолдбі - jwpat7

Відповіді:


20

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

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

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


2
Але всі напівпровідники старіють, чи не так? гаряче впорскування носіїв та нестабільність температури зміщення - це механізми, які я пам'ятаю. Звичайно, це зайняло б багато-багато років.
МВ.

5
@MV. Так, але те, що ви працюєте на мікроконтролері, на це не впливає. Що б ви не робили, ви запускаєте процесор на (приблизно) на одному рівні. Ви все це використовуєте (в значній мірі).
Majenko

1
Чи не вплине код опосередковано на вироблене тепло? Гарячі компоненти можуть швидше зношуватися.
Щогли

3
Лише дуже крихітна кількість. Навіть коли ви нічого не робите, вона наполегливо працює і обробляє.
Majenko

Дякую за вашу відповідь Тепер я можу нахилитися назад і писати коди настільки складні, як мені хочеться, і не хвилюватися за тривалість життя мого Arduino! Але чи так це постійно взаємодіяти із зовнішніми компонентами? Датчики читання, SPI-зв’язок тощо?
ahmadx87

6

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

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

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

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

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

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

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


6

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

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

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


5

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

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

Ферроелектрична ОЗУ (FRAM) - це форма пам'яті, що поєднує в собі енергонезалежність спалаху та EEPROM, записуваність SRAM та щільність DRAM.

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

Приклади MCU, які використовують FRAM, включають лінію MSP430FRxx TI .


1
Загалом, якщо є FRAM, іншої пам'яті немає. Навіть не спалаху.
Majenko

3

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

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

Детальніше про датчик тепла в Atmels ви можете прочитати тут: Внутрішній датчик температури


2
Те, як Arduino реалізує затримку, - постійно перевіряючи, чи минуло достатньо часу. Отже, запуск програми або delayвикористання однакової кількості потужності обробки.
Гербен

Я оновлю (видалю) цю частину ... дякую!
Мішель Кейзерс

Є різниця - більшість комп’ютерів сьогодні мають тонни енергозберігаючих функцій; багато речей вимикаються, коли не потрібно, і це відбувається майже автоматично. У Arduino також є способи зменшити споживання енергії, але використовувати їх потрібно явно. Якщо вам потрібно щось, що вимикається більшу частину часу, Learn.sparkfun.com/tutorials/reducing-arduino-power-consumption - це чудовий спосіб почати. Зокрема, сон з низькою потужністю зменшує споживання електроенергії приблизно в тисячу разів - на відміну від того delay, що просто обертає процесор. Це, звичайно, має свою вартість :)
Луаан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.