
前回はSPI接続だったので、今回はUARTです。UARTなどいつもprintfデバッグで使ってるとも思ったのですが、マジメに確かめてみるといろいろあり。前回同様、OSはMbed OS v6.15、開発環境はオンラインのKeil Stucio Cloudです。ターゲットボードはST社のNucleo-F401REです。
デバイス作る人>>デバイス使う人>>デバイスおたく
別シリーズでSPI接続のADCをArduino Unoに取り付け、SPI接続の確認を実施。今回は同じことをNucleo-F401REでやってみます。OSはMBed OS v6.15を使用、開発環境には最近使い始めた Keil Studio Cloudを利用。慣熟訓練?Arduinoよりコード短いんじゃないかい。
“モダンOSのお砂場(48) Mbed OS6、SPI接続ADC、AVR から STM32付替” の続きを読む
前々回にZephyrのデバイスツリーが分かったかのようなことを書いてしまいましたが、あれは一時の気の迷いでしたね。全然分かっちゃおりませんでしたな。今回、スイッチから割り込みを受けようとしてまた迷宮に迷いこみました。そういう時は素直にサンプルソースなど真似してみるべしと。やってみました。 “モダンOSのお砂場(47) Zephyr、キー割り込み受け。STM32F401RE” の続きを読む
前回Zephyr OSのデバイスツリーの高い壁?を何とか乗り越えた?ので、今回はマルチスレッドに進みたいと思います。といっても前回作成のプログラムで2つ光らせていたLEDの片方を新設のスレッドの制御下に移すというだけのもの。なにはともあれマルチスレッド、と。
大分前にZephyr RTOSのサンプルをビルドした後進捗なく過ごしておりましたのは他でもありません、Device Treeの抽象度の高さにGPIOの端子をトグルさせるのもどうしてよいか分からない状態だったからです。その辺FreeRTOSもArm MbedOSも分かり易いのでZephyr避けてました。GWだし再開。
前回Mutex(2つあるうちのRTOS Mutexと呼ばれている方)を使ってみました。スレッド間の同期には有効なAPIですが、残念ながらISR(割り込みサービスルーチン)との間では使用できません。そこで今回はSemaphoreを使って、ISRとThreadの間で排他制御を行ってみます。
前回はThread間の通信に便利なMail APIを使ってみました。今回から排他制御に入りたいと思います。しかし似たようなAPIが複数あって何をどこに使ったら良いんだかRTOS素人の私にはサッパリです。今回は一番単純そうなMutexを実験しつつ、近縁?らしいAPIのいくつかについてまとめてみました。
前回はスレッド間で通信するのにQueueを使ってみましたが、今回は似た「先入れ先出し」の構造でMailです。Mail便利です。こちらを使うとQueueには戻れない?便利なのは、詰め込むデータのためのメモリ領域の割り当て/解放の機能を含んでいるところ。alloc使うと後戻りできまっせん。
今回はQueueを使ってみたいと思います。第34回で似たお名前のEventQueueというものを使ってみましたが、全く異なるものです。QueueはスレッドやISR間の通信のための仕組みで、EventQueueはノンプリエンプティブな制御権の移動の仕組みです。「よくある」Queueだと思ってやってみたのだけれど疑問あり。何故?
前回ConditionalVariableをヤバイなどと言ってしまいましたが、どうもそんなこと無いみたいです。メモリの使い方がOS2とOS6で違うだけだったみたい。ボードもOSも「2種併用中」で混乱してました。さて、今回はEventFlagsです。スレッド間、あるいは割り込みサービスルーチンからイベントを他に簡単に伝えることができるもの。
前回がPWM出力だったので、今回は逆に入力インターバルをタイマAPIで測定してみました。入力は割り込み受け、人間がボタンを押す想定なので精度的にはいい加減な方法です。まあ、とりあえずボタンを押す時間間隔は測れたと。また、前回と異なり今回はオブジェクトコードの作成にWebベースのMbed Compilerを使ってみます。
前回はスレッドを使って2つの仕事を並行処理でした。今回は外部端子割り込みを使ってみます。Mbed OS6での割り込み処理の流儀は、FreeRTOSの割り込みの流儀とはちょっと違う感じがいたします。OSとして割り込みやIOなどを「仕切る」Mbed OS6と、他のフレームワークに乗っかってRTOS機能を提供するFreeRTOSと(個人の感想です。)