mikrocontroller.net

Forum: Compiler & IDEs (Atmega128) externer RAM (z.B. Ethernut-Board 2.1) makefile MCUCR


Autor: Niklas Fink (n8fever)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich will das mein Atmega128 mallloc() in den externen Speicher 
(0x1100-0x7fff) suchen schickt,
aber irgendwie macht er das nicht :-(

(Ich benutze das sog. Ethernutboard 2.1 mit eingebautem ext. Ram)

Nun habe ich also folgendes gemacht:
Im MCUCR-Register Speicherinterface und waitstates aktiviert.
Dazu habe ich in Assembler in die Datei xram.S geschrieben:
.section .init1,"ax",@progbits
ldi r16, _BV(SRE)| _BV(SRW00) //Interface aktivieren, 
sts MCUCR, r16
ldi r16, _BV(SRL2)| _BV(SRW01)|_BV(SRW00)
sts XMCRA, r16

In meinem Makefile binde ich das so ein:
xram.o: ../xram.S
$(CC) $(INCLUDES) $(ASMFLAGS) -c $<

Jetzt sage ich meinem Linker, was er mit dem Speicher tun soll:
EXTMEMOPTS= -Wl, --section-start, .data=0x801100, --defsym=__malloc_heap_start=0x801100, --defsym=__malloc_heap_end=0x807fff

LDFLAGS += $(EXTMEMOPTS)

Wer mehr über das Makefile wissen will: ANHANG

Sehr zu meiner Enttäuschung kriege ich aber nur pointer von malloc, die 
im internen Speicher liegen.

Was mache ich nur Falsch?!?

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

Bewertung
0 lesenswert
nicht lesenswert
Niklas Finck wrote:

> Wer mehr über das Makefile wissen will: ANHANG

Welcher denn?

Ansonsten: die Leerzeichen in den Linkeroptionen gehören da nicht
hin.  Allerdings gehe ich mal davon aus, dass du die im Original
nicht drin hast, sonst würder der Compiler dir das sagen.

Werden die LDFLAGS denn auch benutzt?  Das solltest du auf der
Kommandozeile, die das Linken veranlasst, ja sehen können.

Autor: Niklas Fink (n8fever)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wurde mir garnicht als Warning angezeigt, aber ich habe dort gesucht, wo 
du es gesagt hast und habe gefunden:
Also:
linker input file unused because linking not done
Build started 10.7.2008 at 21:35:29

(...)

avr-gcc.exe: -lm: >>>linker input file unused because linking not done<<<
avr-gcc.exe -I"C:\.." -mmcu=atmega128 -Wall -gdwarf-2  -g -DF_CPU=14745600UL -O0 -fsigned-char -lm -MD -MP -MT telemetry.o -MF dep/telemetry.o.d  -c  ..
/../comm/telemetry.c

(...)

AVR Memory Usage
----------------
Device: atmega128

Program:   57458 bytes (43.8% Full)
(.text + .data + .bootloader)

Data:       3253 bytes (79.4% Full)
(.data + .bss + .noinit)


Build succeeded with 1 Warnings...

Ja, die Leerzeichen waren nur der besseren Lesbarkeit halber. Im 
Eingabefeld schien es noch unlesbar.

Wie mache ich es jetzt richtig?
Gerne auch einen link.

Ein Link zum Linker-Problem ;-)

P.S.:
Die warning ist eine unbenutzte Variable

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

Bewertung
0 lesenswert
nicht lesenswert
Das ist nicht die Linker-Kommandozeile (schreibt er ja: ``because
linking not done'').  Das -lm darin ist völlig daneben.  Es wird
natürlich auch nichts schaden (wird halt ignoriert), aber es deutet
darauf hin, dass da manches durcheinander gegangen zu sein scheint.

Kannst du nicht einfach mal ein komplettes Build-Log als Anhang
posten?

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.