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


von Niklas F. (n8fever)


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:
1
.section .init1,"ax",@progbits
2
ldi r16, _BV(SRE)| _BV(SRW00) //Interface aktivieren, 
3
sts MCUCR, r16
4
ldi r16, _BV(SRL2)| _BV(SRW01)|_BV(SRW00)
5
sts XMCRA, r16

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

Jetzt sage ich meinem Linker, was er mit dem Speicher tun soll:
1
EXTMEMOPTS= -Wl, --section-start, .data=0x801100, --defsym=__malloc_heap_start=0x801100, --defsym=__malloc_heap_end=0x807fff
2
3
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?!?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Niklas F. (n8fever)


Angehängte Dateien:

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
1
Build started 10.7.2008 at 21:35:29
2
3
(...)
4
5
avr-gcc.exe: -lm: >>>linker input file unused because linking not done<<<
6
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  ..
7
/../comm/telemetry.c
8
9
(...)
10
11
AVR Memory Usage
12
----------------
13
Device: atmega128
14
15
Program:   57458 bytes (43.8% Full)
16
(.text + .data + .bootloader)
17
18
Data:       3253 bytes (79.4% Full)
19
(.data + .bss + .noinit)
20
21
22
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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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?

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.