Some Days You Get the Bear

IT系エンジニアの、日々の気づきや考えたこと。

TDD勉強会の仕込み、なので。

テスト駆動開発による組み込みプログラミングの集い@関西 事前勉強会に参加した。

みんなで開発環境をセットアップしよ―っ!ということだったが、思いのほか苦戦。。。

結局私はコンパイラが動くのを確認できた程度で終わってしまった。
やっぱ、道のりが見えていないのはちょっとツライぜ。

ということで、もう少し自分で調査。
そして、次回に向けての準備の経過をここに書いておく。


(第10話)
おお、すげ~! なんでもできそうじゃん!
http://www.wvshare.com/product/Open32F3-D-Standard.htm

「なんでもはできないよ。できることだけ。」でしょうけど。


(第9話)
コンソール出力のことを調べてると、 ねむいさんのぶろぐセミホスティング ということばを知った。
こんなふうなしくみだったんだ! 知らんかった。

それにしても、すごいよ、ねむいさん! いったいどんだけ知ってんのよ。


(第8話)
以下のページを発見っ!!

CooCox のフォーラムページだ。

なんとここにサンプルプロジェクトが置いてあった

これを使うと...、なんともすんなりと F3 とつながった!
やっとこれでみんなと同じとこまできた。ホッ...。 
しかし、インターネットに頼りきりで、エンジニアとしての能力を使っていないような...。

さて、続いて printf のリンクと実行をしてみよう。

うむ、リンクはOKだ。サイズも 32k 超で大丈夫だ。
動かしてみると...、うーむ、コンソールには出力されない。
コードを見てみると、

/**
* @brief  Transmit a char, if you want to use printf(),
*      you need implement this function
*
* @param  pStr Storage string.
* @param  c   Character to write.
*/
void PrintChar(char c)

ありゃ~、インプリされていない。

ここからがエンジニアの本領発揮というところですかね。


(第7話)
う~ん、IDE めんどい!
と思い始めて、コマンドラインでやってみようかと思い始める。
ねむいさんのぶろぐ や STM32F4の情報 / STM32プログラム開発環境 あたりが参考にならないか...。

STM32F3 でさがしていると、以下のサイトを発見! 

コマンドラインでやるなら、やはり Linux のほうがてっとり早いか?

しかし、Linux でやるならヴァーチャルマシン上になる(する)。VM 越しで USB がうまく動くのか不安だなぁ。

どうする!?ワシ。

つづく。。。


(第6話)
事前勉強会では、win チームは CoIDE をインストールして、みなさん動き始めたようす。
が、私はといえば、ひとり F3 なんか使ってるのですんなりとは動かず。CoIDE のプロファイル?に F3 が含まれていない。
F3 は未サポートなのか!?
まだまだつづく。。。


(第5話)
う~ん、どれも満足に解決しなかった。。。
CoCenter (CoIDE) と EWARM をダウンロードして、あすは持ってくことにするべ。
(第4話)
『TrueSTUDIO User Guide』を読んでみると、以下を発見...

The C runtime library includes many functions, including some that typically handle I/O.
The I/O related runtime functions include printf(), fopen(), fclose(), and many others.
It is common practice to redirect the I/O from these functions to the actual embedded
platform, such as redirecting printf() output to an LCD display (...)

The free Atollic TrueSTUDIO® Lite do not support I/O redirection, and instead have do-nothing stubs compiled into the C runtime library.

ありゃ、コンソール出力できないじゃん? いや、LCD へダメなだけ?(そりゃ描画処理がいるけど、そういう意味?)
to the actual embedded platform ってどこまでなんだろ。


(第3話)
今回はミョーな書き方をしてて、ちょっとわかりづらいので、現状を整理しておこう。

いま残ってる宿題は以下。

  • printf() を使うと 32k 超えてしまう

  →サンプルコードを削ってやればなんとか入った。けどこんなんじゃテストコード組み込めないかも...
  →『マイコン徹底入門へようこそ』に置いてあるサンプルコードでは
   cprintf() なる USART_PrintFormatted() を使ったマクロがあった。真似して見ようかと思ったけど、
   USART_PrintFormatted()あるいは相当関数が今回の F3 のサンプルコードには含まれていなかった。
   わざわざ作ったものなのかも?

  • stdout が TrueSTUDIO のコンソールに出力されない? 

  → 32k を超えない puts()/fputs() を使って動作確認するが、出力してくれない。
  → printf() でもダメだった。TrueSTUDIO の設定なのか? ビルドオプションか何かで COM を指定するのか?

  • TrueSTUDIO 評価版は C++ が使えない!

  → テスティングフレームワークは CppUTest ではダメじゃね。

