デバッグ用に printf 出力をシリアル ポートに再ターゲットするために retarget.c を実装します。リンク コマンドが次のようになっている場合は、リンクして非常にうまく機能します。
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
_write
正常にリンクできたのですが、関数 printf がシリアルポートに何も出力せず、 retarget.cなどの自作バージョンの関数が最終的にコンパイルされたプログラムで使用されていないようです。