Soumettre la recherche
Mettre en ligne
マイコンでマルチタスク
•
Télécharger en tant que PPTX, PDF
•
3 j'aime
•
4,178 vues
Katsuhiko Terawaki
Suivre
Signaler
Partager
Signaler
Partager
1 sur 25
Télécharger maintenant
Recommandé
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
fisuda
IoT Agents とは? - FIWARE WednesdayWebinars
IoT Agents とは? - FIWARE WednesdayWebinars
fisuda
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)
fisuda
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
ken_kitahara
FIWARE勉強会 20190913
FIWARE勉強会 20190913
Nobuyuki Matsui
NGSI によるデータ・モデリング - FIWARE WednesdayWebinars
NGSI によるデータ・モデリング - FIWARE WednesdayWebinars
fisuda
俺が考えた最強のID連携デザインパターン
俺が考えた最強のID連携デザインパターン
Masaru Kurahayashi
誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
Shunsuke Kikuchi
Recommandé
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
fisuda
IoT Agents とは? - FIWARE WednesdayWebinars
IoT Agents とは? - FIWARE WednesdayWebinars
fisuda
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)
fisuda
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
ken_kitahara
FIWARE勉強会 20190913
FIWARE勉強会 20190913
Nobuyuki Matsui
NGSI によるデータ・モデリング - FIWARE WednesdayWebinars
NGSI によるデータ・モデリング - FIWARE WednesdayWebinars
fisuda
俺が考えた最強のID連携デザインパターン
俺が考えた最強のID連携デザインパターン
Masaru Kurahayashi
誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
Shunsuke Kikuchi
フリーでできるセキュリティチェック OpenVAS CLI編
フリーでできるセキュリティチェック OpenVAS CLI編
abend_cve_9999_0001
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
FIWARE Connecting to IoT
FIWARE Connecting to IoT
fisuda
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
CODE BLUE
コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略
fisuda
とある診断員とAWS
とある診断員とAWS
zaki4649
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
FIDO認証によるパスワードレスログイン実装入門
FIDO認証によるパスワードレスログイン実装入門
Yahoo!デベロッパーネットワーク
DockerでCoq インストール
DockerでCoq インストール
Yoshihiro Mizoguchi
C#で作ったプログラムのインストーラーをInnoSetupで作成(1)
C#で作ったプログラムのインストーラーをInnoSetupで作成(1)
Kenichi Yamada
ID連携のあるとき~、ないとき~ #エンプラ編
ID連携のあるとき~、ないとき~ #エンプラ編
Takashi Yahata
React Hooksでカスタムフックをつくろう
React Hooksでカスタムフックをつくろう
Yoichi Toyota
【Swift】ローカル通知のバックグラウンド対応
【Swift】ローカル通知のバックグラウンド対応
Nekokichi
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
Tatsuo Kudo
コメントビュアーを作った話
コメントビュアーを作った話
健人 辻
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Yohei Sasaki
Spring Social でソーシャルログインを実装する
Spring Social でソーシャルログインを実装する
Rakuten Group, Inc.
ZynqMPのQEMU
ZynqMPのQEMU
Mr. Vengineer
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
Tatsuo Kudo
LEDやモーターをArduinoで制御しよう
LEDやモーターをArduinoで制御しよう
Takashi Kanamaru
リアルタイムOSの必要性とTOPPERS/SSPの紹介
リアルタイムOSの必要性とTOPPERS/SSPの紹介
NSaitoNmiri
Contenu connexe
Tendances
フリーでできるセキュリティチェック OpenVAS CLI編
フリーでできるセキュリティチェック OpenVAS CLI編
abend_cve_9999_0001
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
FIWARE Connecting to IoT
FIWARE Connecting to IoT
fisuda
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
CODE BLUE
コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略
fisuda
とある診断員とAWS
とある診断員とAWS
zaki4649
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
FIDO認証によるパスワードレスログイン実装入門
FIDO認証によるパスワードレスログイン実装入門
Yahoo!デベロッパーネットワーク
DockerでCoq インストール
DockerでCoq インストール
Yoshihiro Mizoguchi
C#で作ったプログラムのインストーラーをInnoSetupで作成(1)
C#で作ったプログラムのインストーラーをInnoSetupで作成(1)
Kenichi Yamada
ID連携のあるとき~、ないとき~ #エンプラ編
ID連携のあるとき~、ないとき~ #エンプラ編
Takashi Yahata
React Hooksでカスタムフックをつくろう
React Hooksでカスタムフックをつくろう
Yoichi Toyota
【Swift】ローカル通知のバックグラウンド対応
【Swift】ローカル通知のバックグラウンド対応
Nekokichi
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
Tatsuo Kudo
コメントビュアーを作った話
コメントビュアーを作った話
健人 辻
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Yohei Sasaki
Spring Social でソーシャルログインを実装する
Spring Social でソーシャルログインを実装する
Rakuten Group, Inc.
ZynqMPのQEMU
ZynqMPのQEMU
Mr. Vengineer
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
Tatsuo Kudo
Tendances
(20)
フリーでできるセキュリティチェック OpenVAS CLI編
フリーでできるセキュリティチェック OpenVAS CLI編
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
FIWARE Connecting to IoT
FIWARE Connecting to IoT
Twitterのsnowflakeについて
Twitterのsnowflakeについて
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略
とある診断員とAWS
とある診断員とAWS
SpringBootTest入門
SpringBootTest入門
FIDO認証によるパスワードレスログイン実装入門
FIDO認証によるパスワードレスログイン実装入門
DockerでCoq インストール
DockerでCoq インストール
C#で作ったプログラムのインストーラーをInnoSetupで作成(1)
C#で作ったプログラムのインストーラーをInnoSetupで作成(1)
ID連携のあるとき~、ないとき~ #エンプラ編
ID連携のあるとき~、ないとき~ #エンプラ編
React Hooksでカスタムフックをつくろう
React Hooksでカスタムフックをつくろう
【Swift】ローカル通知のバックグラウンド対応
【Swift】ローカル通知のバックグラウンド対応
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
コメントビュアーを作った話
コメントビュアーを作った話
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Spring Social でソーシャルログインを実装する
Spring Social でソーシャルログインを実装する
ZynqMPのQEMU
ZynqMPのQEMU
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
En vedette
LEDやモーターをArduinoで制御しよう
LEDやモーターをArduinoで制御しよう
Takashi Kanamaru
リアルタイムOSの必要性とTOPPERS/SSPの紹介
リアルタイムOSの必要性とTOPPERS/SSPの紹介
NSaitoNmiri
G7プレゼンrtos自作
G7プレゼンrtos自作
Kazuhiro Takahashi
NiosII と RTOS について
NiosII と RTOS について
ryos36
REAL TIME OPERATING SYSTEM
REAL TIME OPERATING SYSTEM
prakrutijsh
Real Time OS For Embedded Systems
Real Time OS For Embedded Systems
Himanshu Ghetia
Real time Operating System
Real time Operating System
Tech_MX
En vedette
(7)
LEDやモーターをArduinoで制御しよう
LEDやモーターをArduinoで制御しよう
リアルタイムOSの必要性とTOPPERS/SSPの紹介
リアルタイムOSの必要性とTOPPERS/SSPの紹介
G7プレゼンrtos自作
G7プレゼンrtos自作
NiosII と RTOS について
NiosII と RTOS について
REAL TIME OPERATING SYSTEM
REAL TIME OPERATING SYSTEM
Real Time OS For Embedded Systems
Real Time OS For Embedded Systems
Real time Operating System
Real time Operating System
マイコンでマルチタスク
1.
マイコンでマルチタスク FreeRTOSの使い方 株式会社シーエー 寺脇勝彦
2.
マルチタスクって必要? • プログラム作成時間を劇的に削減 • プログラムの構造が簡素に
3.
例えばこんなプログラム • スイッチ1が押された時にはLED1を0.3秒周 期で点滅させる • スイッチ2が押された時にはLED2を1秒周 期で点滅させる SW1 SW2 LED1 LED2
4.
マルチタスク無しプログラム Void main() { While(TRUE){ Sw1Led1();//何かやってすぐに戻る Sw2Led2();//何かやってすぐに戻る } }
5.
LED1プログラム Int phase =
0; Volatile int millisec = 0 ;//ミリ秒数:割り込みでカウントアップ void Led1Sw1() { switch( phase ) { case 0 ://SW1 の確認フェーズ if( SW1 == OFF ) { phase=0; return; } LED1=ON; millisec=0; phase=1; return;
6.
続き case 1 : if(
milliSec <= 300 ) { return ;//LED OFF にするタイミングになるまでは何もしな い } LED1 = OFF ; millisec = 0 ; phase=2 ; return ; case 2: if( milliSec <= 300 ) { return ;//1周期になるまでは、何もしない } phase=0 ; return ; } } 同様なプログラムを、SW2LED2についても作る
7.
マルチタスクを使うとどうなる か Void main() { Sw1Led1タスクを起動 Sw2Led2タスクを起動 while(1){//なんかの仕事 } }
8.
マルチタスクプログラム Void Sw1Led1Task() { while(TRUE)
{ if( SW1 == OFF ) { Sleep(1); continue ; //whileループ先頭へ } LED1 = ON ; Sleep(300);//LED2は、1000ms LED1 = OFF ; Sleep(300);//LED2は、1000ms } } 同様なプログラムを SW2LED2についても作 る
9.
プログラムが簡単になった!!! • Sw1Led1関数と、Sw2Led2関数は、同時に 動く • 正確に言うと、同時に動作するように振 る舞っている。
10.
マルチタスクやるには • FreeRTOS http://www.freertos.org/ •
対応しているマイコン ARM/H8/RX600 • Arduino UNO -> Duinos(FreeRTOS移植版)。 • お奨めは、 Stbee http://strawberry-linux.com/stbee/ 3150円 RAM32K、ROM500K、72MHz シリアル5チャネル GCC 書籍 STM32マイコン徹底入門 CQ出版
11.
実際のプログラムは? int main(void){ BoardInit(); xTaskCreate((TASK_FUNC)Sw1Led1 ,"Sw1Led1", 192,
NULL, 1, NULL) ; xTaskCreate((TASK_FUNC)Sw2Led2 ,"Sw2Led2", 192, NULL, 1, NULL) ; vTaskStartScheduler(); // Start the scheduler while(TRUE) {//スケジューラーがエラーを起こすとここに来る } }
12.
続き void Sw1Led1( void
){ while(TRUE) { if( SW1() == OFF ) { vTaskDelay(1);continue ; } LED1(ON);vTaskDelay(300); LED1(OFF);vTaskDelay(300); } }
13.
これだけ覚えれば大丈夫 (ノンプリエンプティブ) • xTaskCreate タスク生成 •
vTaskStartScheduler スケジューラー開 始 • vTaskDelay 時間待ち • taskDISABLE_INTERRUPTS 割り込み禁止 • taskENABLE_INTERRUPTS 割り込み許可 • volatile 複数タスク変数
14.
マルチタスクの種類 • プリエンプティブ • ノンプリエンプティブ(コオペレーティブ)
15.
プリエンプティブ • 皆さんが使っているパソコンのOS • タスクは、OSが勝手に切り替える
16.
ノンプリエンプティブ • Windows3.1、Mac system6 •
プログラム上で、明示的なタスク切替が 必要 Sleep() 解放しないと、他のタスクに制御が行か ない • 少ないリソースで動く • 過激な割り込みでも大丈夫
17.
で、どっちのマルチタスクが良い の? • ライブラリが、マルチスレッド対応なら ば、プリエンプティブが良い • プリエンプティブの場合には、タスク間 で共有されるデータにアクセスする場合 には、同時に読み書きできないような 「ロック」の機構が必要
18.
ノンプリエンプティブ • vTaskDelay()を呼び出さなければタスクが 切り替わらないので、データの読み書き に、ロック機構はいらないことも多い。 • ライブラリがマルチタスク対応でない場 合には、選択肢はノンプリエンプティブ のみ。 •
FreeRTOSには、ノンプリエンプティブのオ プションがある。
19.
マルチタスクの落とし穴 • アセンブラのイメージが必要(スタック、レ ジスタ) • コンパイラの最適化の問題 タスク間で共有される変数には volatile
(Java でも使用可能) • スタック 巨大な配列は、関数の外に置く。 vApplicationStackOverflowHook()でチェック • 割り込み taskDISABLE_INTERRUPTS、taskENABLE_INTERRUPTS
20.
困った点 • FreeRTOS、GCC、CPUメーカーライブラリ で不整合が起き、うまく動かないことが ある。 • 動いている人の環境を一式もらってくる のが良い。 •
Arm GCCは、バグがあるっぽい 関数の外で、static char v[100] ;とかやると HardFault発生。static を外すと OK。
21.
マルチタスクOSを作る • 秋月 H8/3069
2000円 アセンブラが素直 RAM 16K ROM 512K アセンブラは、コンパイラに教えてもら おう • GCC http://www.kanebebe.com/download/H8uClinux/index.html • ソースコード http://www.computerartisan.com/miconlecture/index.html ノンプリエンプティブ
22.
計測器(デバッグログ) • アナログ • デジタル
23.
100円ショップの便利グッズ • 12V ->
5V シガーライター USB 変換器 • グルーガン グルースティックは、DIYショップが良い かも • ミノムシクリップ • ハンダ吸い取り器 • ドアや窓用の防犯ブザー(磁気センサー) • クリスマスツリーLED • 1.5V -> 5.0V LED懐中電灯
24.
参考 • Arm 開発環境(内容が古いので注意) http://miqn.net/ •
FreeRTOS http://www.freertos.org/ http://www.picfun.com/RTOS/FreeRTOS00.html Duinos(Arduino + FreeRTOS) http://www.computerartisan.com/company/work/bluev1/duinos.txt • 一番簡単なマルチタスクOS http://www.computerartisan.com/miconlecture/index.html
25.
ご静聴ありがとうございました
Télécharger maintenant