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.
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!
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.