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
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
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
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
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.
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
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
Eine eigene Frage?
Dieser Thread ist über 14 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.