Hi, ich habe zwei kleine Probleme mit dem IAR-Assembler: MOV R6,BLA -> OK MOV BLA,R6 -> illegal effective Address Die 'Variaible' BLA ist in der Header-Datei definiert. Da liegt noch mein zweites Problem: wie kann ich bzw. der Assembler unterscheiden, ob bei #define BLA 0202h der Variablen der Wert 202h zugewiesen wird oder ob die Variable an der Speicherstelle 202h liegt? Letzteres hätte ich gerne. Gruß, ALF
mov BLA,R6 kann nicht funktionieren, da der MOV Befehl ja ein REGISTER<--REGISTER Transfer ist. um ein Register mit dem Inhalt einer SRAM Adresse zu laden ist der Befehl: lds R6,BLA bzw. zum speichern der Befehl sts BLA,R6 zu benutzen.
Hallo, das #define... weist natürlich der Variablen den entsprechenden Wert zu. (Usermanual Assembler) Der Assembler kann ja auch nicht wissen, ob in diesem Bereich RAM o ROM befinden... Dein mov... scheint in der Tat ein Problem des Assemblers zu sein, im MSP430-User Guide steht zumindest, dass ein mov addr1, addr2 erlaubt ist. Versuche es doch mal ohne das #define. Offensichtlich ist der Assembler auch nicht das was er sein sollte. Gruss Haiko
#define hat mit Variablen nichts zu tun, der Assembler ersetzt bei "#define BLA 0202h" einfach alle Vorkommen von "BLA" mit "0202h". "MOV BLA,R6" ist also äquivalent zu "MOV 0202h,R6".
Beim MSP kann der ganze Adressbereich (0..ffff) sowohl lesend wie schreibend verwendet werden, aber schreiben auf unzulässige Bereiche (z. B. WD oder FLASH ohne richtiges Passwort) gibt einen NMI. Ich meine, dass es auch dann einen NMI gibt, wenn auch nicht vorhanden Adressen geschrieben werden soll. Vielleicht beschwert sich der Assembler deswegen.
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.