STM32で遊ぶ (4) - printf表示
SW4STM32でARMのセミホスティング機能を使ってprintf表示が行えるようにします。
プロジェクトの「Properties」からリンカのオプションに下記を追加します。
-specs=nosys.specs -specs=nano.specs -specs=rdimon.specs -lc -lrdimon
srcディレクトリ内の syscalls.c を削除するか、.c をリネームしてコンパイル対象から外します。
main関数の外と中に下記のコードを加えると使用できるようになります。
#include <stdio.h> void __auto_semihosting(void) __attribute__((alias("main"))); extern void initialise_monitor_handles(void); int main(void){ initialise_monitor_handles(); }
#include <stdio.h> #include "stm32f4xx.h" void __auto_semihosting(void) __attribute__((alias("main"))); extern void initialise_monitor_handles(void); int main(void){ volatile unsigned int *addr; initialise_monitor_handles(); for(int i=0; i<=0x94; i+=4){ addr = (volatile unsigned int *)(RCC_BASE + i); printf("0x%08lx : 0x%08x\n", RCC_BASE + i, *addr); } return(0); }
デバッガの設定で「Startup」タブに下記を追加してからデバッグを開始します。
monitor arm semihosting enable
実行後「Console」に赤文字で表示されれば成功です。
[参考記事]