AT90:Code Frage

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
Hallo

wie definiere ich im ROM-Bereich des o.g. eine Tabelle mit 256 Einträgen  a
16 bit?

mit 256 * .dw ist es zu aufendig.

Robert

Re: AT90:Code Frage
Hi

Quoted text here. Click to load it
gen  a20%
Quoted text here. Click to load it

Irgendwie musst du die Werte doch angeben - also wirst du um das
eintippen nicht herumkommen. Du kannst natuerlich mehrere Werte pro
Zeile angeben:
2E%dw 2,3,5,7,11,13,17,19,23

Wenn du zu faul bist, 256 Nullen einzutippen, kann ich dir ja
vielleicht helfen:

table:
2E%dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2E%dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2E%dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2E%dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2E%dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2E%dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2E%dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2E%dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

SCNR.
Bye,
Thomas


Re: AT90:Code Frage
Quoted text here. Click to load it
a




            .cseg
table:    .dw     0x00, 0x01, 0x02, 0x03, ...
            .dw     0x10, 0x11, 0x12, 0x13, ....


Schon mal in die Doku geschaut?

http://www.atmel.com/dyn/resources/prod_documents/doc1022.pdf

Georg




Re: AT90:Code Frage
Quoted text here. Click to load it
Die Eintraege sollen ja wohl nicht alle 0 sein, also was sonst ausser DW ?
--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff /
We've slightly trimmed the long signature. Click to see the full one.
Re: AT90:Code Frage
Quoted text here. Click to load it
gen  a
Quoted text here. Click to load it

2E%rept 256
2E%byte 0x23,0x45
2E%endr

wFC%rde ich beim avr-as bzw. gcc verwenden :-)
Die Repeats und endr. lassen sich dabei auch beliebig schachteln.


Mir ist allerdings nicht klar welchen Inhalt das ganze dann haben soll
:-)



GruDF%
    Klaus

Re: AT90:Code Frage

Quoted text here. Click to load it
Ich habe eine Reihe von Unterprogrammen, die mit ijmp ausgeführt werden
sollen. Der Befehl ijmp verzweigt dahin, wo das z-Register hinzeigt.

Der Inhalt des Z-Registers soll jetzt gebildet werden. Das bedeutet, dass
ich eine Adresse aus einer Tabelle lesen muss.

Beispiel: ich will Befehl Nr 60 ausführen, dann lade ich 60, shifte das
einmal nach links und addiere das Ergebnis des Shiftens (mit Cy) zum
Tabellenoffset. Im adressiertem Feld steht dann die 16-bit-Sprungadresse,
die in das Z-Register geladen wird.

Am einfachsten hätte ich gerne eine Tabelle mit Labeln der Unterprogramme.

Für Ideen dankbar

Robert

Re: AT90:Code Frage
Warum schreibst du dann nicht einfach die Labels in die .dw Zeilen?

label1: ...

.dw     label1


mfg
Andreas

R.Freitag wrote:
Quoted text here. Click to load it


Re: AT90:Code Frage
Quoted text here. Click to load it

Ja und warum das alles in manuellen Tabellen???? Das geht auch in C
vF6%llig ohne
Overhead:

void f1(void) {
}

void f2(void) {
}

void f3(void) {
}

#define FLASH __attribute__ ((progmem)) =


void FLASH (*const ptr[] )() 3D% { =

    f1,
    f2,
    f3
};

int main() {
    int tt; =

    for (tt3D%0; tt<3; tt++) { =

        ptr[tt]();
    }

    return 0;
}

Der Compiler baut Dir Deine Tabelle:
0000001a <__ctors_end>:
  1a:   2c 00           .word   0x002c  ; =

  1c:   2d 00           .word   0x002d  ; =

  1e:   2e 00           .word   0x002e  ; =


Und der Zugriff ist wie gewFC%nscht:
  66:   ca e1           ldi     r28, 0x1A       ; 26    Y wird mit dem
Zeiger auf die tabelle geladen
  68:   d0 e0           ldi     r29, 0x00       ; 0
  6a:   0c 2f           mov     r16, r28        integer counter //ist ja nur
wg. der for schleife
  6c:   1d 2f           mov     r17, r29
  6e:   0c 5f           subi    r16, 0xFC       ; 252
  70:   1f 4f           sbci    r17, 0xFF       ; 255
  72:   e9 91           ld      r30, Y+            und hier wird aus der tabelle
der Wert nach Z gebracht
  74:   f9 91           ld      r31, Y+
  76:   09 95           icall                und per icall die Funktion ge-icalled
  78:   0c 17           cp      r16, r28        und wieder der rest der
for-Schleife
  7a:   1d 07           cpc     r17, r29
  7c:   d4 f7           brge    .-12            ; 0x72
                =


Wozu bitte Assembler?????

Nur mal so als Anregung, den C ist besser als der Ruf. Mit -mint8 kann
man auch mit 8 Bit
integern Schleifen bauen usw. Besser kriegst Du es nicht hin....

Wenn doch, ich wills sehen :-))))

GruDF%
    Klaus

Site Timeline