Hi, bestimmt ganz einfach nur wo ist der Unterschied zwischen diesen beiden Aufrufen? ldi ZL,Low(MSG_INI1) ldi ZH,High(MSG_INI1) und ldi ZL,Low(MSG_INI1*2) ldi ZH,High(MSG_INI1*2) Was bedeutet das '*' ??? Gruß AVRli...
Hast Du schon mal programmiert?? * steht für "mal" (Multiplikation) grüsse leo9
*2 bedeutet nichts anderes als "mal zwei", also eine Multiplikation mit 2, die aber schon zu assemblierzeit ausgeführt wird, da ja der Wert von MSG_INI1 zu der Zeit bekannt ist. Ich nehme an, dass hier etwas mit der LPM-Anweisung aus dem FLASH gelesen werden soll. Da der Programmspeicher (also Flash) in Wörtern der Breite 16 Bit gegliedert ist, man aber mit LPM auf einzelne Bytes zugreifen kann, muss man bei der Adressierung aufpassen. Die Label wie MSG_INI1 evaluieren nämlich zu den 16-bit-Word-Adressen. Um also auf die richtige Speicherstelle hinzuweisen muss z.B. beim 10ten 16-Bit-Wort im Flash auf das 20ste Byte zugegriffen werden, also eine Multiplikation mit 2 (oder ein Linksshift um 1). Siehe auch die AVR Hilfe-Datei zum Befehl LPM.
Hi Christof, danke für die Erklärung! Ja das ist das also... ok dann sind alle Klarheiten beseitigt. ;-) @leo9 ;-) Gruß AVRli...
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.