SW4STM32でsemihostingが使いたい
はじめに
以前こんな記事を書きました.
この開発環境「SystemWorkbench for STM32(SW4STM32)」では,OpenOCDを用いたデバッグの時に,semihostingという機能が使えません.
semihostingとは
semihostingについての詳細はARMのページを参照してください.
ARM Information Center
ざっくりいうと,stm32とEclipseのコンソールにてprintf()関数やscanf()関数をやりとりするような機能です.僕は基本的にprintf()しか使ってません.
このsemihostingという機能は書き込みに使用するSWDの線のみでやりとりを行うため,簡単なデバッグをする際に非常に便利です.
今回はSW4STM32でsemihostingを使うためにやったことを紹介します.
やったこと
以前紹介した記事の「OpenSTM32 Community」内のForumsを探してみたのですが,まぁありますよね,みんなやりたいことは一緒なんだな,と
その結果色々出てきました.
http://www.openstm32.org/tiki-searchindex.php?filter~content=swd+print&sort_mode=score_ndesc
ここに書いてあったことをやっただけですが,備忘録としてまとめとこうかと.
プロジェクトの設定
以前の記事
yuqlid.hatenablog.com
を元に,プロジェクトがすでに存在している前提で話を進めます.
プロジェクトを右クリック ->Properties -> C/C++ Build -> Settings -> MCU GCC Linker -> Miscellaneous
(C++でプロジェクトを作っている場合は MCU GCC Linker -> MCU G++ Linker と読み替え)
Linker flagsのボックスに以下の文を追加します.
-specs=nosys.specs -specs=nano.specs -specs=rdimon.specs -lc -lrdimon
こんな感じです
ソースコードの編集
以下の関数宣言を入れます.
extern void initialise_monitor_handles(void);
なお,C++で書いてる方は以下のようにしてください
extern "C"void initialise_monitor_handles(void);
main関数内部で呼んであげます.
void initialise_monitor_handles(void);
自由にprintf()関数を書き込みます.一例を置いときます.
この時,main.cと同じsrcフォルダに存在するsyscall.cは不要なので,削除するなり,ビルドから除外してください.
入れたままにしておくと重複定義(multiple definition)のエラーがでます.
デバッグの設定
Debug Configurations を開き,Startupタブ内部のボックスに以下の文を追加します.
monitor arm semihosting enable
これですべての設定ができました.
デバッグを実行(再生ボタンを押す)すると
Lチカが実行されます,ここで画像のようにconsoleをクリックしてやると,printf()関数の出力を確認することができます.
まとめ
SW4STM32のちょっとしたネタを紹介,まとめた.
お役に立てば幸いです.
ディスカッション
コメント一覧
まだ、コメントがありません