Forum: Mikrocontroller und Digitale Elektronik kompilerfehler wenn Funktion gcvt() verwendet


von Alex (haidanai)


Lesenswert?

Hallo,
ich arbeite mit Atmel Studio 7 / GCC und
habe das Problem, dass wenn ich die Funktion gcvt() mit #include 
<stdlib.h>
im Code verwende, kommt die Compiler-Fehlermeldung:
"undefined reference to '_sbrk' sbrk.c"
Was muss ich da noch einbinden?

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Ähmm...
Ist dtostrf() nicht etwas praktikabler?

Ja, ich weiß, das ist nicht die Antwort, die du dir gewünscht hast.

von Alex (haidanai)


Lesenswert?

> Ist dtostrf() nicht etwas praktikabler?
Ich habe es mit sprintf() probiert und einen RAM-Überlauf bekommen.
obwohl ich #include <stdlib.h> und #include <stdio.h> habe,
kennt er die Funktion dtostrf() nicht!

von Oliver S. (oliverso)


Lesenswert?

Alex schrieb:
> Hallo,
> ich arbeite mit Atmel Studio 7 / GCC

Welches Target? C oder C++?

Oliver

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Alex schrieb:
> kennt er die Funktion dtostrf() nicht!
1
#include "stdlib.h"
2
3
int main() 
4
{
5
  char buf[50];
6
  char * str =  dtostrf(3.141592653589793238462643383279502884197169399375, 49, 16, buf);
7
}
avr-gcc-14.2.0
Sowohl in C als auch C++

Alex schrieb:
> Ich habe es mit sprintf() probiert und einen RAM-Überlauf bekommen.
Aha?

Alex schrieb:
> _sbrk
Hängt mit der dynamischen Speicherverwaltung bzw. Stack zusammen.
Ich vermute bei dir läuft ganz was anderes falsch.

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Alex schrieb:
> "undefined reference to '_sbrk' sbrk.c"

Wenn es sich wirklich um avr-gcc / GNU Tool handelt:

Um welche Compliler-Version geht es?

Und vor allem: Welche Libc wird verwendet?  AVR-LibC verwendet nirgends 
sbrk, und es gibt auch kein Modul sbrk.c

Verwendet du etwa diese unsäglich verkorxte Microchip Version mit xc8?

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Alex schrieb:
> Ich habe es mit sprintf() probiert und einen RAM-Überlauf bekommen.

Deswegen verwendet man snprintf.

von Oliver S. (oliverso)


Lesenswert?

Johann L. schrieb:
> AVR-LibC verwendet nirgends sbrk, und es gibt auch kein Modul sbrk.c

So ist es. Und die kennt auch kein gcvt(). Ist also alles gleich doppelt 
seltsam.

Die Fehlermeldung gibt's aber z.B. bei Toolchains, die newlib als C++ 
standardlib verwenden. Da muss man dann a) RTFM und danach b) sbrk 
selber implementieren. Google weiss darüber aber bescheid.

Oliver

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Oliver S. schrieb:
> Toolchains, die newlib

Da würd ich eher eine AVR Toolchain besorgen / bauen die AVR-LibC 
verwendet.

von Alex (haidanai)


Lesenswert?

Hallo, vielen Dank schonmal für eure Hilfe.
Zu euren Fragen:
> Welches Target? C oder C++?
C
> Um welche Compliler-Version geht es?
Atmel Studio 7.02397, Compiler ist der, den das Studio benutzt.
Was wichtiger ist: Ich habe kein Atmel Start und kein ASFx benutzt!
Meine Includes:
#include "sam.h"
#include <stdbool.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

> Welche Libc wird verwendet?
Hui, ARM/GNU Linker-Libraries, da steht nur libm.
Ist das OK?

> Deswegen verwendet man snprintf.
Werde ich ausprobieren.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Alex schrieb:
> Meine Includes:

Da das von Dir gepostete eine Fehlermeldung des Linkers ist, sind die 
uninteressant. Entscheidender sind die Libraries. Sieh Dir die 
tatsächliche Kommandozeile des Linkeraufrufs an, nicht das vorverdaute 
Textfeld in der GUI Deiner Entwicklungsumgebung.

von Alex (haidanai)


Lesenswert?

> Sieh Dir die tatsächliche Kommandozeile des Linkeraufrufs an
Ja und wo finde ich die? Makefile?

von Oliver S. (oliverso)


Lesenswert?

Alex schrieb:
> Meine Includes:
> #include "sam.h"

Wie gesagt, RTFM, und dann sbrk selber implementieren.

Oliver

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.