別シリーズにてUNO R4にOLEDディスプレイを接続。これでprintfしなくても「出力」可能となりました。とは言え一つしかない虎の子のOLEDを複数Taskで奪い合うのは醜い。そこでOLED表示TASKを作製、他のTASKどもはそちらにQueue経由でお願いする形にいたしました。今回のはそのプロトタイプです。
モダンOSのお砂場(76) UNO R4でFreeRTOS、ミューテックスを使う一手間
前々回バイナリ・セマフォ、前回はカウンティング・セマフォでした。今回ミューテックスで気づきました。手元のFreeRTOS、デフォルトではミューテックス使えるようになってません。ミューテックスって言ったら排他制御業界(そんな業界あるのか?)の大スターじゃないかい。例によってNotification推しのためだろうけど。
“モダンOSのお砂場(76) UNO R4でFreeRTOS、ミューテックスを使う一手間” の続きを読む
モダンOSのお砂場(75) UNO R4でFreeRTOS、カウンティング・セマフォ
前回はバイナリ・セマフォを使ってみました。バイナリが出来るなら次はカウンティングだろ~ということで今回はカウンティングです。でも御本家FreeRTOS様的には「Notify推し」ということで「セマフォ」はディスられて?ますけど。まあ有るものは使ってみるっと。今回は2つしかないリソースを3人が取り合う形。
モダンOSのお砂場(74) UNO R4、RA4M1でFreeRTOS、バイナリ・セマフォ
前回はNotifyを使って割り込み(ISR)とタスク間で「同期」をとってみました。今回は同様なことをSemaphoreを使って行ってみます。でも御本家ページより引用の”TIPS”を上に掲げましたるとおり、Notify使う方が「推し」みたいデス。「でもでも」APIは存在するし、大願成就のためには使ってみるしかないっと。
“モダンOSのお砂場(74) UNO R4、RA4M1でFreeRTOS、バイナリ・セマフォ” の続きを読む
モダンOSのお砂場(73) UNO R4でFreeRTOS、割り込みISRからNotify
前回は2つのTask間でGiveしてTakeして相互にNotify。今回は割り込みサービスルーチン(ISR)からNotifyです。ISRからTaskへの一方通行なんだけれども。やらないわけにもいかないけれどもチョイ変のチョイ変。でもこれで割り込みが何か解決してくれることを待っているTaskというのも簡単。ホントか?
“モダンOSのお砂場(73) UNO R4でFreeRTOS、割り込みISRからNotify” の続きを読む
モダンOSのお砂場(72) UNO R4、RA4M1でFreeRTOS、Notify
前々回、TaskのSuspendとResumeをやっています。これは停める相手の都合などお構いなしに停止するという乱暴な?ものでした。今回は「待っているのでよろしく」「起きてください」とお互いに尊重しあいながら停止、再開できるNotifyを練習してみます。お互いにGive and Takeちゅうことですかい。
モダンOSのお砂場(71) UNO R4、RA4M1でFreeRTOS、ISRからQUEUE
前回はタスクの一時停止と再開でしたが、その横で割り込みも使ってました。しかし割り込みとタスクの関係性は薄かったデス。そこで今回は、タスク側とも「分かり合える」スケジューラのタイムスタンプをQueueを使って送信することで割り込み発生タイミングをタスク側に伝えてみたいと思います。
モダンOSのお砂場(70) UNO R4、ルネサスRA4M1でFreeRTOS、サスペンド
タスクの一時停止(suspend)と再開(resume)を実験しようとしたのですが、勝手な割り込み端子への思い込みに足をすくわれました。Arduino UNO R4は32ビット機になったわけだし、その辺の端子はみな割り込みに使えるんじゃね?大間違い!Arduino UNOの伝統にのっとり、2番、3番だけなのね。律儀。
“モダンOSのお砂場(70) UNO R4、ルネサスRA4M1でFreeRTOS、サスペンド” の続きを読む
モダンOSのお砂場(69) UNO R4、ルネサスRA4M1でFreeRTOS、ヒープメモリ
前回、FreeRTOSの各種設定を決めるFreeRTOSConfig.hを読んでいて「思っていたのと違う」ところがありました。勝手に思いこんでいただけなんだけれども。今回もそんな思い込みを正して参りたいと思います。メモリの割り当てについてです。どっかヒープから割り当ててくれているのでないの?
モダンOSのお砂場(68) UNO R4、ルネサスRA4M1でFreeRTOS、優先順位
前回はDelayに関するAPIでした。今回はTaskのPriorityを操作してみます。今までPriorityはみんな「1」みたいなテキトーな設定をしてきました。優先順位を設定する実験してみることで勉強になるんでないかい、という目論見。しかし、改めて FreeRTOSConfig.h を読んでみると思っていたのと違う?
“モダンOSのお砂場(68) UNO R4、ルネサスRA4M1でFreeRTOS、優先順位” の続きを読む
モダンOSのお砂場(67) UNO R4、ルネサスRA4M1でFreeRTOS、Delay
FreeRTOSにはある期間の間Taskの実行をブロックするDelayの名がつくAPIが3種あります。前回まで一番お手軽なvTaskDelay(引数も一つしかないし)ばかりを使ってきたのですが、今回は3種の違いについて勉強したいと思います。その上で実機上で動かして実感してみると。軽負荷だとあまり差が見えないけれど。
モダンOSのお砂場(66) UNO R4、ルネサスRA4M1でFreeRTOS、Queue
今回はArm Cortex-M4コアのルネサスマイコンRA4M1を搭載したArduino UNO R4上で、FreeRTOSのQueueを使ってみたいと思います。複数のタスク間で安全にデータを受け渡しできる便利な構造です。データの送受ができることは当たり前なので、今回は送受にどのくらいの時間がかかるのだが目安を観察。 “モダンOSのお砂場(66) UNO R4、ルネサスRA4M1でFreeRTOS、Queue” の続きを読む
モダンOSのお砂場(65) FreeRTOSのコルーチン、Deprecatedとな!
ソフトウエアは何時か滅びるとの理に思いはせる今回です。前回、Arduino UNO R4にてFreeRTOSのコルーチン動かしてみました。Configいじったりしてチョイ面倒だったです。しかしFreeRTOSのドキュメントを見たならば Deprecatedと表示がでてました。いつの間に?よく読んでなかった私が悪い。
モダンOSのお砂場(64) UNO R4、ルネサスRA4M1でFreeRTOSのコルーチン
前回はOSタイマ、前々回はTask(プリエンプティブな)、並行処理を行う方法はもうお腹一杯な気がしないでもないです。しかし、FreeRTOSにはもう一つあり。CoRoutineです。本格的なTaskが使えるFreeRTOSでわざわざコルーチンする意味があるのか不明ですが、今回は「あるものは使ってみる」ということで。
“モダンOSのお砂場(64) UNO R4、ルネサスRA4M1でFreeRTOSのコルーチン” の続きを読む