Wird ein Arduino durch zu viel Befehlsausführung abgenutzt?


12

Entschuldigen Sie, wenn es eine dumme Frage ist, aber ich konnte keine Antwort finden.

Ich habe mich eine Weile gefragt, ob ein Arduino (oder allgemein jeder andere Mikrocontroller) glücklich ist, wenn der Code leicht ist und nicht zu viele Operationen ausführen muss. Verbraucht ein Code, der zu viele Wenns, zu viele Schleifen und alle Arten von komplizierten Berechnungen enthält, einen Arduino früher als ein Code, der nur eine LED blinkt?


Siehe auch verknüpfte Fragen . . . .
James Waldby - jwpat7

Antworten:


20

Nein, der Code "verschleißt" die MCU nicht. Unabhängig davon, was Sie tun, wird im Allgemeinen ungefähr das gleiche Aktivitätsniveau ausgeführt. Auch delay()macht viel Arbeit, während es "im Leerlauf" ist.

Es gibt Befehle, die die CPU dazu bringen, weniger zu tun - sie in einen IDLE- oder SLEEP-Modus zu versetzen - aber diese werden verwendet, um Energie zu sparen, anstatt den "Verschleiß" der MCU zu verringern.

Natürlich gibt es bestimmte Dinge, die eine begrenzte Lebensdauer haben, und Sie können sie nur eine begrenzte Anzahl von Malen verwenden - zum Beispiel das Schreiben in ein EEPROM und das Schreiben in den Flash-Speicher -, sodass Sie dies nicht ständig tun möchten. Abgesehen davon, nein, egal was Sie tun, verschleißt die MCU nicht.


2
Aber alle Halbleiter altern, nicht wahr? Hot-Carrier-Injektion und Instabilität der Bias-Temperatur sind die Mechanismen, an die ich mich erinnere. Natürlich würde es viele, viele Jahre dauern.
MV.

5
@MV. Ja, aber was Sie auf dem Mikrocontroller ausführen, hat keinen wirklichen Einfluss darauf. Was auch immer Sie tun, Sie betreiben die CPU auf (ungefähr) der gleichen Ebene. Du benutzt das alles (so ziemlich) die ganze Zeit.
Majenko

1
Wird Code die erzeugte Wärme nicht indirekt beeinflussen? Heiße Bauteile könnten sich schneller abnutzen.
Mast

3
Nur eine winzig kleine Menge. Selbst wenn man "nichts" tut, arbeitet man hart und verarbeitet.
Majenko

Danke für Ihre Antwort. Jetzt kann ich mich zurücklehnen und Codes so komplex schreiben, wie ich möchte, und mache mir keine Sorgen über die Lebensdauer meines Arduino! Aber ist es auch so, dass ständig mit externen Komponenten interagiert wird? Sensoren lesen, SPI-Kommunikation und so weiter?
ahmadx87

6

Es ist nicht. Nun, es könnte sich langsam abnutzen, wenn Sie es wie 20 Jahre laufen lassen ... (wie die meisten anderen physischen Produkte)? Zumindest hängt es nicht von der Komplexität des Codes ab, sondern davon, wie viele Schreibvorgänge im selben Speicherabschnitt ausgeführt werden. Wenn es abgenutzt ist, wird es einfach zugemauert und es wird kein einfacherer Code wie das Blinken der LED.

Ein Arduino (Uno) hat drei Speicherteile. SRAM, FLASH und EEPROM. SRAM ist eher ein logisches Transistor-Gate. Es nutzt sich nicht durch Speichern von Variablen ab. FLASH und EEPROM bestehen aus Floating Gates. Sie nutzen sich langsam ab, wenn Sie neue Daten schreiben. Aus dem Datenblatt des Ateml-Mikrocontrollers geht Folgendes hervor :

Der Flash-Speicher hat eine Lebensdauer von mindestens 10.000 Schreib- / Löschzyklen. (Aus Kapitel 8.2)

Das EEPROM hat eine Lebensdauer von mindestens 100.000 Schreib- / Löschzyklen. (Ab Kapitel 8.4)

FLASH-Speicher ist jedoch ein Platz für die Codeausführung. Der Schreibvorgang wird nicht ausgeführt, während Arduino ausgeführt wird. Sie schreiben den FLASH-Speicher nur, wenn Sie einen neuen Code hochladen. Wenn Sie also mindestens 10.000-mal Code hochladen, nutzt sich dies ab.

