Forum: Compiler & IDEs Umleitung printf


von Tobi (Gast)


Lesenswert?

Hallo,
ich versuche meine printfs mit der Funktion _write(....) umzuleiten.
Leider sind die syscalls in meinen arm-none-eabi enthalten und es kommt 
zu einer mehrfachen Definition von _write(...). Wie kann ich dem Linker 
sagen, dass er die Syscalls ignorieren soll?

MfG
Tobi

: Verschoben durch Moderator
von Random .. (thorstendb) Benutzerseite


Lesenswert?

da war doch was ...

#pragma use_no_semihosting

Musst dafür aber read, write, open, close und ein paar mehr 
implementieren.
Ggf. (armcc) reicht es auch, die fputc(int c, FILE *f); zu überladen.

Welcher Compiler / IDE?

: Bearbeitet durch User
von Tobi (Gast)


Lesenswert?

Das #pragma use_no_semihosting hatte leider keine wikung.
Eine neuere Version des gcc-oe-eabi brachte ein teilerfolg.
Ich muss das Semihostig aktivieren um ei printf über uart zu erhalten :(

von rme (Gast)


Lesenswert?

freopen stdout?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Tobi schrieb:
> Leider sind die syscalls in meinen arm-none-eabi enthalten

Was ist dein „arm-none-eabi“ denn für ein Konglomerat?  Wenn man sowas
in einer Bibliothek drin hat, werden da normalerweise ja nur die
Module rausgezogen, die benötigt werden, und wenn du ein _write() schon
in deinem Code definierst, hat der Linker keinen Grund, einen
entsprechenden Modul aus der Bibliothek zu ziehen.

Am besten, du hängst hier mal das komplette Build-Log mitsamt der
Fehlermeldungen an, damit man eine Idee bekommen kann, was da konkret
schief läuft.

von Tobi (Gast)


Lesenswert?

Mit der TOOLCHAIN gcc-arm-none-eabi-4_9-2015q2 kann ich es kompillieren 
und es kommen keine Fehler oder Warnungen. Jedoch nutzt der µC nur meine 
_write funktion mit aktvierten Semihosting.
Hier meine Flags:
1
CFLAGS   = -g -D inline= -mthumb -mcpu=cortex-m4 -O1 -T STM32_FLASH.ld
2
CFLAGS  += -D PACK_STRUCT_END=__attribute\(\(packed\)\) -Wno-main
3
CFLAGS  += -D ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\) 
4
CFLAGS  += -ffunction-sections -fdata-sections $(INC_PATH)
5
CFLAGS  += -D USE_STDPERIPH_DRIVER -D HSE_VALUE=8000000 -D STM32F4XX -D GCC_ARMCM3 -D VECT_TAB_OFFSET=0x0000
6
CFLAGS  += -Wa,-adhlns="$(OBJ_PATH)/$(subst .o,.lst,$@)" -Wno-attributes
7
CFLAGS  += -mfloat-abi=hard
8
CFLAGS  += -mfpu=fpv4-sp-d16
9
CFLAGS  += -Wno-unused-variable
10
LFLAGS   = -Xlinker -M -Xlinker -Map=$(BIN_PATH)/$(PROJ_NAME).map
11
LFLAGS  += $(LIB_PATH) -Xlinker --gc-sections --specs=rdimon.specs -lc -lrdimon
12
OFLAGS   = -O srec
13
ODFLAGS  = -x
14
SZFLAGS  = -B -d

von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

und hier mein kleiner Build log

von Tobi (Gast)


Lesenswert?

Ich habe den Fehler vermutlich gefunden
Ich muss die Flags
LDFLAGS += --specs=rdimon.specs -lc -lrdimon
entfernen

von Klaus W. (mfgkw)


Lesenswert?

Wenn du -lc weglässt, hast du gar nichts aus der C-Lib mehr

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Tobi schrieb:
> und hier mein kleiner Build log

Die Option -v macht das Teil recht geschwätzig und wenig übersichtlich,
aber einen Fehler kann ich darin nicht entdecken.

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.