hallo,
ich möchte gerne ereeichen, dass meine anwendung einen anderen bereich
aus dem SRAM verwendet als sonst.
gesagt, getan. linker-script geändert und auf geht's:
data (rw!x) : ORIGIN = 0x802000, LENGTH = 0xffa0
aber dennoch, im map-file wird immer in adresse 0x00800100 begonnen.
avr-readelf bestätigt mir das:
[ 1] .data PROGBITS 00800100 00395e 00022a 00 WA
0
wie mache ich es statt dessen, so dass es funktioniert?
danke,
bye kosmo
kosmonaut pirx wrote:
> aber dennoch, im map-file wird immer in adresse 0x00800100 begonnen.
Vermutlich, weil der Compiler das überschreibt. Das ist bei allen
AVRs der Fall, bei denen der SRAM nicht auf 0x800060 anfängt.
> wie mache ich es statt dessen, so dass es funktioniert?
Du überschreibst es dem Compiler nochmal. ;-)
... -Wl,--section-start=.data=0x802000
hallo jörg,
das ist genau das, was ich nicht will. nicht in jedem Makefile den
compiler- bzw. linkerswitch benutzen.
verstehe nicht, warum der compiler das überschreiben sollte .. das
linkerscript gehört dem linker, niemandem sonst. aber er kann das
vorgeben, ja, das akzeptiere ich.
ich habs nun so gemacht, dass ich die data-section explizit über eine
konstante ändere:
nicht so schön, aber geht erstmal.
darf ich noch eine frage zur gcrt stellen?
(rhetorische frage, ich weiß :)
ich versuche, einzelen sections zu discarden. ich will die .vectors raus
haben. das geht per /DISCARD/-ab schnitt im script. der linker
beschwert sich zu recht über eine .text aus der gcrt, die .vectors
referenziert. die kommt hier her:
1
/* Handle unexpected interrupts (enabled and no handler), which
2
usually indicate a bug. Jump to the __vector_default function
3
if defined by the user, otherwise jump to the reset address.
4
5
This must be in a different section, otherwise the assembler
6
will resolve "rjmp" offsets and there will be no relocs. */
7
8
.text
9
.global__bad_interrupt
10
.func__bad_interrupt
11
__bad_interrupt:
12
.weak__vector_default
13
.set__vector_default,__vectors
14
XJMP__vector_default
15
.endfunc
16
17
.section.init0,"ax",@progbits
18
.weak__init
19
;.func__init
gibts vielleicht schon eine lösung für sowas? ich verstehe das problem
auf anhieb auch nicht, davon mal abgesehen. könnte man nicht einfach
eine
explizite .bad-vectors schaffen, die sich um sowas kümmert? die
anweisungen in .text zu packen finde ich höchst unschön, weil ja jeder
.text benutzt.
danke,
bye kosmo
kosmonaut pirx wrote:
> verstehe nicht, warum der compiler das überschreiben sollte ..
Weil das Linkerscript derzeit nur pro AVR-Klasse (avr1...avr6) da ist,
aber die einzelnen Mitglieder der Klasse unterschiedliche
RAM-Startadressen haben. Daher gibt der Compiler für alle AVRs, bei
denen der RAM nicht auf 0x800060 ist eine -Tdata-Option mit an den
Linker.
> ich versuche, einzelen sections zu discarden. ich will die .vectors> raus haben.
Mir wäre es lieber, wenn wir diesen Teil von gcrt1.S customizable
bekämen, sodass man das nicht via Linkerscript machen muss.
Vielleicht magst du ja ein Schema entwickeln, mit dem man die Vektoren
optional bekommt?
Du kannst das auch gern auf der avr-libc-dev Mailingliste diskutieren.
> beschwert sich zu recht über eine .text aus der gcrt, die .vectors> referenziert. die kommt hier her:
Istallier' doch einen anderen __vector_default, das müsste im
Zweifelsfalle mit --defsym=__vector_default=0 gehen.
guten morgen,
>Weil das Linkerscript derzeit nur pro AVR-Klasse (avr1...avr6) da ist,>aber die einzelnen Mitglieder der Klasse unterschiedliche>RAM-Startadressen haben. Daher gibt der Compiler für alle AVRs, bei>denen der RAM nicht auf 0x800060 ist eine -Tdata-Option mit an den>Linker.
ok, kann man mit leben. nur ärgerlich, dass man das auf diese weise
erfährt und vorher schon am linkerscript zu zweifeln beginnt.
sollte ich bei gelegenheit mal einen eintrag im tutorial oder wo es sich
eben anbietet machen. aber so eine richtige stelle fällt mir da grad
nicht ein. na mal gucken.
>Mir wäre es lieber, wenn wir diesen Teil von gcrt1.S customizable>bekämen, sodass man das nicht via Linkerscript machen muss.>Vielleicht magst du ja ein Schema entwickeln, mit dem man die Vektoren>optional bekommt?>Du kannst das auch gern auf der avr-libc-dev Mailingliste diskutieren.
hab ich auch schon dran gedacht, ja. wenn ich eine idee habe, wie das
optional gehen könnte, werde ich das dort auch kund tun.
>Istallier' doch einen anderen __vector_default, das müsste im>Zweifelsfalle mit --defsym=__vector_default=0 gehen.
falls das auch per linkerscript geht, ist das bestens. werde ich
ausprobieren.
vielen dank für die hilfe,
bye kosmo
hallo,
nur zur info, vielleicht brauchts ja mal wer:
muss mich selber korrigieren:
>ich habs nun so gemacht, dass ich die data-section explizit über eine>konstante ändere:
>nicht so schön, aber geht erstmal.
das verschieben der start-adresse im SRAM funktioniert so nicht. die
explizite angabe der VMA soll laut ld-doku zwar stets funktionieren. aus
http://sourceware.org/binutils/docs-2.17/ld/Output-Section-Address.html#Output-Section-Address
"The address is an expression for the VMA (the virtual memory address)
of the output section."
das tut der avr-ld aber anders. hier gilt nur die compilervorgabe.
frust
hth irgendwann irgend jemandem,
bye kosmo