Wenn Sie wirklich wollen, können Sie einen speziellen Code erstellen, um den FLASH-Speicher in der Regel selbst neu zu programmieren, damit die variablen Daten erhalten bleiben, wenn Arduino ausgeschaltet ist. Wenn Sie ein solches Programm schreiben, wird es sich langsam abnutzen, da der FLASH-Speicher nicht viel Zeit zum Schreiben hat. Aus diesem Grund wird empfohlen, EEPROM zu verwenden, das eine wesentlich längere Lebensdauer hat, wenn Sie Daten auch dann behalten möchten, wenn Arduino ausgeschaltet ist.

Zusammenfassend lässt sich sagen, dass es durch das Neuschreiben des FLASH- oder EEPROM-Speichers und nicht durch die Codeausführung abnutzt.


6

Für einen Bastler:

Möglicherweise besteht das einzige Problem im Zusammenhang mit der lebensbeschränkenden Software darin, so schnell wie möglich aus einem Programm heraus in den FLASH-Speicher zu schreiben. Aber nur wenige Programme verwenden Variablen, die Ereignisse wie Batteriewechsel überleben müssen.

Das einzige Problem, das die Lebensdauer der Hardware einschränkt, ist das Überladen der Ausgänge mit niederohmigen Lasten (Glühlampen), induktiven Lasten (wie das direkte Ansteuern mechanischer Relais), um nur zwei zu nennen. Die Frage dreht sich aber nur um Software.


5

... (oder allgemein jeder andere Mikrocontroller) ...

Die anderen Antworten sind großartig, aber es gibt eine kleine Ausnahme.

Ferroelektrischer RAM (FRAM) ist eine Form von Speicher, der die Nichtflüchtigkeit von Flash und EEPROM, die Beschreibbarkeit von SRAM und die Dichte von DRAM kombiniert.

Allerdings sind Leseoperationen auf FRAM destruktiv auf die Daten im FRAM gespeichert und Schreiboperationen sind schädlich für die FRAM Konstruktion selbst (und da die Daten durch das Lesen sie zerstört wird, muss es jedes Mal zurückgeschrieben werden). Wenn sich Ihr Code in FRAM befindet und ausgeführt wird, wird die MCU rechtzeitig abgenutzt. Da FRAM jedoch eine Schreibsicherheit in Millionenhöhe aufweist, ist es unwahrscheinlich, dass die MCU aufgrund von FRAM während der Lebensdauer des Geräts nicht mehr funktionsfähig ist.

Beispiele für MCUs, die FRAM verwenden, sind die MSP430FRxx-Leitungen von TI .


1
Wenn FRAM vorhanden ist, ist im Allgemeinen kein anderer Speicher vorhanden. Nicht einmal Blitz.
Majenko

3

Wahrscheinlich nicht ... Der Atmel-Chip wird mit der Zeit wärmer (selbst eine Verzögerung verhindert dies nicht). Wenn er jedoch die Möglichkeit hat, seine Wärme abzugeben, sehe ich kein Problem. Meistens kann jedoch nur Übertakten zu ernsthaften Problemen führen oder das Arduino in einer vollständig geschlossenen Box oder in einer heißen Umgebung verwenden.

Zum Vergleich: Viele Computer laufen jahrelang ohne Abschaltung, der Atmel (Chip) macht in diesem Sinne keinen Unterschied, solange erzeugte Wärme abgeführt werden kann.

Weitere Informationen zu einem Wärmesensor in Atmels finden Sie hier: Interner Temperatursensor


2
Die Art und Weise, wie Arduino eine Verzögerung implementiert, besteht darin, ständig zu überprüfen, ob genügend Zeit verstrichen ist. Wenn Sie also ein Programm ausführen oder eine haben, delayverbraucht dies dieselbe Menge an Rechenleistung.
Gerben

Ich werde diesen Teil aktualisieren (entfernen) ... danke!
Michel Keijzers

Es gibt einen Unterschied: Die meisten Computer verfügen heutzutage über eine Vielzahl von Energiesparfunktionen. Viele Dinge werden ausgeschaltet, wenn sie nicht benötigt werden, und dies geschieht so ziemlich automatisch. Der Arduino hat auch Möglichkeiten, den Stromverbrauch zu reduzieren, aber Sie müssen sie explizit verwenden. Wenn Sie etwas benötigen, das die meiste Zeit ausgeschaltet ist , ist learn.sparkfun.com/tutorials/reducing-arduino-power-consumption ein guter Anfang. Insbesondere der Energiesparmodus senkt den Stromverbrauch um das Tausendfache - im Gegensatz zu dem delay, der nur die CPU dreht. Das hat natürlich seine Kosten :)
Luaan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.