mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik avrasm32.exe zeigt falsche ROM/RAM/EEPROM Belegung


Autor: P. M. (skuter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

geht eigentlich um reine Optik.

Beim Assemblieren zeigt der avrasm32.exe (v 2.1.7) eine Übersicht über 
die Belegung:

----snip----

ATmega32 memory use summary [bytes]:
Segment   Begin    End      Code   Data   Used    Size   Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x0069a6  26002   1030  27032 9999999   0.3%
[.dseg] 0x000060 0x0001e2      0    386    386 9999999   0.0%
[.eseg] 0x000000 0x000080      0    128    128 9999999   0.0%


Was mich daran stört, daß (obwohl alles funktioniert, sogar das Device 
richtig ist) die prozentuale Speicherbelegung falsch ist.

Wie kann ich den Assembler dazu brinen statt 9999999 die richtigen 
Größen anzuzeigen (und damit die prozentuale Belegung auch) ?
Wenn er schon das Device kennt, warum zeigt er nicht gleich die Größen 
an ?


Gruß
Peter

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter S. wrote:
>
> Wie kann ich den Assembler dazu brinen statt 9999999 die richtigen
> Größen anzuzeigen (und damit die prozentuale Belegung auch) ?

Indem du beim Hersteller deines avrasm32 einen Bug reklamierst
und um Behebung des Bugs bittest.

> Wenn er schon das Device kennt, warum zeigt er nicht gleich die Größen
> an ?

Programmfehler. Gibts auch auf PC. Besonders beliebt waren/sind
da die Setup Routinen, bei denen das Setup dann schon 178% deines
Programmes installiert hat.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute mal, da fehlt ein
.include "m32def.inc"
in Deinem Code.

Und daher stimmen die Size-Angaben nicht.

Oder der Assembler ist zu alt, ich benutze:

AVRASM: AVR macro assembler 2.1.12 (build 87 Feb 28 2007 07:31:13)
Copyright (C) 1995-2006 ATMEL Corporation


Peter

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Das liegt an deinen Include-Dateien. Du musst die im Ordner 
AVRASSEMBLER2 benutzen. Alternativ funktioniert das Einfügen folgender 
Programmzeilen am Programmanfang:

  #pragma AVRPART MEMORY PROG_FLASH 131072
  #pragma AVRPART MEMORY EEPROM 4096
  #pragma AVRPART MEMORY INT_SRAM SIZE 4096
  #pragma AVRPART MEMORY INT_SRAM START_ADDR $0100

Die Speichergrößen müssten entsprechend angepasst werden.

MfG Spess

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 wrote:
> Das liegt an deinen Include-Dateien. Du musst die im Ordner
> AVRASSEMBLER2 benutzen.

Wenn man das AVRStudio installiert hat, wird automatisch das richtige 
Includeverzeichnis benutzt.


Peter

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wenn der Pfad in der '.include'-Anweisung explizit angegeben wird, geht 
das schon.

MfG Spess

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
>Wenn man das AVRStudio installiert hat, wird automatisch das richtige
>Includeverzeichnis benutzt.
Aber nur wenn aus AVRStudio übersetzt wird. Es geht auch anders.
avrasm32.exe ist der alte Assembler, den musst du auch mit den alten
.def's füttern. Der neue Assembler nennt sich avrasm2 und die 
zugehörigen
.def's solltest du benutzen. Zu erkennen sind sie an etlichen 
#pragma-Einträgen.
Siehe auch: Beitrag "Re: AVRASM2.exe ist für graue Haare geeignet"
MFG Uwe

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uwe wrote:

> Aber nur wenn aus AVRStudio übersetzt wird. Es geht auch anders.
> avrasm32.exe ist der alte Assembler, den musst du auch mit den alten
> .def's füttern. Der neue Assembler nennt sich avrasm2 und die
> zugehörigen
> .def's solltest du benutzen.

Nö, geht auch außerhalb des AVRStudio.
Der AVRASM2 findet die Includes auch auf der Kommandozeile.
Es wird der Eintrag "AvrAssemblerPath" in der Registry angelegt.


Peter

Autor: Wolfram Quehl (quehl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum immer die Registry vollmüllen? In der hilfeanzeige von AVRASM2 
wird gezeigt, wie man das Includeverzeichnis auf der Kommandozeile 
angibt. Hab ich allerdings auch erst etwas später gefunden.

mfg

Autor: P. M. (skuter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Leute !

Die Pragmas waren es.

Sie waren nicht bei mir drin, weil ich einen alten Compiler (+ alte 
Includes) verwende.
An den bin ich aber gebunden, wegen der vorgegebenen FastAVR 
Entwicklungsumgebung (und der benutzt den avrasm32.exe).
Leider funktionieren die neuen Includes nicht mit dem FastAVR, wegen der 
Hex-Codierung: FastAVR benötigt statt 0xXXX die $XXX Notation.
Die neuen Includes haben die 0x Notation und dann gibt es "Unsupported 
device". Der scheint sich die Adressen aus dem Include zu holen.

Da ich nicht alle Includes jedesmal patchen möchte habe ich die Pragmas 
als Inline-Assembler eingetragen und es funktioniert.

Danke für den Tip.

Gruß
Peter

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.