我在一个名为small_printf.c的文件中有一个本地版本的sprintf和printf1。工作正常,将调试消息写入串行端口(使用minicom查看的消息)。当然比使用我的微控制器板上的四行LCD显示器调试RTOS要好得多。
问题是当我在整个源代码中将printf1重命名为printf时,我收到以下错误。显然,选项“nostdlib”& “nodefaultlibs”没有达到我的预期。为什么我没有看到“sprintf”名称的问题令人费解,只有“printf”。
我环顾四周看看这是否在任何地方得到了解答,最好的答案是更新到更新版本的gcc。
Linking: image.elf
arm-none-eabi-gcc -mthumb start.o main_uart.o mam.o sc.o led.o keypad.o timer.o delay.o small_printf.o rtc.o lcd.o uart.o interrupt.o --output image.elf -T./lpc2132.ld -nostartfiles -nodefaultlibs -nostdlib -Wl,--fatal-warnings -Wl,-Map=image.map,--cref
`.rodata.str1.4' referenced in section `.text' of /usr/local/lib/gcc/arm-none-eabi/6.3.0/../../../../arm-none-eabi/lib/thumb/libc.a(lib_a-puts.o): defined in discarded section `.rodata.str1.4' of /usr/local/lib/gcc/arm-none-eabi/6.3.0/../../../../arm-none-eabi/lib/thumb/libc.a(lib_a-puts.o)
`.rodata.str1.4' referenced in section `.text' of /usr/local/lib/gcc/arm-none-eabi/6.3.0/../../../../arm-none-eabi/lib/thumb/libc.a(lib_a-syscalls.o): defined in discarded section `.rodata.str1.4' of /usr/local/lib/gcc/arm-none-eabi/6.3.0/../../../../arm-none-eabi/lib/thumb/libc.a(lib_a-syscalls.o)
我使用的是GCC 6.3版,binutils 2.27,newlib 2.5.0。谢谢你的任何想法。
答案 0 :(得分:0)
如果没有格式说明符,GCC最有可能优化对printf
的调用puts
。为避免这种情况,请将-fno-builtin-printf
添加到CFLAGS
。