AVR asembler - ne/zarovnanie dat

Jan Waclawek wek@evona.sk
Středa Prosinec 15 16:35:44 CET 2004


Jan Kral wrote:
> Ten NOP tam je samozrejme jen aby bylo neco za navestim. I kdyby ty stringy narovnal nejaky prekladac za sebe bez doplneni nulou na sudou delku, tak jak by jste adresoval string, ktery by zacinal na liche adrese?
> Rekl bych, ze je to dano organizaci pameti, ktera je slovo=2bytum.

Pri LPM sa samozrejme adresuje bytovo.

Vynatok z kodu pracujuceho nad tymito datami (schvalne pripajam aj 
komentar ktory tam naozaj mam, som nastvany :-) :


TxTabText:
           push  ZL
           push  ZH
           ldi   ZL,LOW(TextTab*2)
           ldi   ZH,HIGH(TextTab*2)
           clr   r4
           add   acc,acc
           add   acc,acc
           add   ZL,acc
           adc   ZH,r4
           lpm   r4,Z+
           lpm   acc,Z+
           lpm   acc,Z+
           lpm   ZH,Z
           mov   ZL,acc
           rcall TxText
           pop   ZH
           pop   ZL
           ret

TextTab:
           .dw 2*(Text0E-Text0), 2*Text0
           .dw 2*(Text1E-Text1), 2*Text1
           .dw 2*(Text2E-Text2), 2*Text2
           .dw 2*(Text3E-Text3), 2*Text3
           .dw 2*(Text4E-Text4), 2*Text4
           .dw 2*(Text5E-Text5), 2*Text5

Text0:    .db  "Test start...",13   ;make all texts even length... 
(stupid avr assembler)
Text0E:
Text1:    .db  "Testing bit "
Text1E:
Text2:    .db  " - OK. ",13
Text2E:
Text3:    .db  " - error to bit "
Text3E:
Text4:    .db  " - short.",13
Text4E:
Text5:    .db  " - open. ",13
Text5E:
;----------------

Jasne, toto je trivialne a da sa to napisat aj inak; ale v pripade co 
som popisoval, t.j. ze chcem mat za sebou rozne data roznej dlzky a 
chcem si to zapisat nejako pekne prehladne - a nechcem plytvat flashkou 
- to proste nejde.

Cely AVR je taky akysi asymetricky - tu chyba toto a tam sa zas nesmie 
hento a hentam zasa cosi vycnieva.
Fakt je to dobre len pre to blbe cecko, pre cloveka sa to nehodi.

wek


PS. V tom C je to lepsie?



Další informace o konferenci Hw-list