Optimierung Die
einfache Programmierung für eingebettete Systeme unterscheidet sich erheblich von der Programmierung für Allzweckgeräte wie Computer und Mobiltelefone. Effizienz (in Bezug auf Geschwindigkeit und Platz) ist weitaus wichtiger, da Ressourcen knapp werden. Das bedeutet, dass Sie als Erstes prüfen müssen, welche Teile Ihres Codes Sie optimieren können, wenn Ihnen der Speicherplatz ausgeht.
In Bezug auf die Reduzierung des Programmspeichers (Flash) kann es schwierig sein, die Codegröße zu optimieren, wenn Sie unerfahren sind oder wenn Sie eher daran gewöhnt sind, für Desktop-Computer zu programmieren, für die diese Fähigkeiten normalerweise nicht erforderlich sind. Leider gibt es keinen "Magic Bullet" -Ansatz, der in allen Situationen funktioniert, obwohl es hilfreich ist, wenn Sie sich ernsthaft überlegen, was Ihre Skizze wirklich braucht . Wenn eine Funktion nicht benötigt wird, nehmen Sie sie heraus.
Manchmal ist es auch hilfreich zu identifizieren, wo mehrere Teile Ihres Codes gleich (oder sehr ähnlich) sind. Möglicherweise können Sie sie zu wiederverwendbaren Funktionen zusammenfassen, die von mehreren Stellen aus aufgerufen werden können. Beachten Sie jedoch, dass der Versuch, Code zu wiederverwendbar zu machen, manchmal tatsächlich dazu führt, dass er ausführlicher wird. Es ist eine schwierige Balance, die mit Übung einhergeht. Ein Blick auf die Auswirkungen von Codeänderungen auf die Compiler-Ausgabe kann hilfreich sein.
Die Optimierung von Laufzeitdaten (Runtime Data, SRAM) ist in der Regel etwas einfacher, wenn Sie daran gewöhnt sind. Eine sehr häufige Gefahr für Programmieranfänger ist die Verwendung zu vieler globaler Daten. Alles, was im globalen Rahmen deklariert wurde, bleibt während der gesamten Lebensdauer der Skizze bestehen. Dies ist nicht immer erforderlich. Wenn eine Variable nur innerhalb einer Funktion verwendet wird und nicht zwischen den Aufrufen bestehen bleiben muss, machen Sie sie zu einer lokalen Variablen. Wenn ein Wert zwischen Funktionen geteilt werden muss, prüfen Sie, ob Sie ihn als Parameter übergeben können, anstatt ihn global zu machen. Auf diese Weise verwenden Sie SRAM nur dann für diese Variablen, wenn Sie es tatsächlich benötigen.
Ein weiterer Killer für die SRAM-Nutzung ist die Textverarbeitung (z. B. mit der String
Klasse). Im Allgemeinen sollten Sie Zeichenfolgenoperationen nach Möglichkeit vermeiden. Sie sind massive Erinnerungsfresser. Wenn Sie beispielsweise viel Text seriell ausgeben, verwenden Sie mehrere Aufrufe, Serial.print()
anstatt die Zeichenfolgenverkettung zu verwenden. Versuchen Sie außerdem, die Anzahl der Zeichenfolgenliterale in Ihrem Code zu verringern, wenn dies möglich ist.
Vermeiden Sie nach Möglichkeit auch eine Rekursion. Jedes Mal, wenn ein rekursiver Aufruf erfolgt, wird der Stapel um eine Stufe tiefer gelegt. Korrigieren Sie Ihre rekursiven Funktionen so, dass sie stattdessen iterativ sind.
EEPROM verwenden
EEPROM wird zur langfristigen Speicherung von Dingen verwendet, die sich nur gelegentlich ändern. Wenn Sie große Listen oder Nachschlagetabellen mit festen Daten verwenden müssen, sollten Sie diese im Voraus im EEPROM speichern und nur dann herausziehen, wenn dies erforderlich ist.
Offensichtlich ist das EEPROM jedoch in Größe und Geschwindigkeit ziemlich begrenzt und weist eine begrenzte Anzahl von Schreibzyklen auf. Es ist keine großartige Lösung für Datenbeschränkungen, aber es könnte ausreichen, um Flash oder SRAM zu entlasten. Es ist auch durchaus möglich, eine Schnittstelle zu einem ähnlichen externen Speicher wie einer SD-Karte herzustellen.
Erweiterung
Wenn Sie alle anderen Optionen ausgeschöpft haben, ist möglicherweise eine Erweiterung möglich. Das Erweitern des Flash-Speichers zur Erhöhung des Programmspeichers ist leider nicht möglich. Es ist jedoch möglich, SRAM zu erweitern. Dies bedeutet, dass Sie Ihre Skizze möglicherweise überarbeiten können, um die Codegröße auf Kosten der Erhöhung der Datengröße zu verringern.
Es ist eigentlich ziemlich einfach, mehr SRAM zu bekommen. Eine Möglichkeit besteht darin, einen oder mehrere 23K256- Chips zu verwenden. Sie werden über SPI abgerufen, und die SpiRAM-Bibliothek hilft Ihnen bei der Verwendung. Achten Sie nur darauf, dass sie mit 3,3 V und nicht mit 5 V betrieben werden!
Wenn Sie das Mega verwenden, können Sie alternativ SRAM-Erweiterungsschilde von Lagrangian Point oder Rugged Circuits erhalten .