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?!?