mbed と ☆board を調達 & スタートアップ

うっかり買ってしまいました。ネットワークにすぐ繋がりそうな板として、☆Boardは少し前にチェックしてあったんですが、何に刺さる拡張基板なのか忘れたまま放置していました。今回、MTM06会場にて見かけたので、なんだっけこれ?みたいなひどい質問をしつつ購入してきました。

参考:mbed公式 Quick Reference (外観など)
参考:☆board orange

主観的概要

mbed

・ARMの載った板
・開発環境がWebにあって、ブラウザ上でソースいじる
コンパイルボタンをぽちっと押すと、コンパイル終了後にバイナリが落ちてくる

☆Board Orange

・mbedの拡張基板
イーサネットの口、Text LCD、SDカードスロット、USB Aコネクタなどが載ってる

☆Boardの組み立て

組み立て終わったあとに、詳細な組み立て解説記事を発見…
無事に済めば1時間ちょいくらいかと。基板のシルク印刷が丁寧にされているし、ユニバーサル基板のピッチなので簡単です。

最初の動作確認など

mbed

Getting Startedみたいな記事はごろごろしているので、省略。

☆Board

組み立てキットに同封された簡易マニュアルの通りに、まずはLCDで動作確認。。可変抵抗が初期位置のままだと何も表示されなくて、何かミスったかとちょっと焦りました。

早速ネットワークに繋げてみる

CookbookのHTTP Serverモジュールを使ってみました。
新規プロジェクトを適当に作って、main.cppにはこのページのHello worldをペタリと貼り付けます。
そして、HTTP Serverパッケージのページから"Import into Compiler"をぽちり。種別でLibraryを選んで、現在のプロジェクトに追加。Compileすれば完了…なんだけど、こいつのIPアドレスは一体なんなんだ?


というわけで、EthernetNetIfにアドレスを指定するようなコードに変更しました。以下のような感じで。
最近、「以下」って変換しようとするとイカになってしまうので困るでゲソ。

int main() {
  IpAddr ip (192, 168, 1, 254);
  IpAddr mask (255, 255, 255, 0);
  IpAddr gateway (192, 168, 1, 1);
  IpAddr dns (192, 168, 1, 1);

  // サンプルではglobalに置かれていたEthernetNetIfインスタンス
  EthernetNetIf eth(ip, mask, gateway, dns);

  printf("Setting up...\n");
(以下サンプルのままいじっていないので略)


引数なしで初期化しているデフォルトの状態だと、IPアドレスDHCPで取ってたみたいです。DHCPで取ったIPアドレスを、LCDなりUSBシリアルなりに出すようにしてもよかったね。

EthernetNetIf ()
 Instantiates the Interface and register it against the stack, DHCP will be used.
EthernetNetIf ( IpAddr ip, IpAddr netmask, IpAddr gateway, IpAddr dns)
 Instantiates the Interface and register it against the stack, DHCP will not be used. 
リンクアップについて

イーサネットの口についているインジケータは、正常動作していても光らないようです。これも最初は焦ったけども、対向(スイッチングハブ)を見るとちゃんとリンクアップしていました。

雑感

開発環境

いわゆるクラウドってやつですね。ブラウザ上にエディタが出てきて、そこで編集したものが、雲のむこうに保存されています。
まだ発展途上なのかもしれず色々ありますが、特に以下の3点は不満です。


・時々、ソースが一切編集不能になる
コンパイルが遅いし中断できない
・Warningが20個以上出ると、以降の表示がカットされる。Errorすら表示されない(致命的)


最後のは、クラウドだからってのとは関係ないダサい仕様ですね。ログとして表示されないのみならず、Error: 0と表示され、コンパイルは失敗しているので成果物は落ちてきません。
ネットワーク関係のライブラリのようなでかいものをimportすると、そいつらを先にコンパイルしてログを埋め尽くしてしまいます。unused variableやassignment in conditionみたいなレベルまでばりばり出す、-Wallな感じで走っているようで。オプション指定できるのかなあ?


インポートしたライブラリを含めて毎回全体コンパイルをするので時間がかかる上に、自分で書いた部分よりライブラリが先にコンパイルされるので、本質とあまり関係ないところで非常にストレスが溜まる環境です。

ライブラリ

ほいっとimportしてすぐ使えるものが揃っていて、楽ちんです。
ひとつだけはまったのは、ライブラリによっては使えるピンが限定されていることです。mbed.hにある基本機能(SPI, I2C等)の場合は、Compiler画面から見えるAPIのリファレンスには何も書いていないのに、Handbookページにはポート縛りについて記載がありました。

その他

生成されるバイナリはmbed専用ではないようです。2枚目以降が欲しくなったら、値段が半分のLPC Xpressoを買えばいいってことかな?