= TOPPERS/R2CA(RTE and RTOS compatible with Arduino libraries) = [[PageOutline]] == TOPPERS/R2CAとは? == * 何ができるの? * ArduinoボードとArduinoライブラリを用いてスケッチに近い形態のマルチタスクプログラミングが可能です. * ITRON APIを使用出来ます(C++化は今後の対応予定?) * 誰が対象? * Arduino IDE によるプログラミングからステップアップしたい方 * Arduino IDEより良い点はあるの? * デバッガが使えます. * 一度コンパイルしてしまえば,2度目は必要なファイルのみコンパイルするのでコンパイル時間が短縮できます. * バッチファイルによるビルドと実行が出来るので,Arduino IDEより気軽に使えます. * Arduino IDEより悪い点はあるの? * Arduino IDEは使用出来ません. * ある程度C/C++/Makefileの知識は必要です. * OSをコンパイルする必要があるので1回目のコンパイルは時間がかかります. * インストールは面倒? * Arduino IDEがインストールされていれば,ビルド/実行/GDBによるデバッグが可能です. * GUIデバッグをしたい場合は Atmel Studio(無償) をインストールする必要があります. * サポートしているArduinoボードは? * Arduino M0 Pro(Cortex-M0+) のみです. [[Image(R2CA1.2.jpg)]] == コード及びライセンス == * [http://dev.toppers.jp/trac_user/contrib/browser/rtos_arduino?order=name コードの置き場所] ファイル毎にライセンスが異なるので注意してください. || ディレクトリ名 || ライセンス || || lib || GNU GPL || || asp_1.9.2 || TOPPERS ライセンス || || exsample || GNU GPL || || arduino_lib || それぞれのファイルに指定されたライセンス(GNU GPL or BSD or MIT or ....) || == 関連資料 == * [http://dev.toppers.jp/trac_user/contrib/attachment/wiki/rtos_arduino/20160702_R2CA.pdf TOPPERS活用アイデア・アプリケーション開発コンテスト用資料] == クイックスタート(GDBデバッグ版) == === 機材の用意 === * Windows PC (Makefileを整備すればMacでも動作するはず) * 64bitだと設定を変更しなくてもよいので楽 * Arduino M0 '''Pro''' * ''' !!Arduino M0 を買わないように注意!! ''' * 動作するがプログラムの変更が必要(Serial を SerialUSBに変更). * SerialUSBの負荷は非常に高いです. * [https://www.switch-science.com/catalog/2299/ スイッチサイエンス], [http://akizukidenshi.com/catalog/g/gM-09392/ 秋月], [http://www.marutsu.co.jp/pc/i/544623/ マルツパーツ] 等で購入可能. === ツールのインストール === * [http://www.arduino.org/software Arduino IDE]のインストール. * .org版(1.7.x)をインストールすること. * インストーラに従ってインストールを実施する. * Arduino IDE のインストールパスの設定 * 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/ ARDUINO_BASE_DIR_WIN = C:\Program Files (x86)\Arduino }}} === パッケージのダウンロードと展開 === * [http://dev.toppers.jp/svn_user/contrib/rtos_arduino/trunk SVN]経由で取得する. * [http://dev.toppers.jp/trac_user/contrib/attachment/wiki/rtos_arduino/r2ca_20160521.zip ZIPパッケージ]をダウンロード. === ビルド === * フォルダ ./example/basic を開く * ./do_make.bat を実行 === 実行 === * ボードの''''PROGRAMポート''''とPCのUSBを接続する. * Arduino IDEを起動する(teraterm等でも可) * ツール -> ポート -> COMx(Arduino M0 Pro (Programmmming Port)) を選択. * ツール -> シリアルモニタ を選択してシリアルモニタを実行する. * シリアルモニタの右下の速度を115200bpsに変更 * フォルダ ./example/basic を開く * ./do_run.bat を実行 === デバッグ === * フォルダ ./example/basic を開く * ./do_debug.bat を実行 === クリーン === * フォルダ ./example/basic を開く * ./do_clean.bat を実行 == クイックスタート(Atmel Studio使用版) == === ツールのインストール === * [http://www.arduino.org/software Arduino IDE]のインストール. * 上記と同じ. * [http://www.atmel.com/ja/jp/tools/ATMELSTUDIO.aspx Atmel Studio] のインストール * インストーラに従ってインストールを実施する. === プロジェクトを開く === * \example\basic\asp.atsln をタブルクリックするとAtmel Studioが起動する. === ビルド === * メニュー -> Build -> Build Solution を実行 === 実行 === * メニュー -> Debug -> Start Debugging and Brake を実行 メモリに書き込まれるため,実行を開始する. ファイルメニューからrca_app.cpp を選択してブレークポイントを置くことが 可能. == プログラミングモデル == === マルチタスク === マルチタスクによるプログラミングが可能.各タスク間はASPのAPIを呼び出す ことが可能である. ==== プログラム例 ==== {{{ #include "rca.h" void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); } void task1_setup() { Serial.begin(9600); } void task1_loop() { int sv = analogRead(A0); Serial.println(sv); delay(1); } }}} ==== タスク名 ==== Arduinoライブラリを実行するためのタスクとして,メインタスクとタスク1, タスク2,...(RCAタスク)を用意している.メインタスクは必ず生成され,RCA タスクは,幾つ生成するかはマクロで定義可能である.現状最大数は5個である. それぞれのタスク名は次の通りである. || タスク || タスク名 || || メインタスク || RCA_MAINTASK || || タスク1 || RCA_TASK1 || || タスク2 || RCA_TASK2 || || タスク3 || RCA_TASK3 || || タスク4 || RCA_TASK4 || || タスク5 || RCA_TASK5 || 各タスクは,次の関数を実行する.これらの関数の本体を記述する. || タスク || 関数 || || メインタスク || setup/loop || || タスク1 || task1_setup/task2_loop || || タスク2 || task2_setup/task2_loop || || タスク3 || task3_setup/task3_loop || || タスク4 || task4_setup/task4_loop || || タスク5 || task5_setup/task5_loop || 各setup/loopの振る舞いはArduinoと同等である. == 注意点 == * Arduino IDEに含まれている M0 向けライブラリは開発されて日が浅いため不具合やコンパイルが通らない場合があるため注意が必要. == 制限事項 == * I2Cライブラリは複数タスクで呼び出す場合はタスク側で排他が必要.