www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91 - sprintf - Fehlermeldung.undefined reference to end


Autor: Tobias Eckhardt (doenges2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich u.a. diese drei Zeilen in meiner main:

char buffer[128];
sprintf (buffer,"Test Nr. %d", 1);
ks0108_textframe(buffer,&font5x7para,&textboxpara);

sobald ich diesen sprintf Befehl nutzen möchte bekomme ich folgende 
Fehlermeldung von meinem GCC Compiler:


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'

Hat jemand einen Tip?


Gruß


Tobias

Autor: Dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Tobias Eckhardt (doenges2)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Dort habe ich mich schonmal gemeldet, da ich nict so ganz verstehe wo 
ich genau in meiner makefile dieser Zusatz "end" hinsetzen soll:

Im Linkerscript muss ein "end" bereitgestellt werden, welche die
Startaddresse des Heaps festlegt (sbrk ist die "Verbindung" der libc zum
Heap-Speicher. Üblicherweise durch eine Zeile PROVIDE (end = .); je nach
Memory-Layout nach der Linker-Section für .bss oder die stacks.

Habe mal meine makefile angehängt.
Für Tips bin ich sehr dankbar.

Gruß

Tobi

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in welcher include-Datei ist eigentlich sprintf deklariert?

Bernd

Autor: Dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>da ich nict so ganz verstehe wo
>ich genau in meiner makefile dieser Zusatz "end" hinsetzen soll:

Vom makefile ist ja auch nirgends die Rede !
Siehe unten.

>>Im Linkerscript muss ein "end" bereitgestellt werden,
     ^^^^^^^^^^^^

>in welcher include-Datei ist eigentlich sprintf deklariert?

Handbuch oder Dkumentation lesen, oder stdio ?

Autor: Tobias Eckhardt (doenges2)
Datum:
Angehängte Dateien:
  • crt.s (14 KB, 295 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dummy

ups, da  bin ich wohl in der Spalte verrutscht.
das ist ein .end am ende meiner liste.

Gruß
Tobi

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mag es ihm keiner sagen ?

crt.s ist kein Linkerscript. Das ist ne ASM Datei.

Autor: Tobias Eckhardt (doenges2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also,


ich habe ein end am Ende meines Linker Scripts:

/* now define the output sections  */
SECTIONS
{
  . = 0;         /* set location counter to address zero  */

  .text : /* collect all sections that should go into FLASH after 
startup  */
  {
    *(.text)        /* all .text sections (code)  */
    *(.rodata)      /* all .rodata sections (constants, strings, etc.) 
*/
    *(.rodata*)     /* all .rodata* sections (constants, strings, etc.) 
*/
    *(.glue_7)      /* all .glue_7 sections  (no idea what these are) */
    *(.glue_7t)     /* all .glue_7t sections (no idea what these are) */
    _etext = .;     /* define a global symbol _etext just after the last 
code byte */
  } >flash          /* put all the above into FLASH */

  .data :           /* collect all initialized .data sections that go 
into RAM  */
  {
    _data = .;     /* create a global symbol marking the start of the 
.data section  */
    *(.data)       /* all .data sections  */
    _edata = .;    /* define a global symbol marking the end of the 
.data section  */
  } >ram AT >flash  /* put all the above into RAM (but load the LMA 
initializer copy into FLASH)  */

  .bss :            /* collect all uninitialized .bss sections that go 
into RAM  */
  {
    _bss_start = .; /* define a global symbol marking the start of the 
.bss section */
    *(.bss)          /* all .bss sections  */
  } >ram            /* put all the above in RAM (it will be cleared in 
the startup code */

  . = ALIGN(4);     /* advance location counter to the next 32-bit 
boundary */
  _bss_end = . ;    /* define a global symbol marking the end of the 
.bss section */
}
  _end = .;         /* define a global symbol marking the end of 
application RAM */

In meiner makefile sieht die passende Zeile dazu so aus:

main.out: $(OBJECTS) lcd.cmd
  @ echo "..linking"
  $(LD) $(LFLAGS) -o main.out $(OBJECTS) libc.a libm.a libgcc.a

wobei $LFFLAGS für

LFLAGS  =  -Map main.map -Tlcd.cmd

steht und $LD für

LD      = arm-elf-ld -v




Nun stehe ich am Anfang und weiß nicht ganz so weiter, jemand eine Idee?

Gruß

Tobias

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.