Donnerstag, 3. September 2015

Programmiertricks für Arduino Sketche

In diesem Post geht es um ein paar Programmiertipps und Tricks für Arduino Sketche.

RAM Mangel erkennen

Das tückische an RAM Mangel ist, dass man ihn, während ein Programm läuft, erst dadurch erkennt, dass ein Sketch der normalerweise einwandfrei funktioniert, plötzlich "sehr komische Dinge" tut. Um zu überprüfen, ob ein RAM Mangel herrscht, gibt es die Bibliothek "MemoryFree". Diese kann man hier herunterladen. Sobald man die .zip Datei in den Arduino libraries Ordner entpackt, und die Arduino IDE erneut gestartet hat, kann man die Bibliothek in den Sketch einbinden. Über den Aufruf der Funktion freeMemory(); kann man sich nun jeweils den aktuell noch freien RAM in Bytes anzeigen. 

Serial.println(F())

Wenn man einen String, aus dem Flashspeicher, über die serielle Verbindung an den PC senden will, so sollte man nicht die Funktion Serial.println("String") verwenden, sondern Serial.println(F("String"). Dadurch wird der String nicht erst in den RAM geladen, sondern direkt versandt, wodurch die Funktion in einem Test keinen Arbeitsspeicher benötigt(vs. 2Bytes RAM pro Zeichen).

Geltungsbereich von Variablen ausnutzen

Es ist zu empfehlen, sich bei jeder Variable zu überlegen, welchen Geltungsbereich sie haben soll, also für welche Programmabschnitte sie definiert wird. Dabei ist zwischen globalen Variablen und lokalen Variablen zu unterscheiden. Durch das Trennen, wird verhindert, dass Variablen versehentlich überschrieben werden. 

Um eine Variable zu einer globalen Variable zu machen, muss man sie außerhalb von setup oder loop definieren. Um eine Variable nur lokal zu definieren, definiert man sie einfach erst direkt in dem Abschnitt, wo sie gelten soll.

Bedingter Operator

Ein bedingter Operator kann als Abkürzung für eine if Schleife verwendet werden. Dabei gibt es eine Bedingung, welche wahr oder falsch ergeben muss. Anschließend definiert man einen Befehl für TRUE und einen für FALSE.
(Bedingung) ? (TRUE) : (FALSE)
Für einen Blink Sketch sähe das so aus:
digitalWrite(13, (digitalRead(13)) ? (LOW) : (HIGH);
delay(100);
Dadurch kann man sich Flashspeicher und Tipparbeit sparen.

Welche Programmiertricks kennt ihr? Schreibt sie in die Kommentare!

Keine Kommentare:

Kommentar veröffentlichen