Un Arduino est-il épuisé par une trop grande exécution de commandes?

12

Excusez-moi si c'est une question idiote, mais je n'ai pas trouvé de réponse.

Je me demande depuis un moment si un Arduino (ou généralement tout autre micro-contrôleur) se réjouit si le code est léger et qu'il n'a pas à exécuter trop d'opérations. Est-ce qu'un code qui a trop de ifs, trop de boucles et toutes sortes de calculs compliqués use un Arduino plus tôt qu'un code qui fait juste clignoter une LED?

ahmadx87
la source
Voir également les questions liées . . . .
James Waldby - jwpat7

Réponses:

20

Non, le code "n'use pas" le MCU. En général, peu importe ce que vous faites, le même niveau d'activité est exécuté. Fait delay()même beaucoup de travail pendant qu'il "tourne au ralenti".

Il existe des commandes pour réduire le nombre de CPU - placez-le en mode IDLE ou SLEEP - mais elles sont utilisées pour économiser de l'énergie plutôt que pour réduire "l'usure" du MCU.

Bien sûr, il y a des choses spécifiques qui ont une durée de vie limitée et vous ne pouvez les utiliser qu'un nombre limité de fois - des choses comme l'écriture sur EEPROM et l'écriture sur la mémoire Flash - donc vous ne voulez pas les faire tout le temps. En dehors de cela, non, peu importe ce que vous faites, il n'use pas le MCU.

Majenko
la source
2
Mais tous les semi-conducteurs vieillissent, non? l'injection de support chaud et l'instabilité de la température de polarisation sont les mécanismes dont je me souviens. Bien sûr, cela prendrait de nombreuses années.
MV.
5
@MV. Oui, mais ce que vous exécutez sur le microcontrôleur ne l'affecte pas vraiment. Quoi que vous fassiez, vous exécutez le processeur au niveau (à peu près) du même niveau. Vous utilisez tout cela (à peu près) tout le temps.
Majenko
1
Le code n'influencera-t-il pas indirectement la chaleur générée? Les composants chauds pourraient s'user plus rapidement.
mât
3
Seulement une toute petite quantité. Même en ne faisant «rien», il travaille dur et traite.
Majenko
Merci pour votre réponse. Maintenant, je peux me pencher en arrière et écrire des codes aussi complexes que je veux et ne vous inquiétez pas de la durée de vie de mon Arduino! Mais est-ce aussi le cas pour interagir constamment avec des composants externes? Lecture de capteurs, communication SPI et ainsi de suite?
ahmadx87
6

Ce n'est pas. Eh bien, il pourrait s'user lentement si vous le faites fonctionner pendant 20 ans ... (comme la plupart des autres produits physiques)? Au moins, il ne dépend pas de la complexité du code mais du nombre d'opérations d'écriture effectuées dans la même section de mémoire. De plus, lorsqu'il s'use, il ne fait que devenir maillé et ne deviendra pas un code plus simple comme faire clignoter la LED.

Un Arduino (Uno) a trois parties mémoire. SRAM, FLASH et EEPROM. SRAM ressemble plus à une grille de transistor logique. Il ne s'usera pas en stockant des variables. FLASH et EEPROM se composent de portes flottantes. Ils s'usent lentement lorsque vous écrivez de nouvelles données. D'après la fiche technique du microcontrôleur Ateml , il indique:

La mémoire Flash a une endurance d'au moins 10 000 cycles d'écriture / effacement. (Extrait du chapitre 8.2)

L'EEPROM a une endurance d'au moins 100 000 cycles d'écriture / effacement. (Du chapitre 8.4)

Cependant, la mémoire FLASH est un espace pour l'exécution de code. L'opération d'écriture n'est pas effectuée pendant l'exécution d'Arduino. Vous n'écrivez de la mémoire FLASH que lorsque vous téléchargez un nouveau code. Il s'use donc lorsque vous téléchargez du code au moins 10 000 fois.

