mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu AVRStudio und LookupTables


Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hoi,

Folgendes:

Ich habe eine Lookuptable im Flash
lut:
db 0x01, 0x10, 0x50, 0xFF

Nun möchte ich zu eines dieser Bytes springen. Dabei soll aber das
angesprungene Byte von einem anderen Wert abhängen. Also

ldi r16, 2    ;2. Byte
ldi r1, 0

ldi ZL, LOW(2*lut)
ldi ZH, HIGH(2*lut)

add ZL, r16
adc ZH, r1


Das wäre die Methode, wie ich das machen würde. Labeladresse auf
Byteaddressierung erweitern (*2) und das passende Byte anspringen.

Ist dies so korrekt? Oder muss erst alles addiert werden, und danach
multipliziert?

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das klappt, so lannge ZL NICHT 254 / 255 hat, an sonsten ist ZL 0 oder 1
und ZH aendert sich nicht.

wenn du eine konstante addieren willst, mach es mit
adiw Z, 0x02

an sonsten musst du das carry flag abfragen, und wenn gesetzt ZH
incrementieren
gruss

Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Simon,
du willst wahrscheinlich wissen,
ob du den Tabellenoffset (in deinem Beispiel die 2)
auch mal zwei nehmen musst, wie die Adresse der Tabelle.
Nein, nur wenn du dich auf Labels (lut:)
im Flashspeicher beziehst, musst du umrechnen.

MfG Willi

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das klappt, so lannge ZL NICHT 254 / 255 hat, an sonsten ist ZL 0
> oder 1 und ZH aendert sich nicht.

Quatsch.

> wenn du eine konstante addieren willst, mach es mit
> adiw Z, 0x02

Das geht auch, aber nur für Konstanten bis 63.

> an sonsten musst du das carry flag abfragen, und wenn gesetzt ZH
> incrementieren

Genau das macht das adc in Simons Code.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, also ist das so wohl richtig.

@Jens: Warum sollte das so sein? Beim zweiten mal benutze ich statt
'add' nämlich 'adc'. Da wird das Carryflag mitaddiert.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>@Jens: Warum sollte das so sein? Beim zweiten mal benutze ich statt
>>'add' nämlich 'adc'. Da wird das Carryflag mitaddiert.

durch das schieben ist die zahl maximal 4 Bit gross.
wenn du nun das 'A'-1 addierst hast du nie mehr als 0xff
'A'-1 muesste um die 40 liegen habs gerade nicht im kopf
somit kommst auf maximal 55 :D

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jens: Versteh ich nicht.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
adc kannst sicher nehmen, nur musst du es nicht.
die register können nicht überlaufen

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jens: Ich frage mich worüber du hier spricht. Sicher, daß du im
richtigen Thread geantwortet hast? Oder ist es nur zu warm? ;-)

> durch das schieben ist die zahl maximal 4 Bit gross.

Schieben? Wo?

> wenn du nun das 'A'-1 addierst

Wieso 'A'? Es geht hier doch nicht um irgendwelche ASCII-Zeichen.

> 'A'-1 muesste um die 40 liegen habs gerade nicht im kopf
> somit kommst auf maximal 55 :D

Du meinst, er will Buchstaben von A bis O darstellen?

> adc kannst sicher nehmen, nur musst du es nicht.

Oben hast du noch gesagt, er muß das Carry-Flag mitaddieren, was das
adc ja auch tut.

> die register können nicht überlaufen

Das kommt drauf an, wo die LUT im Speicher ist und wie groß sie ist.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ooops

yap falscher Thrad sorry
is ein bissl zu warm ;D

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.