Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
SAKURAボードユーザ会関西連絡会 西村備山SAKURAボード でお手軽マルチタスク環境
自己紹介西村備山 (@lipoyang)■組込み系のソフト屋■おもにC/C++■たまにC#やJava■趣味でロボットなど製作■ツンデレ萌え
GR-SAKURA 茶運び人形ロボBluetoothでスマホから操作・ステッピングモータ ×2・ラジコンサーボ ×6・ゆっくりチップ(音声)過去の作例
GR-KURUMI ミニ四駆ラジコン・マブチモータ制御・サーボでステアリングBluetoothでスマホから操縦過去の作例
最近は戦車道タミヤツインモーターギアボックス改造
Arduinoへの不満処理が終わるまで帰ってこない→ その間、他のことができないloopでポーリングなのにAPIはブロッキング処理ここから本題
具体例:ステッピングモータStepper stepper( 一回転のステップ数,ピン1,ピン2,ピン3,ピン4 );stepper.setSpeed( 回転数[RPM] );stepper.step( ステップ数 );指定したステップ数回転する...
ロボットに使う場合…走行中、センシングも通信も中断されちゃう!For better control, keep the speed high andonly go a few steps with each call to step().(Ar...
マイコンでの並行処理・OSなし → ステートマシン設計長所:特別な知識・費用いらないスペック低くてもOK短所:超巨大switch文(処理の流れが非常に読みにくい)・OSあり → マルチタスク長所:並行処理をスッキリ記述できる短所:スペック要求(...
OSなしでの並行処理メインループ{処理1();処理2();処理3();} 必ず短時間で関数を抜けること→ ブロッキング処理は不可→ 複雑なステートマシンになる
OSをつかった並行処理// OSがないときswitch(state){case READY:if( command == STEP100 ){stepper.start();state = MOVING;}break;case MOVING:i...
マルチタスクOSの課題(1) マイコンのスペック要求(メモリ、処理能力)→ ARM Cortex-M3クラスなら無問題!(2) OSの知識が必要 & コンフィグがめんどくさい→ Arduino文化には馴染まないもっとお手軽にマルチタスクを!
むかし自作した簡易OSAVRIL-TAN(あぶりるたん) … APIは9個だけAPI 説明CreateTask タスクを生成するStartTask 指定IDのタスクの開始(実行待ち状態へ)ExitTask 自タスクの停止(休止状態へ)Sleep...
簡易OSを用いた記述#define ID_TASK_HOGE 0void taskHoge() {処理;}void setup() {初期設定;CreateTask( ID_TASK_HOGE, taskHoge );StartTask( ID...
OSをクラスで隠蔽class : public Task {public:void run () {処理;}} taskHoge;void setup() {初期設定;taskHoge.start();}
もっとシンプルに!@task taskHoge() {処理;}void setup() {初期設定;taskHoge.start();}簡潔な記法↓プリプロセッサで展開
タスク制御のメソッド@taskオブジェクトのメソッドstart() タスクを開始する (実行待ち状態へ)startCycle(周期) 周期タスクを開始する (待ち状態へ)startOneShot() ワンショットタスクを開始する (待ち状態へ)...
Easy MultitaskingRTOSクラスライブラリプリプロセッサマルチタスク機能を提供C++クラスで隠蔽簡潔な@task記法
最後に…ユーザー会の手でOSやライブラリなどを開発していくなら…オンボードJTAGデバッガぜひ載せてほしい!
以上ご清聴ありがとうございました妄想乙でした
Upcoming SlideShare
Loading in …5
×

SAKURAボードでお手軽マルチタスク環境

2,809 views

Published on

2013.5.18 第1回 FUJI-SAKURAぷろじぇくとMTG
次期SAKURAボードへの提案というか妄想です。

Published in: Technology
  • Be the first to comment

SAKURAボードでお手軽マルチタスク環境

  1. 1. SAKURAボードユーザ会関西連絡会 西村備山SAKURAボード でお手軽マルチタスク環境
  2. 2. 自己紹介西村備山 (@lipoyang)■組込み系のソフト屋■おもにC/C++■たまにC#やJava■趣味でロボットなど製作■ツンデレ萌え
  3. 3. GR-SAKURA 茶運び人形ロボBluetoothでスマホから操作・ステッピングモータ ×2・ラジコンサーボ ×6・ゆっくりチップ(音声)過去の作例
  4. 4. GR-KURUMI ミニ四駆ラジコン・マブチモータ制御・サーボでステアリングBluetoothでスマホから操縦過去の作例
  5. 5. 最近は戦車道タミヤツインモーターギアボックス改造
  6. 6. Arduinoへの不満処理が終わるまで帰ってこない→ その間、他のことができないloopでポーリングなのにAPIはブロッキング処理ここから本題
  7. 7. 具体例:ステッピングモータStepper stepper( 一回転のステップ数,ピン1,ピン2,ピン3,ピン4 );stepper.setSpeed( 回転数[RPM] );stepper.step( ステップ数 );指定したステップ数回転するまで帰ってこない。( 一回転100ステップ、回転数1RPMで100ステップを指定すると1分間ブロック )
  8. 8. ロボットに使う場合…走行中、センシングも通信も中断されちゃう!For better control, keep the speed high andonly go a few steps with each call to step().(Arduino Reference)そうではなく、並行処理したい!
  9. 9. マイコンでの並行処理・OSなし → ステートマシン設計長所:特別な知識・費用いらないスペック低くてもOK短所:超巨大switch文(処理の流れが非常に読みにくい)・OSあり → マルチタスク長所:並行処理をスッキリ記述できる短所:スペック要求(RAM、ROM、処理能力)OSの知識・有償のOSなら費用がいる
  10. 10. OSなしでの並行処理メインループ{処理1();処理2();処理3();} 必ず短時間で関数を抜けること→ ブロッキング処理は不可→ 複雑なステートマシンになる
  11. 11. OSをつかった並行処理// OSがないときswitch(state){case READY:if( command == STEP100 ){stepper.start();state = MOVING;}break;case MOVING:if(stepper.count() >= 100){stepper.stop();state = READY;}break;}// OSがあるときwhile (true){if( command == STEP100 ){stepper.start();while(stepper.count() < 100){SleepTask(10);}stepper.stop();}}OSが関数をいったん中断して他のタスクに処理を移してくれる
  12. 12. マルチタスクOSの課題(1) マイコンのスペック要求(メモリ、処理能力)→ ARM Cortex-M3クラスなら無問題!(2) OSの知識が必要 & コンフィグがめんどくさい→ Arduino文化には馴染まないもっとお手軽にマルチタスクを!
  13. 13. むかし自作した簡易OSAVRIL-TAN(あぶりるたん) … APIは9個だけAPI 説明CreateTask タスクを生成するStartTask 指定IDのタスクの開始(実行待ち状態へ)ExitTask 自タスクの停止(休止状態へ)SleepTask 自タスクを指定時間だけスリープ(待ち状態へ)RotateTask 次のタスクへ処理を移す(自タスクは実行待ち状態へ)WaitFlag 自タスクを指定IDのイベントフラグ待ちにする(待ち状態へ)PollFlag 指定IDのイベントフラグのポーリングSetFlag 指定IDのイベントフラグのセットClearFlag 指定IDのイベントフラグのクリア
  14. 14. 簡易OSを用いた記述#define ID_TASK_HOGE 0void taskHoge() {処理;}void setup() {初期設定;CreateTask( ID_TASK_HOGE, taskHoge );StartTask( ID_TASK_HOGE );}
  15. 15. OSをクラスで隠蔽class : public Task {public:void run () {処理;}} taskHoge;void setup() {初期設定;taskHoge.start();}
  16. 16. もっとシンプルに!@task taskHoge() {処理;}void setup() {初期設定;taskHoge.start();}簡潔な記法↓プリプロセッサで展開
  17. 17. タスク制御のメソッド@taskオブジェクトのメソッドstart() タスクを開始する (実行待ち状態へ)startCycle(周期) 周期タスクを開始する (待ち状態へ)startOneShot() ワンショットタスクを開始する (待ち状態へ)exit() タスクを停止する (休止状態へ)sleep()sleep(期間)タスクを(指定時間だけ)スリープ (待ち状態へ)wakeup() タスクをスリープから復帰させる (実行待ち状態へ)waitFlag(フラグ) タスクをイベントフラグ待ちにする (待ち状態へ)yield() タスクを強制中断する (実行待ち状態へ)
  18. 18. Easy MultitaskingRTOSクラスライブラリプリプロセッサマルチタスク機能を提供C++クラスで隠蔽簡潔な@task記法
  19. 19. 最後に…ユーザー会の手でOSやライブラリなどを開発していくなら…オンボードJTAGデバッガぜひ載せてほしい!
  20. 20. 以上ご清聴ありがとうございました妄想乙でした

×