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
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).
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.
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_problems_v3.1r1.htm
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
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/mpumcu/rej09b0137_m16csm.pdf
Danke dir Lothar, hätt ich natürlich auch finden können, hab das Manual ja auch. ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.