Si vous voulez vraiment, vous pouvez créer un code spécial pour auto-reprogrammer la mémoire FLASH, généralement dans le but de conserver les données variables lorsque Arduino est éteint. Lorsque vous écrivez ce type de programme, il s'use lentement car la mémoire FLASH n'a pas beaucoup d'endurance en écriture. C'est pourquoi il vous sera suggéré d'utiliser l'EEPROM qui a beaucoup plus d'espérance de vie, si vous souhaitez conserver les données même lorsque Arduino est éteint.

Pour résumer, il s'usera en réécrivant la mémoire FLASH ou EEPROM, et non par l'exécution de code.

Bumsik Kim
la source
6

Pour un amateur:

Le seul problème lié au logiciel limitant la durée de vie peut être d'écrire dans la mémoire FLASH aussi rapidement que possible depuis l'intérieur d'un programme. Mais peu de programmes utilisent des variables qui doivent survivre à des événements comme le changement de piles.

Le seul problème lié au matériel limitant la durée de vie concerne la surcharge des sorties avec des charges à faible résistance (ampoules à incandescence), des charges inductives (comme les relais mécaniques à entraînement direct) pour n'en nommer que deux. Mais la question ne concerne que les logiciels.

st2000
la source
5

... (ou généralement tout autre microcontrôleur) ...

Les autres réponses sont excellentes, mais il y a une petite exception.

La RAM ferroélectrique (FRAM) est une forme de mémoire qui combine la non-volatilité du flash et de l'EEPROM, l'écriture de la SRAM et la densité de la DRAM.

Cependant , les opérations de lecture sur FRAM sont destructrices pour les données stockées dans la FRAM et les opérations d'écriture sont destructrices pour la construction FRAM elle-même (et puisque les données sont détruites en les lisant, elles doivent être réécrites à chaque fois). Si votre code se trouve dans FRAM, son exécution épuisera le MCU à temps. Mais étant donné que FRAM a une endurance en écriture de plusieurs millions de milliards, il est peu probable que le MCU devienne inutilisable en raison de FRAM pendant la durée de vie de l'appareil.

Des exemples de microcontrôleurs qui utilisent FRAM incluent la ligne MSP430FRxx de TI .

Ignacio Vazquez-Abrams
la source
1
En général, s'il y a une FRAM, il n'y a pas d'autre mémoire. Pas même flash.
Majenko
3

Probablement pas ... La puce Atmel pourrait se réchauffer avec le temps (même un retard ne l'empêche pas), mais si elle a la possibilité de libérer sa chaleur, je ne vois pas de problème. Mais la plupart du temps, seul l'overclocking peut provoquer des problèmes très graves, ou l'utilisation de l'Arduino dans une boîte entièrement fermée ou dans un environnement chaud.

En comparaison: de nombreux ordinateurs fonctionnent pendant des années sans s'éteindre, l'Atmel (puce) ne fait en ce sens aucune différence, tant que la chaleur générée peut être évacuée.

Vous pouvez en savoir plus sur un capteur de chaleur dans Atmels ici: Capteur de température interne

Michel Keijzers
la source
2
La façon dont Arduino implémente le retard est de vérifier constamment si suffisamment de temps s'est écoulé. Donc, exécuter un programme ou avoir un delayutilise la même quantité de puissance de traitement.
Gerben
Je vais mettre à jour (supprimer) cette partie ... merci!
Michel Keijzers
Il y a une différence - la plupart des ordinateurs ont aujourd'hui des tonnes de fonctions d'économie d'énergie; beaucoup de choses s'éteignent lorsqu'elles ne sont pas nécessaires, et cela se produit à peu près automatiquement. L'Arduino a également des moyens de réduire la consommation d'énergie, mais vous devez les utiliser explicitement. Si vous avez besoin de quelque chose qui est éteint la plupart du temps, learn.sparkfun.com/tutorials/reducing-arduino-power-consumption est une excellente façon de commencer. En particulier, le sommeil à faible consommation réduit la consommation d'énergie d'environ un millier de fois - contrairement à delayce qui ne fait que faire tourner le processeur. Cela a un coût, bien sûr :)
Luaan