Forum: Mikrocontroller und Digitale Elektronik Avr Studio Porbleme mit dem Flash


von Pierre G. (bqube)


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

von spess53 (Gast)


Lesenswert?

Hi

AVRs können Labels, 'text1' , 'text2' nur auf Wordadressen ablegen. Da 
du aber pro Label nur ein Byte benutzt wird ein $00 eingefügt. Also kein 
Grund zur Panik.

MfG Spess

von Pierre G. (bqube)


Lesenswert?

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

Ist das nur eine Info von Avr Studio das ich den ganzen Platz nicht 
verwende :) gut zu wissen

Mfg Bqube

von spess53 (Gast)


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

von Pierre G. (bqube)


Lesenswert?

> Ja. wenn du selbst
>
> text1:
>     .db 0b10101010, 0
>
> text2:
>     .db 0b11110000, 0
>


Wofür ist am ende die Null ?

Mfg Bqube

von spess53 (Gast)


Lesenswert?

Hi

>Wofür ist am ende die Null ?

Nach dem Komma.

MfG Spess

von Pierre G. (bqube)


Lesenswert?

Ja genau die nach dem komma

 text2:
     .db 0b11110000, 0 <------

Aber du hast recht die Warnung ist jetzt weg

Mfg Bqube

von Karl H. (kbuchegg)


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.

von Pierre G. (bqube)


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

von Karl H. (kbuchegg)


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

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.