Forum: Mikrocontroller und Digitale Elektronik AVR ASM Sprungtabelle


von Bruno M. (brumay)


Lesenswert?

Hallo,
ich arbeite an einem asm Programm für einen ATmega48 und wollte eine 
Sprungtabelle nutzen. Die einzelnen Werte entsprechen Uhrzeiten im 5 min 
Schritt:

Sprungtabelle:
.DW     0700,  0705,  0710,  0715,  0720,  0725,  0730,  0735,  0740, 
0745,  0750,  0755,  0800,  0805,  0810,  0815,  0820,  0825,  0830, 
0835,  0840,  0845,  0850,  0855,  0900,  0905,  0910,  0915,  0920, 
0925,  0930,  0935,  0940,  0945,  0950,  0955,  1000,  1005,  1010, 
1015,  1020,  1025,  1030,  1035,  1040,  1045,  1050,  1055,  1100, 
1105,  1110,  1115,  1120,  1125,  1130,  1135,  1140,  1145,  1150, 
1155,  1200

Problem: Im Atmel Studio 6 wird für die Werte 0800 bis 0955 die 
Fehlermeldung "Invalid number" ausgegeben. Die Werte davor und dahinter 
werden anstandslos akzeptiert.

Hat jemand eine Erklärung?

Dank und Gruß

von Stefan F. (Gast)


Lesenswert?

Bruno M. schrieb:
> Hat jemand eine Erklärung?

Die führende Null kennzeichnet Zahlen in oktaler Schreibweise. Oktale 
Ziffern gehen von 0 bis 7.

Bruno M. schrieb:
> Die Werte davor und dahinter werden anstandslos akzeptiert.

Aber im Speicher hast du mit Sicherheit nicht die erwarteten 
Zahlenwerte. Du willst dezimale Zahlen schreiben, die dürfen nicht mit 
einer 0 beginnen.

von Hmmm (hmmm)


Lesenswert?

Lass die führende 0 weg, damit sie nicht als Oktalzahlen interpretiert 
werden.

von Norbert (der_norbert)


Lesenswert?

Werden sie vielleicht als oktale Zahlenwerte interpretiert? ;-)

Argh, Zweiter…

: Bearbeitet durch User
von Max M. (jens2001)


Lesenswert?

Bruno M. schrieb:
> für die Werte 0800 bis 0955 die
> Fehlermeldung "Invalid number" ausgegeben

K.A. welches Format deine Werte haben sollen aber ich vermute einfach 
mal so das nur die Ziffern 0-7 erlaubt sind.

von C-hater (c-hater)


Lesenswert?

Bruno M. schrieb:

> Hat jemand eine Erklärung?

Numerische Literale mit führenden Nullen und ohne weitere Qualifizierer 
werden werden als Oktalzahlen interpretiert.

von Bruno M. (brumay)


Lesenswert?

Stefan F. schrieb:
> Die führende Null kennzeichnet Zahlen in oktaler Schreibweise.

Super, das war mir nicht bekannt!

Danke für die Antworten!

von Falk B. (falk)


Lesenswert?

Bruno M. schrieb:
> ich arbeite an einem asm Programm für einen ATmega48 und wollte eine
> Sprungtabelle nutzen. Die einzelnen Werte entsprechen Uhrzeiten im 5 min
> Schritt:
>
> Sprungtabelle:
> .DW     0700,  0705,  0710,  0715,  0720,  0725,  0730,  0735,  0740,
> 0745,  0750,  0755,  0800,  0805,  0810,  0815,  0820,  0825,  0830,
> 0835,  0840,  0845,  0850,  0855,  0900,  0905,  0910,  0915,  0920,
> 0925,  0930,  0935,  0940,  0945,  0950,  0955,  1000,  1005,  1010,
> 1015,  1020,  1025,  1030,  1035,  1040,  1045,  1050,  1055,  1100,
> 1105,  1110,  1115,  1120,  1125,  1130,  1135,  1140,  1145,  1150,
> 1155,  1200

Was hast du in den letzten 40 Jahren gemacht? Winterschlaf? Stasis? 
Dimensionssprung? Zeitreisen?

So einen Käse programmiert kein Mensch, der auch nur ANSATZWEISE 
Assembler verstanden hat. In so eine Tabelle schreibt man LABELS, keine 
KONSTANTEN!

https://www.mikrocontroller.net/articles/AVR-Tutorial:_Mehrfachverzweigung

Oder soll das eigentlich gar keine Sprungtabelle werden, sondern eher 
ein Datenfeld, aka Array? Danach sieht es nämlich aus.

Kann man so machen, kann man aber auch mittels Formel berechnen, ist ja 
nun weiß Gott einfach.

von MaWin O. (mawin_original)


Lesenswert?

Falk B. schrieb:
> Was hast du in den letzten 40 Jahren gemacht? Winterschlaf? Stasis?
> Dimensionssprung? Zeitreisen?

Hauptsache dummgeschwätzt?

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Nöö, das ist Falk wie wir ihn kennen und lieben... oder eben auch nicht 
lieben. Alles was nicht seiner Stillinie entspricht, muss direkt zu Tode 
gemotzt werden.

von Falk B. (falk)


Lesenswert?

Ben B. schrieb:
> Nöö, das ist Falk wie wir ihn kennen und lieben... oder eben auch nicht
> lieben. Alles was nicht seiner Stillinie entspricht, muss direkt zu Tode
> gemotzt werden.

Daß du die Kritik nicht verstehst, ist nix neues. Dein Gelaber ist auch 
grenzenlos.

von Peter D. (peda)


Lesenswert?

Bruno M. schrieb:
> Die einzelnen Werte entsprechen Uhrzeiten im 5 min
> Schritt:

Du weißt aber schon, daß der ATmega48 einen MUL-Befehl hat.
Die 2 Bytes sind doch leichter berechnet als die Tabelle einzuhacken.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Das ist eine Tabelle, aber doch keine Sprungtabelle. Eine Sprungtabelle 
ist eine Tabelle mit Adressen von Funktionen, die aufgrund des 
Tabellenindex angesprungen werden.

Die Konstanten aber, die in dieser Tabelle stehen, sind ganz 
offensichtlich aber nicht die Adressen von Funktionen, die angesprungen 
werden können, sondern Uhrzeiten in einem merkwürdigen Dezimalformat.

Wozu auch immer das gut sein mag.

von Martin W. (martinw0)


Lesenswert?

Harald K. schrieb:
> Das ist eine Tabelle, aber doch keine Sprungtabelle.

Vermutlich indirekt.
Die Sprungroutine springt anhand des Index auf den richtigen dieser 
Zeit-Werte auf den eigentlichen Eintrag der ungezeigten, echten 
Sprungtabelle...

von Michael U. (amiga)


Lesenswert?

Hallo,

Sprungtabelle ist es für mich auch nicht.
Wertetabelle vielleicht, dann könnte es packed BCD sein.
Dann sind es eben Wordwerte und es sollte so aussehen:
.DW     0x0700,  0x0705,  0x0710, ...

Letztlich weiß aber nur der TO was er da bastelt.

Gruß aus Berlin
Michael

von Oliver S. (oliverso)


Lesenswert?

Michael U. schrieb:
> Letztlich weiß aber nur der TO was er da bastelt.

Bist du dir da sicher?

Oliver

von Michael U. (amiga)


Lesenswert?

Hallo,

Oliver S. schrieb:
> Michael U. schrieb:
>> Letztlich weiß aber nur der TO was er da bastelt.
>
> Bist du dir da sicher?
>
> Oliver

nö...

Gruß aus Berlin
Michael

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.