Avr Studio Porbleme mit dem Flash

OP #2683743
Lesenswert?

Guten Nabend liebe Gemeinde ich probiere mich ein wenig mit dem Flash 
und dem SRAM von meinem atmega8 aus.....

Mein kleines Programm Lädt mir zwei gespeicherte Werte aus dem Flash an 
den PORTB und das selbe mit dem SRAM .....

Das ganze funtioniert auch ohne Probleme nur mein AVR Studio gibt mir 
zwei
Warnungen raus aber wieso ?

C:\Users\MAIN\Desktop\Neuer Ordner\testram.asm(39): warning: .cseg .db 
misalignment - padding zero byte


C:\Users\MAIN\Desktop\Neuer Ordner\testram.asm(42): warning: .cseg .db 
misalignment - padding zero byte


Hier ist das besagte Programm
1
.include "m8def.inc"
2

3
LDI R16 , 0xFF
4
OUT DDRB , R16
5

6

7
LDI R17 , 0xFF
8
OUT PORTB , R17
9

10

11

12
ldi ZL,low(text1*2)   ; Z-Zeiger laden
13
ldi ZH,high(text1*2)
14

15
lpm
16

17
OUT PORTB , R0
18

19
ldi ZL,low(text2*2)   ; Z-Zeiger laden
20
ldi ZH,high(text2*2)
21

22
lpm
23

24
OUT PORTB , R0
25

26
LDI R17 , 0b11001100
27
STS TEST , R17
28

29
LDI R17 , 0x00
30
OUT PORTB , R17
31
LDS R17 , TEST
32
OUT PORTB , R17
33

34
A:
35
RJmp A
36

37

38
text1:
39
    .db 0b10101010
40

41
text2:
42
    .db 0b11110000
43

44
.DSEG
45

46
TEST: .BYTE 1
Gast #2683799
Lesenswert?

Hi

>Achso also ist mein Label nicht groß genug
>so werden wird das zweite Byte leer gelassen ...

Ja. wenn du selbst

text1:
    .db 0b10101010, 0

text2:
    .db 0b11110000, 0

schreibst ist die Warnung weg.

MfG Spess
#2683813
Lesenswert?

Pierre Gnauck schrieb:
>> Ja. wenn du selbst
>>
>> text1:
>>     .db 0b10101010, 0
>>
>> text2:
>>     .db 0b11110000, 0
>>
>
>
> Wofür ist am ende die Null ?

Um das Padding herzustellen!

Ich denke, du hast es immer noch nicht verstanden.
Im Flash wird alles wortweise adressiert, d.h. 2 Byte.

Hast du nur ein einzelnes Byte, dann fügt der Assembler selbsttätig noch 
ein zusätzliches Byte in, damit das nächste Label wieder auf einer 
wortweise adressierbaren Adresse steht. Und er teilt dir das mit.

Du kannst aber auch selbst dieses 1 Byte einfügen, dann hält der 
Assembler die Schnauze.
OP #2683822
Lesenswert?

Doch doch das mit dem Label hatte ich schon verstanden das es aus zwei 
Byte besteht also einem word nur ich wusste jetzt nicht das wenn ich die 
null nach dem Komma schreibe er sie für das Label verwendet .....

Aber gut so ist mein Problem gelöst :) vielen dank an alle und noch eine 
gute Nacht

Mfg Bqube
#2683838
Lesenswert?

Pierre Gnauck schrieb:
> Doch doch das mit dem Label hatte ich schon verstanden das es aus zwei
> Byte besteht

Das 'Label' besteht aus überhaupt nichts. Das Label ist einfach nur ein 
Name.

Stell dir eine lange Reihe von Briefkästen vor. Jeder hat eine Nummer.
Damit man sie als Mensch besser unterscheiden kann, kann man den Kästen 
auch einen Namen geben. Nur gilt die Zusatzvereinbarung: Du kannst immer 
nur Briefkästen mit geraden Nummern einen Namen geben.

Daraus folgt:
Du kannst zwar dem Kasten mit der Nummer 0 einen Namen geben, aber nicht 
dem mit der Nummer 1. Wenn du nach dem Kasten 0 einen anderen Kasten mit 
einem Namen versehen willst, dann musst du den Kasten 2 nehmen.

Nichts anderes hat dir dein Assembler mitgeteilt.
.db reserviert immer soviele Bytes, wie benötigt um deine Initialwerte 
unterzubringen.

   .db  5, 0

reserviert also 2 Bytes.
Wenn das .db ursprünglich auf einer geraden Adresse stand, dann geht es 
nach dem .db automatisch wieder mit einer geraden Adresse weiter, weil 
ja im .db 2 Bytes reserviert wurden.

Das Label gibt dem ganzen dann nur noch einen Namen, damit du es aus dem 
Code heraus ansprechen kannst und dich nicht mit numerischen Adressen 
rumschlagen musst.

Daten:
     .db  5, 0

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren