www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Studio Simulator für ATmega1280


Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hat jemand mal erfahrung mit der Simulation des ATmega1280 im AVR Studio 
gemacht.
Irgendwie funktioniert die Memory Watch Funktion niht richtig.
Ich habe zum Beispiel einen String im Flash liegen.
Im Watch windows wenn ich die variable eingebe sagt mir AVR Studio die 
Variable fängt bei 0x0114 and. Dabei hat die Variable auch den richtigen 
Inhalt den ich initialisiert habe.
Jedoch im Memory Window wo man den kompletten Speicher sehen kann.
liegt der String ganz woanders. Wie kann das sein? Dort fängt der String 
nämlich bei 0x8A an.

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das eine Fenster wird in Bytes zählen, das andere in 'word's also 16-Bit 
Portionen, weil der Flash so organisiert ist (und zufällig ist 0x0114 / 
2 = 0x8A ;) )

hth. jörg

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Häääää????
Mus man das verstehen?
Die Fenster geben doch die absolute Adressen an

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

richtig. Der Flash ist Word-organisiert, also 16Bit breit.
Die angezeigten Adressen sind also Word-Adressen.
Per Programm liest der AVR den Flash aber Byte-weise, damit sind die 
Adressen also *2, weil ein 16Bit = 2 Byte.

Hätten die Entwickler des AVR das anders gemacht, müßte man immer 
Word-weise z.B. in 2 Register lesen, auch wenn man nur ein Byte lesen 
will...

Gruß aus Berlin
Michael

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael U. wrote:

> Der Flash ist Word-organisiert, also 16Bit breit.

Nur für die Befehlslesezyklen.  LPM arbeitet byteweise, damit ist
das Prinzip aufgeweicht.

> Hätten die Entwickler des AVR das anders gemacht, müßte man immer
> Word-weise z.B. in 2 Register lesen, auch wenn man nur ein Byte lesen
> will...

Häh?  Was hat die Darstellung der Adressen mit der Granularität des
Speichers zu tun?  Es gibt keine rechte Entschuldigung für diesen
Quatsch, außer vielleicht, dass ,,schräge'' Architekturen (wie PICs
mit ihren 12- und 14-bittigen Befehlswörtern) keine rechte Chance
haben, Dinge sauber als Bytes auszudrücken.  ,,Richtige'' RISC-CPUs
benötigen oftmal eine 32- (oder gar 64-)bit-Granularität, d.h. deren
Speicherbus ist komplett 32-bittig ausgeführt und nur auf ganzen
(32-bit-)Wortadressen zugreifbar (sonst bekommt man einen misalignment
trap), trotzdem drücken die alle Adressen als Byteadressen aus, weil
das einfach für die Gewohnheiten der Programmierer verständlicher ist.

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@Jörg Wunsch: ich stelle jetzt einfach die gewagte Behautpung auf, daß 
ein µC sich nur relativ wenig aus schrägen Architekturen macht, die 
Entwickler desselben schlicht eine Hardware bauen müssen. Ob die jetzt 
onChip ist oder als diskrete Bauteile, macht für mich da erstmal wenig 
Unterschied.
Also ist ein Speicher"chip" physikalisch irgendwie aufgebaut. Mit 
irgendeiner Bit-Breite. Damit werden eben soundsoviele Bits parallel 
gelesen oder geschrieben. Ob im AVR jetzt 2 8Bit-organisierte Speicher 
sind, von denen für das Programm beide gleichzeitig und für LPM beide 
einzeln angesprochen werden oder umgekehrt, ist nur eine Sache der 
internen "Verdrahtung". Die ist aber vom Hersteller halt so beschlossen.
Atmel spricht von 16Bit-Flash, bleibe ich also dabei.

Ob es lesbarer gewesen wäre, wenn man den Programmierern erklärt hätte, 
daß ein AVR seinen Programmcounter immer in 2er-Schritten erhöht?

Ich glaube kaum.

Gruß aus Berlin
Michael

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ob es lesbarer gewesen wäre, wenn man den Programmierern erklärt hätte,
> daß ein AVR seinen Programmcounter immer in 2er-Schritten erhöht?

Das machen zumindest andere RISCs so.  Die unteren Bits kannste ja dann
hardwaremäßig auf 0 verdrahten, und ein Sprungbefehl kann diese beim
Adressieren weglassen (es programmiert ja heutzutage eh keiner mehr im
Maschinencode).

Es wäre jedenfalls manches damit einfacher geworden.  Dieses Hin- und
Hergeschiebe kostet einige Verrenkungen in den Tools (im Compiler
zum Beispiel).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.