Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Fundamentum Propeller SPIN Programmierung

Basiskurs 2 –  Abschnitt 2 - Kerne und Stack

Übung 1 - Berechnung des Stackplatzes

Die nachfolgende Liste weist aus, wieviele longs jede aufgerufene Methode im Stackbereich beansprucht.

  • 2 für Rücksprungadresse
  • 1 für Rücksprungergebnis
  • Anzahl der Methodenparameter
  • Anzahl der lokalen Variablen
  • Platz für Zwischenrechnungen

 

Beispiel 1

Wir haben drei Methoden A, B und C.

  • Methode A ruft Methode B auf -> Für jede Methode ein long: 2 long auf den Stack
  • Methode B ruft Methode C auf ->  1 long auf den Stack
  • Methode C wird beendet -> -1 long vom Stack

Beispiel 2

 

 

 

 

Abb. 1

Methode "blinker" aus einer vorherigen Übung.

In der Methode blinker wird der Arbeitsspeicher auf zwei verschiedene Arten benutzt. Mit

  • repeat wdh * 2

Werden zwei Elemente auf den Stack gelegt: der Wert des Parameters wdh und die Zahl  2. Nach Ausführung der Multiplikation

  • wdh * 2

wird die 2 vom Stack entfernt und das Ergebnis in einem Element1 auf dem Stack abgelegt. Es verbleibt dort, bis die repeat-Schleife abgeschlossen ist.

 

Ähnlich verhält es sich mit

  • waitcnt(blinkrate/2 + cnt)

Der Parameter blinkrate und 2 werden auf den Stack gelegt, die Division ausgeführt, 2 vom Stack entfernt und das Ergebnis in einem Element2 abgelegt.  Es verbleibt ebenfalls bis zum Abschluss der repeat-Schleife auf dem Stack.

 

Anschließend wird der Parameter cnt auf den Stack gelegt, mit Element2 , das sich bereits auf dem Stack befindet, addiert und das Ergebnis in Element3 auf den Stack gelegt.

 

In der Summe werden auf dem Stack maximal benötigt:

  • 2 long  für return-Adresse
  • 1 long  für die Ergebnisvariable, die in jeder Methode automatisch angelegt ist.
  • 3 long  für die Parameter pin, blinkrate und wdh.
  • 1 long  für die lokale Variable time
  • 3 long  für die Berechnungsgrößen Element1, Element2 und Element3.

In der Summe macht das maximal 10 long, die für die Methode blinker auf dem Stack pro COG reserviert werden müssen.

Übung 2 - Methodenaufruf und Rückgabewert

Jede Methode verfügt automatisch über eine eingebaute vordefinierte lokale Variable result. Sie wird bei jedem Methodenaufruf mit dem Wert 0 initialisiert und der aktuelle Wert von result wird mit Abschluss des Methodenaufrufs an die aufrufende Methode zurückgegeben.

Übung 2 - Methodenaufruf und Rückgabewert
Aufgaben
  • Wird ein Taster gedrückt, dann soll eine LED 10x blinken. Die Blinkfrequenz hängt davon ab, wie lange der Taster gedrückt wird.
  • Entwickle ein Objekt TasterBlinker, mit drei Methoden: main, tastzeit und blinker.
  • Die Methode main ruft zuerst die Methoden tastzeit und anschließend blinker auf.
  • Die Methode tastzeit gibt die Zeit DeltaT des Tastendrucks an main zurück und startet dann die Methode blinker. Die Blinkrate ist direkt proportional zu DeltaT.

Material

  • Material und Schaltungsaufbau siehe Abb. 0 aus Basiskurs 1, Abschnitt 2

Das Objekt TasterBlinker

 

 

 

 

 

 

 

 

 

 

Abb. 2

Das Programm TasterBlinker.spin

Wie arbeitet das Programm TasterBlinker.spin ?

Für die Methode main wurde eine Variable DeltaT deklariert; sie besteht nur aus zwei Methoden-Aufrufen: tastzeit und blinker.

 

Tastzeit(26) ruft die Methode tastzeit auf übergibt 26 an die Variable pin. Die erste repeat-Schleife wird beendet, sobald der Taster an P26 gedrückt wurde und die Variable t_a nimmt den Wert des cnt-Registers auf.

 

Die zweite Schleife wird solange durchlaufen, wie die Taste gedrückt bleibt. Sobald sie losgelassen wird, speichert t_e den dann aktuellen cnt-Registerwert. Die Differenz aus t_e und t_a wird als Rückgabewert des Methodenaufrufs tastzeit in DeltaT abgelegt.  

 

Der anschließende Methodenaufruf blinker übernimmt den Wert von DeltaT in  blinkrate. Diese Methode ist uns inzwischen sehr bekannt und wird nicht mehr weiter besprochen.

Hinweis

Statt result als Rückgabevariable zu nutzen, kann man auch ein alias einführen. Dazu muss in Programmzeile 13 und 19 eine kleine Änderung vorgenommen werden (siehe die folgende Abbildung).

Hier geht es weiter mit dem Basiskurs 3  Abschnitt 1 - Objekte

Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf