Arduino M0 Pro でマルチタスクプログラミング : インストールとサンプルの実行

# はじめに
[Arduino M0 Pro](http://www.arduino.org/products/boards/4-arduino-boards/arduino-m0-pro) (以下，M0)は，一般的なArudino Unoと異なり，ARM Cortex-M0+を搭載していて，性能やROM/RAMも一桁大きいです．M0を使って，[TOPPERS/ASPカーネル](http://www.toppers.jp/asp-kernel.html)ベースのマルチタスクプログラミング環境を提供する[TOPPERS/R2CA](http://dev.toppers.jp/trac_user/contrib/wiki/rtos_arduino)の実行方法について説明します．

# ハードウエア
- [Arduino M0 Pro](http://www.arduino.org/products/boards/4-arduino-boards/arduino-m0-pro) 
 - **Arduino M0 を買わないように注意**
  - デバッグモジュールがなくSerialがUSBによるエミュレーションなので使い勝手が悪いです．
 - ​スイッチサイエンス， ​秋月， ​マルツパーツ 等で購入可能． 
- Windows PC
 - Windows7とWindows10で動作を確認しています．
- USB(microB)ケーブル
 - ボードには付属していないので用意して下さい．

# ソフトウェア
- [Arduino IDE](http://www.arduino.org/software#ide)
 - 1.7.11で動作確認済み．
 - インストーラに従ってインストールして下さい．
- ターミナルエミュレータ
 - Teraterm等をインストールして下さい．
- [TOPPERS/R2CA](http://dev.toppers.jp/trac_user/contrib/wiki/rtos_arduino)
 - ZIPファイルをダウンロード可能です
  - [このページ](https://dev.toppers.jp/trac_user/contrib/browser/rtos_arduino/trunk)の下にあるZip Archiveをクリックしてダウンロード．
 - SVNを使ってファイルを取得
 
```
svn co http://dev.toppers.jp/svn_user/contrib/rtos_arduino/trunk r2ca
```

- Arduino IDE のインストールパスの設定
 - C:\Program Files (x86)\Arduino にArduino IDEをインストールした場合は必要ありません．
 - Arduino IDEをインストールした場所をR2CAのファイルに設定します．以下のC:\Program Files (x86)\Arduino の箇所を書き換えます．

```example/do_path.bat
         SET ARDUINO_DIR=C:\Program Files (x86)\Arduino
```
```asp_1.9.1/target/arduino_m0_gcc/Makefile.target
         ARDUINO_BASE_DIR_WIN = C:\Program Files (x86)\Arduino
```

# セットアップ
M0の**PROGRAMMINGポート**とPCをUSBケーブルで接続します．

![m0pro.jpg](https://qiita-image-store.s3.amazonaws.com/0/106870/9abbbce3-fb34-c0c1-c7cc-1f8bdcf5947a.jpeg)

ドライバがインストールされ，デバッグユニット(EDBG)とCOMポートが認識されるはずです．

デバイスマネージャーでCOMポートの番号を確認して，Teraterm等で115200bpsで接続します．Arduino IDEのシリアルモニタでもよいです．

# Lチカサンプルの実行
ボード上のLEDを点滅させるサンプルビルド&実行します．R2CAのパッケージの\examples\Basicにプログラム等があります．

rca_app.cppにプログラムが記述されています．ファイルにはいくつかのサンプルが入っていますが，ディフォルトではLチカが有効になっています．このプログラムはArduino IDEに含まれているサンプルBlinkと内容は同一です．

```\examples\Basic\rca_app.cpp
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
  Serial.begin(115200);
}

// the loop function runs over and over again forever
void loop() {
    digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
    Serial.println("HIGH");    
    delay(1000);              // wait for a second
    digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
    Serial.println("LOW");        
    delay(1000);              // wait for a second
}
```

ビルドは同じフォルダにあるdo_make.bat をダブルクリックすると開始されます．ファイルが色々作成されますが，rca.elfが出来るとビルド成功です．

実行はdo_run.batをダブルクリックするとダウンロードが開始され，実行されます．Teratermには次のように表示されます．

![m0pro3.jpg](https://qiita-image-store.s3.amazonaws.com/0/106870/27148cce-cad0-9ece-2f30-ce3ec21258dd.jpeg)

TOPPERS/ASPカーネルが起動して，setup()/loop()をタスクとして実行しています．

ファイルの先頭の定義で他の定義を有効にすると別のサンプルを実行できます．有効にできる定義は1個のみです．

```\examples\Basic\r2ca_app.cpp
#define BLINK
//#define toneMelody
//#define USBUART
//#define SERIALUSB
//#define SERIAL5
//#define ATTACHINTERRUPT
//#define ANALOGWRITE
//#define ANALOGREAD
//#define RTC_ALARM
```

# おわりに
M0 Pro は，Unoと比べると高価ですが，メモリサイズが大きく，デバッガも付属しているのでおすすめです．
次はAtmelStudioを使ったデバッグ方法について説明します．