mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik was ist das für eine Definition? Assembler


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe hier im Quelltext eine Definition die ich nicht verstehe und 
die oft verwendet wird.

#define REMOVE_ENTER_1 {_asm("ADD.W #1,SP"); _asm("POPC FB");}

Weiß jemand was der Code bedeutet?

gruß
Thomas

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie immer: bitte mehr Informationen (welcher Processor / Compiler ...)
mehr Quelltext (zumindest eine komplette Funktion, in der REMOVE_ENTER_1 
verwendet wird).

Es ist halt eine Abkürzung, welche -wenn im Quelltext verwendet-  zwei 
Assemblerbefehle einfügt.
Diese manipulieren (bereinigen?) den Stack:
1. den Stackpionter incrementieren (vermutlich das selbe wie POP dummy)
2. den nächsten Stack-Inhalt nach FB speichern, was auch immer das sein 
mag).

Autor: jimbo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

das ist aber kein AVR Programm oder?!? Weil die Inline Assembler Befehle
(also das hinter _asm(...)) sind keine AVR Assembler Befehle.


Auf jeden Fall macht das #define folgendes:
Überall im Programmcode wo "REMOVE_ENTER_1" steht, setzt der Compiler
_asm("ADD.W #1,SP"); _asm("POPC FB"); ein.

Der erste Befehl bewirkt, dass die Konstante "1" als Wort (16bit) in die 
Varialble SP geschrieben wird. Wobei SP vermutlich der Stackpointer ist.
Im Klartext SP+=1;

POPC holt vermutlich den Inhalt vom neuen Stackpointerplatz und schreibt 
ihn in die Variable FB. (Keine Ahnung was FB für ne Variable ist). Ich 
hab vermutlich geschrieben, weil ich den Befehl POPC nicht kenne sondern 
nur POP.

Autor: jimbo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh,  eProfi war schneller ;)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist M16C.
Tasking-Compiler?
Hier wird die Bankumschaltung manipuliert.

Mit  _asm("ADD.W #1,SP");
wird der Stackpointer um eins höher gesetzt

Mit  _asm("POPC FB");
wird der Wert vom Stack in die Bankumschaltung übertragen

Nur sollte jetzt vorher noch was auf den Stack geschrieben werden???
Poste doch mal so eine Funktion, die das Makro verwendet.


Hier taucht POPC FB auch im Zusammenhang mit Interrupts auf:
http://www.tasking.com/support/M16C/solved_known_p...

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Antworten,

Danke für eure Antworten, das erklärt ja schon ein bisschen.
ja ich arbeite mit einem M16C28 und programmiere in HEW.

Ich arbeite mit ZigBee und das sind Funktionen aus dem ZigBee- Stack, 
die ich benutzen kann. Was die wirklich machen und was FB genau für eine 
Variable ist kann man nicht einsehen, da der Stack ist ja nicht 
öffentlich ist

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt:
FB ist die Bankumschaltung, nicht einfach nur irgendeine Variable.

Siehe dazu im Software Manual unter "Frame base register FB"
:
The frame base register (FB) consists of 16 bits, and is used for 
FB-based relative addressing
:
http://documentation.renesas.com/eng/products/mpum...

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke dir Lothar,

hätt ich natürlich auch finden können, hab das Manual ja auch.  ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.