Forum: Mikrocontroller und Digitale Elektronik arm-yagarto - heapSektion!


von Tobias E. (doenges2)


Angehängte Dateien:

Lesenswert?

Hallo,

ich komme einfach bei einer simplen sprintf Funktion zur Verzweiflung.

Der Compiler schriebt mir folgende Fehlermeldung:

GNU ld version 2.17
libc.a(syscalls.o): In function `_sbrk':
../../../../../../newlib-1.14.0/newlib/libc/sys/arm/syscalls.c:500:
undefined reference to `end'


darafi hin habe ich mittlerweile schon herausgefunden das es im groben 
um das definieren einer Heapsektion geht, was ich nicht in meinem 
Linkerscript gemacht habe.
Ist das so richtig?

Da ich nicht genau weiß wie man das einbindet in mein linker script habe 
ich die Frage ob jemand dafür schon was hat?

Ich benutzte das yagarto paket (GCC) mit einem AT91 von Atmel.

Vielen Dank.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Es klemmt am _ des Symbolnamens.

Ändere diese Zeile
1
   _end = .;

in diese Zeile
1
   _end = .; PROVIDE (end = .);

Damit machst du dem Linker neben _end ein weiteres Symbol end bekannt, 
welches den den aktuelle RAM-Adresse (= .) besitzt.

Yagarto (und WinARM) haben im Ordner Linkerskripts. An denen kann man 
sich ein Beispiel nehmen.
...\arm-elf\lib\ldscripts

WiNARM hat auch jede Menge Beispiele in ...\examples inkl. etliche 
Linkerscripts (*.ld). Es lohnt sich dort zu stöbern!

von Tobias E. (doenges2)


Lesenswert?

Hallo Stefan,


danke....klappt.
Allerdings nimmt die ganze lib ca. 40kb weg!
Gibt es da, ähnlich wie der Optimierungsgrad beim kompilieren, eine 
Möglichkeit das ganze zu verkleinern. ICh benötige im Prinzip auch nur 
die sprintf Funktion für integer.

Gruß
Tobi

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Nimm statt "sprintf für integer" die Funktion itoa zur Umwandlung 
Integer nach ASCII-String.
http://www.mikrocontroller.net/articles/FAQ#itoa.28.29

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.