Forum: Mikrocontroller und Digitale Elektronik Wo ist der Unterschied?


von AVRli (Gast)


Lesenswert?

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...

von leo9 (Gast)


Lesenswert?

Hast Du schon mal programmiert?? * steht für "mal" (Multiplikation)

grüsse leo9

von Christof Krüger (Gast)


Lesenswert?

*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.

von AVRli (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.