STM32F4discovery COIDE2.0
ソースデバッグprintfもどきができました。
CoIDE上で、表示したい情報を表示できます。
COIDEを使えばだれでもできます。
コムポートも、TERA TERMも不要です。
USBを介して、Semihostingなるものを使い、STM32と通信するからです。
設定方法
0 COiDEのプロジェクトを立ち上げておく。
1 VIEWタブ configurationコマンド→ Debuggerタブ
→Semihosting Enableのトグルをオン
2 VIEWタブ configurationコマンド→ LINKタブ
「Options:」の項目のところ、「Library:」の項目のタブを、「Semihosting」とする。
上記のうち、1、2両方が必要なのかは、よく分からない。
3 アイコンのうち、丸の中に3つの色つきの丸があるもの「Welcome」の
「Browse in Repository」を開く。
4 「coocox-master / Semihosting」を選択し、「+Add」ボタンを押すと、
プロジェクトに「Semihosting」というライブラリが追加される。
5 上記4で、仮にSTM32F407VG等のマイコン名称が羅列された場合、
STM32F407VGをクリックし、「Component」をクリックする。
6 上記4で、仮に「New Project」などの項目が羅列された場合、
「Component」をクリックする。
7 main関数のところ、
「SH_SendString(“Hello World”);」を入れる。
8 コンパイルアイコンを押す。
なお、semihosting.cでワーニングが出るかもしれない。
気になる方は直してください。
9 「Download Code to Flash」アイコン
10 虫アイコン(デバッグ)を押す。
11 「SH_SendString(“Hello World”);」の次の行にカーソルを置き、
Run to Line 「→|」アイコンを押す。
12 右下の「Semihosting」の部分に、Hello Worldが現れます!
Hello World
ただし、SH_SendStringの入力はConstです。
これを直すにはさらに検討が必要です。
Printfに埋め込むという方法があるようですが、
この場合、coocox-master / Retarget_printfを「Browse in Repository」の中から選択し、付け加えます。
この場合、objファイルの中のprintf.oというファイルとコンフリクトになり、エラーとなります。
printfをいじる場合には、printf.oの登録をCoIDEから抹消するしかないと思います。
<2016.5.22追加>
「CoIDEを使ってSTM32F4 DiscoveryでTDD(Unity)をやってみた」というサイトが参考になりました。
私はUnityはしませんでしたが、ソースデバッグ中に、ボードから出力されたprintfをCoIDEに出力するには、このサイトが参考になります。
上記coocox-master / Retarget_printfを付け加えた場合、注意すべきは、
①printfを使用する「xx.c」ファイルでインクルードするのは、「stdio.h」であること、
②Retarget_printfのprintf.cにあるprintf関数は使わないこと、
したがって、printfを使用する当該「xx.c」では、printf.cをインクルードしない、
また、printf.hを作ってインクルードするなどもしない。
→おそらく、stdio.h内のprintfを実行すると、後述⑤の処理が呼び出される構図になるイメージ。
③Retarget_printfのprintf.cで、semihosting.hをインクルードすること
(「#include”semihosting.h”」とする。 )、
④上記のサイトでは、下の方にあるのですが、
「 struct _reent *_impure_ptr = &r;」をコメントアウトして、
「// struct _reent *_impure_ptr = &r;」ととします。
⑤printf.c内を、CoIDEでなく、別のエディタ(例えばprogrammer’spad)で編集して、
以下のように「SH_SendChar(c);」を付け加える。
「void PrintChar(char c)
{
/* Send a char like:
while(Transfer not completed);
Transmit a char;
*/
SH_SendChar(c);
}」
⑥上記1、2のコンフィグファイルの設定変更
1 VIEWタブ configurationコマンド→ Debuggerタブ
→Semihosting Enableのトグルをオン
2 VIEWタブ configurationコマンド→ LINKタブ
「Options:」の項目のところ、「Library:」の項目のタブを、「Semihosting」とする。
の以上です。