teruノート

ROSでロボットとか。Ubuntuで困ったこととか。

System Workbench for STM32

STM32の開発環境は今までCooCox CoIDEを使ってきました。

フリーで無制限に使えるのですが、使い勝手の悪いリポジトリ機能とプロジェクト管理が難点でした。


そこで今回はSystem Workbench for STM32に乗り換えることにします。略してSW4STM32らしいです。


yuqlid先輩のブログを参考にさせていただきました。

yuqlid.hatenablog.com


インストールするのは、
・SW4STM32
GCC ARM Embedded in Launchpad
・OpenOCD
です。

SW4STM32は、Eclipse系のIDEなのでウィザードを使って超簡単にプロジェクトを作成できます。

いま所用で弄ろうとしているSTM32F429i-discoもボードとして登録されていました。

適当に進んでビルドまではいけるはずです。



ところがひっかかったのがマイコンへの書き込みです。

参考にしたブログにあるように、Debug configurationsからデバッグ構成を新規作成します。


これでデバッグモードですが書き込みできます。


リリースモードでビルドして書き込む方法は・・・検討中です。


追記:
リリースモードについて。
ビルドをReleaseモードにして、Run configurationsで構成を新規作成して、こんな感じになればOKです。

f:id:ub2_memo:20160623160153p:plain

あとはRunボタンで書き込むと、デバッグモードと違い即座に実行されます。
リリースモードだと、デバッグ用の情報が入っていないため、コード量が減るはずです。

さらに追記:
デフォルトでは浮動小数点演算設定がhardになっています。場合によっては、softfpのほうがいい時があります。(STemWin使うときとか)
ProjectのPropatiesのC/C++ BuildのSettingsのMCU Settingsで設定できます。

TensorFlowのインストール

DeeplearningライブラリTensorFlowをUbuntu14.04にインストールします。

ここを参考にします。

https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html

必要なパッケージをインストール。

sudo apt-get install python-pip python-dev

TensorFlowはとりあえずCPU onlyをインストール。

sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl

こんな感じでTensorFlowのインストールを確認。

$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!!!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!!!
>>> 

チュートリアルでもやってみます。
MNIST For ML Beginners

gnuplotの導入

C++でディジタル制御のプログラムを書こうとしていて、結果をグラフで表示したいなと調べたところ、gnuplotが便利そうだとわかりました。

インストールします。

sudo apt-get install gnuplot-x11

最後のx11を付け忘れてもインストールしてしまったのですが、ubuntuではグラフウインドウが出ませんでした。ここを参考にしました。

qiita.com

ソースコードからはこんな感じにアクセスします。以下は一例です。

FILE *gp;
gp = popen("gnuplot -persist","w");
fprintf(gp, "plot '-' with lines linetype 1 title \"model\"\n");

データの組を渡すにはこんな感じです。

fprintf(gp, "%d\t%f\n", i, out);

データの最後に'e'を出力し、closeします。

fprintf(gp, "e\n");
pclose(gp);

実行すればグラフウインドウが出ます。

f:id:ub2_memo:20160507184519p:plain


ただ、グラフウインドウを閉じようとすると応答なしになってしまいます。

これをpopenしたあとに書くと、ちょっとグラフスタイルが変わりますが閉じられるようになりました。

fprintf(gp, "set terminal x11\n");

原因など詳しくはわからないですが。