Я реализую retarget.c, чтобы перенаправить вывод printf на последовательный порт для отладки, он может быть связан и работает очень хорошо, если моей команде ссылки нравится это:
arm-none-eabi-gcc --specs=nano.specs --specs=nosys.specs -g -mcpu=cortex-m4 -mthumb -fmessage-length=0 -std=c99 -fno-builtin -Wl,--gc-sections -Wl,-Map=main.map -T"$(LINKERFILE)" -o main.elf main.o retarget.o $(BUILDDIR)/libs.a -Wl,--start-group -lgcc -lc -lnosys -Wl,--end-group
но когда я архивирую retarget.o
в файл архива $(BUILDDIR)/libs.a
, и команде ссылки нравится этот:
arm-none-eabi-gcc --specs=nano.specs --specs=nosys.specs -g -mcpu=cortex-m4 -mthumb -fmessage-length=0 -std=c99 -fno-builtin -Wl,--gc-sections -Wl,-Map=main.map -T"$(LINKERFILE)" -o main.elf main.o $(BUILDDIR)/libs.a -Wl,--start-group -lgcc -lc -lnosys -Wl,--end-group
он может быть успешно слинкован, но функция printf ничего не выводит на последовательный порт, кажется, что функции моей собственной версии, такие как _write
в retarget.c, не используются в окончательной скомпилированной программе.
$(LIBSFILE)
? Я думаю, вы должны преобразовать свой скомпилированный код в статическую или динамическую библиотеку, чтобы делать то, что вы хотите. - person LPs   schedule 25.01.2016-Wl,--start-group -lgcc -lc -lnosys -Wl,--end-group
в командной строке, затем команду ссылки, например:arm-none-eabi-gcc --specs=nano.specs --specs=nosys.specs -g -mcpu=cortex-m4 -mthumb -fmessage-length=0 -std=c99 -fno-builtin -Wl,--gc-sections -Wl,-map=main.map -T"$(LINKERFILE)" -o main.elf main.o $(BUILDDIR)/libs.a
, но результат все тот же, функция printf ничего не выводит на последовательный порт - person xingkong   schedule 27.01.2016nosys.specs
сначала была связана другая библиотека. Кажется, я нашел ответ где-то еще, вот ссылка: sourceware.org/ml/ новая библиотека/2006/msg00036.html - person xingkong   schedule 31.01.2016