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


von P. M. (skuter)


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

von Karl H. (kbuchegg)


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.

von Peter D. (peda)


Lesenswert?

Ich vermute mal, da fehlt ein
1
.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

von spess53 (Gast)


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

von Peter D. (peda)


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

von spess53 (Gast)


Lesenswert?

Hi

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

MfG Spess

von Uwe (Gast)


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

von Peter D. (peda)


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

von Wolfram Q. (quehl)


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

von P. M. (skuter)


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

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.