[独習mbed] mbed はじめました

Posted December 22nd, 2010 in General. Tagged: .

手を出すのが遅かったけど、気になっていた mbed を入手したので、こんにちは。ウワサによれば、Serial, SPI, I2C, PWM などのマイコンでよく使われる機能に加えて、イーサ接続やら USBホスト機能まであるらしい。安いBluetoothドングルが使えるじゃないか。しかも、☆Board Orange という評価ボードも揃えれば、そのあたりの機能がすぐ試せるっぽい。すごい。

購入

デバイスの接続と登録

  • mbed を USBケーブル で Mac に接続する
  • MBEDというデバイスが Finder に現れるので、MBED.HTM をダブルクリック
  • 個体ごとの signup code を含んだ開始ページへリダイレクトし、そのまま Signup すると登録できる。
    再度登録しようとすると、This board’s signup code has already been used! とか言われる

ビルドサイクル

  • クラウドにIDE(mbed Compiler という名前)があるので、そこで書く
    https://mbed.org/compiler/
  • コンパイル(Compileボタン)するとバイナリがダウンロードされる。これを mbed(のFlash)に保存する。はやい。
  • mbed をリセットするとFlashにある最も新しいバイナリがロード&実行される。かんたん。

デバッグ

mbedのソースコード

  • /mbed/trunk – libraries – Trac http://mbed.org/projects/libraries/svn/mbed/trunk
  • mbed.h からたどると、いろいろ定義がわかる
  • mbed.hには stdio.h, stdlib.h, string.h, math.h, time.h など標準Cライブラリ(の一部)や、Base派生のライブラリが予めインクルードされている。全部入りって感じ
  • PinNames.h: typedef enum PinName PinName
    ということで、多くのクラスのコンストラクタ引数に与えられる PinName は enum で、LPC_GPIO0_BASE(=0x2009C000UL) から始まり、P0_1 〜 P4_31 の LPC1768ピン配置の列挙と、mbed のピン番号や LED1 などの別名の定義が書いてある。
    http://mbed.org/projects/libraries/svn/mbed/trunk/PinNames.h

Hello world !!

以下のサンプルで動作確認。うごく。

My Hello world

ようはLEDチカチカなんだけど、4つあるので順に点灯で往復させてみた。

#include "mbed.h"

#define NUM_LEDS 4
#define WAIT 0.5

PinName ledNames[NUM_LEDS] = {LED1,LED2,LED3,LED4};
DigitalOut *led[NUM_LEDS];

int main() {
    int i;
    for ( i=0; i<NUM_LEDS; i++) {
        // C++ なんで、new とか使ってみる
        led[i] = new DigitalOut(ledNames[i]);
        // コンパイラの exception handling が無効になっているので、try/catch は使えない
        if (led[i] == NULL) {
            // NULLチェックは有効なのかな
            exit(1);
        }
        // 各LED を消灯する
        *(led[i]) = 0;
    }

    // 最初のLEDを点灯
    *(led[0]) = 1;
    wait(WAIT);

    while (1) {
        // 左から右へ順に点灯
        for ( i=1; i<NUM_LEDS; i++) {
            *(led[i-1]) = 0;
            *(led[i]) = 1;
            wait(WAIT);
        }
        // 右から左へ
        for ( i=NUM_LEDS-2; i>=0; i--) {
            *(led[i+1]) = 0;
            *(led[i]) = 1;
            wait(WAIT);
        }
    }
}
  • 例外処理は無効になってる。で、クラウド上だからコンパイラのオプションは変更できないってことね。。
    Exception handling | mbed http://mbed.org/forum/mbed/topic/523/

今後の参考

Posted December 22nd, 2010 in General. Tagged: .

Comments are closed.


track feed