Arduino изнашивается слишком много выполнения команды?

12

Извините, если это глупый вопрос, но я не смог найти ответ.

Некоторое время я задавался вопросом, будет ли Arduino (или вообще любой другой микроконтроллер) счастливым, если код легок и ему не нужно выполнять слишком много операций. Разве код, который имеет слишком много if, слишком много циклов и все виды сложных вычислений, изнашивает Arduino раньше, чем код, который просто мигает светодиодом?

ahmadx87
источник
Также смотрите связанные вопросы . , , ,
Джеймс Уолдби - jwpat7

Ответы:

20

Нет, код не «изнашивает» MCU. В целом, независимо от того, что вы делаете, выполняется примерно один и тот же уровень активности. Даже delay()делает много работы, пока он "на холостом ходу".

Есть команды, чтобы заставить процессор делать меньше - перевести его в режим IDLE или SLEEP - но они используются для экономии энергии, а не для уменьшения «износа» MCU.

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

Маженко
источник
2
Но все полупроводниковые возрасты, не так ли? Механизм впрыска горячего носителя и нестабильность температуры смещения являются механизмами, которые я помню. Конечно, это займет много-много лет.
М.В.
5
@MV. Да, но то, что вы запускаете на микроконтроллере, действительно не влияет на это. Что бы вы ни делали, вы запускаете процессор примерно на одном уровне. Вы используете все это (в значительной степени) все время.
Майенко
1
Не будет ли код косвенно влиять на генерируемое тепло? Горячие компоненты могут быстрее изнашиваться.
Мачта
3
Только очень маленькое количество. Даже когда ничего не делаешь, он усердно работает и обрабатывает.
Майенко
Спасибо за ваш ответ. Теперь я могу откинуться назад и написать настолько сложные коды, насколько захочу, и не беспокоиться о продолжительности жизни моего Arduino! Но так ли это для постоянного взаимодействия с внешними компонентами? Чтение датчиков, связь SPI и так далее?
ahmadx87
6

Это не. Что ж, он может медленно изнашиваться, если вы управляете им как 20 лет .... (как и большинство других физических продуктов)? По крайней мере, это зависит не от сложности кода, а от того, сколько операций записи выполняется в одном и том же разделе памяти. Более того, когда он изнашивается, он просто становится кирпичным и не становится более простым кодом, таким как мигание светодиода.

Arduino (Uno) имеет три части памяти. SRAM, FLASH и EEPROM. SRAM больше похож на логический транзисторный вентиль. Это не изнашивается, храня переменные. FLASH и EEPROM состоят из плавающих ворот. Они медленно изнашиваются, когда вы пишете новые данные. Из таблицы данных микроконтроллера Ateml говорится:

Флэш-память выдерживает не менее 10 000 циклов записи / стирания. (Из главы 8.2)

ЭСППЗУ выдерживает не менее 100 000 циклов записи / стирания. (Из главы 8.4)

Тем не менее, флэш-память является пространством для выполнения кода. Операция записи не выполняется во время работы Arduino. Вы пишете флэш-память только при загрузке нового кода. Таким образом, он изнашивается, когда вы загружаете код по крайней мере 10000 раз.

Если вы действительно хотите, вы можете сделать специальный код для самопрограммирования флэш-памяти, обычно с целью сохранения переменных данных, когда Arduino выключен. Когда вы пишете такую ​​программу, она будет медленно изнашиваться, потому что флэш-память не имеет большой выносливости при записи. Вот почему вам будет предложено использовать EEPROM с гораздо большей продолжительностью жизни, если вы хотите сохранить данные, даже когда Arduino выключен.

Подводя итог, он будет изнашиваться при перезаписи памяти FLASH или EEPROM, а не при выполнении кода.

Бумсик Ким
источник
6

Для любителей:

Единственной проблемой, связанной с программным обеспечением, ограничивающим жизнь, может быть запись во флэш-память так быстро, как вы можете изнутри программы. Но немногие программы используют переменные, которые должны выживать при таких событиях, как замена батарей.

Единственная проблема, связанная с ограничением срока службы оборудования, - это чрезмерная нагрузка на выходы нагрузками с низким сопротивлением (лампочки накаливания), индуктивными нагрузками (например, механическими реле с прямым приводом). Но вопрос только в программном обеспечении.

st2000
источник
5

... (или вообще любой другой микроконтроллер) ...

Другие ответы великолепны, но есть одно маленькое исключение.

Сегнетоэлектрическое ОЗУ (FRAM) - это форма памяти, которая сочетает в себе энергонезависимость флэш-памяти и EEPROM, возможность записи SRAM и плотность DRAM.

Однако операции чтения в FRAM разрушительны для данных, хранящихся в FRAM, а операции записи разрушительны для самой конструкции FRAM (и поскольку данные уничтожаются при чтении, они должны каждый раз записываться обратно). Если ваш код находится во FRAM, то при его запуске MCU со временем изнашивается. Но, учитывая, что FRAM обладает стойкостью записи в миллионах миллиардов, маловероятно, что MCU выйдет из строя из-за FRAM в течение срока службы устройства.

Примеры MCU, которые используют FRAM, включают в себя линию MSP430FRxx от TI .

Игнасио Васкес-Абрамс
источник
1
В общем, если есть FRAM, другой памяти нет. Даже не вспышка.
Майенко
3

Вероятно, нет ... Микросхема Atmel со временем может нагреваться (даже задержка не помешает этому), однако, если у нее есть возможность выпустить тепло, я не вижу проблем. Но в основном только разгон может вызвать действительно серьезные проблемы, или использование Arduino в полностью закрытой коробке или в жаркой среде.

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

Вы можете прочитать больше о тепловом датчике в Atmels здесь: Внутренний температурный датчик

Мишель Кейзерс
источник
2
Arduino реализует задержку, постоянно проверяя, прошло ли достаточно времени. Таким образом, выполнение программы или delayиспользование одного и того же количества вычислительной мощности.
Гербен
Я буду обновлять (удалять) эту часть ... спасибо!
Мишель Кейзерс
Есть разница - большинство компьютеров сегодня имеют тонны функций энергосбережения; Многие вещи отключаются, когда они не нужны, и это происходит практически автоматически. У Arduino также есть способы уменьшить потребление энергии, но вы должны использовать их явно. Если вам нужно что-то отключенное в большинстве случаев, Learn.sparkfun.com/tutorials/reduc-arduino-power-consump - отличный способ начать. В частности, в режиме сна с низким энергопотреблением энергопотребление снижается примерно в тысячу раз, в отличие delayот процессора. Это имеет свою стоимость, конечно :)
Luaan