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
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
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 :(
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.
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 |
Ich habe den Fehler vermutlich gefunden Ich muss die Flags LDFLAGS += --specs=rdimon.specs -lc -lrdimon entfernen
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.