次回の勉強会までにひとつでも解決しておきたいな―。
集まってできると思うと、つい「誰かがやってくれてる」と思ってしまうので(^.^;
いかん、いかん。


(第2話)
→と、すでにこちらで調べて下さってます! 仕事が早い!

上記リンクを参考に、コンパイラと ST-LINK(というか、TrueSTUDIO)をセットアップしてみる。

結局、わたしは STM32F3DISCOVERY を購入した。
USB をつなぐと、焼き込み済みのサンプルが起動。 LED がくるくる回ってたのしいぞ!

さて、TrueSTUDIO はあっさりとインストールできた。
F3 のサンプルコードをダウンロードし、ビルドすると、、、

data of file STM32F3-Discovery\hoge.o
c:/program(...)/ld.exe: error: Demo.elf uses VFP register arguments, STM32F3-Discovery\hoge.o does not
c:/program(...)/ld.exe: failed to merge target specific data of file STM32F3-Discovery\hoge.o
collect2.exe: error: ld returned 1 exit status

うーむ...。 F3 だって FPU は載ってるはずだが。
とりあえず、コンパイラとリンカの FP 設定を、ハードでなくソフトでやるよう設定して回避。
仕事じゃないので、わからんことには目をつむって先へ進むとしよう。 ^_^;

hardware inplementation と FPU の項を設定してやることでリンクできました!
(後者をやってなかったのかもね)
ちょっとでもサイズが小さくなるかと期待したけど、あいかわらず printf はリンクできず。う~ん...

さて、無事 IDE が起動した。

すげーっ!! 変数の値も、レジスタもメモリも見れるー!! もういいじゃん、これで。

...と、今回の趣旨からはずれそうになってしまうので、
printf がコンソールに出力できるところまで確認しておこう。

が、printf を使うと、リンク時に 32k の制限に引っかかってしまった。うー…(;´Д`)

CppUTest を組み込んで動くようにするには、もひとつハードルがありそうだ。

今日はここまで。


(第1話)

事前にご紹介して下さってるボードはこちら。
STM32F4DISCOVERY

このへんも似たようなの。
STM32VLDISCOVERY 
STM32F3DISCOVERY

私は STM32F3DISCOVERY がいいかな?
LED が 10 コもついてるし、電子コンパス載っててすぐになんかつくれそう。それに安い!

このへんや、このへんや、このへんもありかな? IDE もあるみたいだし。


こういうのだと、私の場合、多分これっきりで他のことに使いそうにない。

なので、このあたりも調査。

Arduino

  • 簡単に動くものをつくってもらうことに主眼が置かれており、スタートアップルーチンや main 関数が隠蔽されている。
  • オープンソースハードウェア」ということで、情報は多そう。
  • xUnit がうまく組み込めるかな? コンパイラgcc だし、Arduino言語も実は C/C++ なんだけど。
  • LED や GPIO の制御等、必要なことはライブラリがそろっている模様。CPU のレジスタ調べながらゴリゴリってのをやりたいときは、どーだろ?
  • ファーム(プログラム)をアップロードして動かす過程が、実際の業務のイメージと同等だろうか? デバッガはないけど、IDE でささっと動いてしまいそうなので、「こんなんでいいのか?」と思ってしまった。
  • でもちょっとカッコいいし、まぁ安いよね。

Raspberry Pi
BeagleBone Black

  • このへんはもうただの Linux マシン。ほんのちょっとだけお値段張りますが。
  • USB でコンソール接続できるんじゃないの? 何の苦労もなくプログラム環境は用意できそう。GPIOだってドライバあるだろうし。
  • このまんまで遊べるような、LED とかセンサーとか、そういうのは付いてなさそう。探せば拡張ボードもあるんじゃないか?(コストアップだけど)
  • 本気な(カーネルで動かす)ドライバつくるのは少しめんどうなはず。

BeagleBone Black ってのが出てたんだぁ。初代より安くなってるし。
(初代から)内蔵 FLASH が追加されたので、こっちに動作環境を焼けば、SDIO が空いて仕事関係にも使えそう?


仕事ではここ1年くらい組込み Linux をやっている。
printk() を卒業して、gdb/kgdb あたりをマスターしたいとも思っているので、ちょっと Linux の環境には惹かれるなぁ。

この連休のうちにボードを決めて発注だけはしておこう。

つづく。。。