モダンOSのお砂場(47) Zephyr、キー割り込み受け。STM32F401RE

KYINTR_EC
Joseph Halfmoon

前々回にZephyrのデバイスツリーが分かったかのようなことを書いてしまいましたが、あれは一時の気の迷いでしたね。全然分かっちゃおりませんでしたな。今回、スイッチから割り込みを受けようとしてまた迷宮に迷いこみました。そういう時は素直にサンプルソースなど真似してみるべしと。やってみました。 “モダンOSのお砂場(47) Zephyr、キー割り込み受け。STM32F401RE” の続きを読む

モダンOSのお砂場(46) Zephyr、スレッド生成、ダブルLチカ STM32F401RE

ThreadA_VScode
Joseph Halfmoon

前回Zephyr OSのデバイスツリーの高い壁?を何とか乗り越えた?ので、今回はマルチスレッドに進みたいと思います。といっても前回作成のプログラムで2つ光らせていたLEDの片方を新設のスレッドの制御下に移すというだけのもの。なにはともあれマルチスレッド、と。

“モダンOSのお砂場(46) Zephyr、スレッド生成、ダブルLチカ STM32F401RE” の続きを読む

モダンOSのお砂場(45) Zephyr、抽象度?高っ!GPIOをトグルするまでのあれこれ

ZephyrGPIO_EC
Joseph Halfmoon

大分前にZephyr RTOSのサンプルをビルドした後進捗なく過ごしておりましたのは他でもありません、Device Treeの抽象度の高さにGPIOの端子をトグルさせるのもどうしてよいか分からない状態だったからです。その辺FreeRTOSもArm MbedOSも分かり易いのでZephyr避けてました。GWだし再開。

“モダンOSのお砂場(45) Zephyr、抽象度?高っ!GPIOをトグルするまでのあれこれ” の続きを読む

モダンOSのお砂場(44) Mbed OS6、SemaphoreでISRの中から排他制御

SemaphoreSampleDUT
Joseph Halfmoon

前回Mutex(2つあるうちのRTOS Mutexと呼ばれている方)を使ってみました。スレッド間の同期には有効なAPIですが、残念ながらISR(割り込みサービスルーチン)との間では使用できません。そこで今回はSemaphoreを使って、ISRとThreadの間で排他制御を行ってみます。

“モダンOSのお砂場(44) Mbed OS6、SemaphoreでISRの中から排他制御” の続きを読む

モダンOSのお砂場(43) Mbed OS6、Mutexと近縁APIの微妙な関係?

MutexDUT
Joseph Halfmoon

前回はThread間の通信に便利なMail APIを使ってみました。今回から排他制御に入りたいと思います。しかし似たようなAPIが複数あって何をどこに使ったら良いんだかRTOS素人の私にはサッパリです。今回は一番単純そうなMutexを実験しつつ、近縁?らしいAPIのいくつかについてまとめてみました。

“モダンOSのお砂場(43) Mbed OS6、Mutexと近縁APIの微妙な関係?” の続きを読む

モダンOSのお砂場(42) Mbed OS6、Mail、allocちょっと気が咎めるけど便利

Result
Joseph Halfmoon

前回はスレッド間で通信するのにQueueを使ってみましたが、今回は似た「先入れ先出し」の構造でMailです。Mail便利です。こちらを使うとQueueには戻れない?便利なのは、詰め込むデータのためのメモリ領域の割り当て/解放の機能を含んでいるところ。alloc使うと後戻りできまっせん。

“モダンOSのお砂場(42) Mbed OS6、Mail、allocちょっと気が咎めるけど便利” の続きを読む

モダンOSのお砂場(41) Mbed OS6、Queue、いろいろ疑問あるんですが。

Result
Joseph Halfmoon

今回はQueueを使ってみたいと思います。第34回で似たお名前のEventQueueというものを使ってみましたが、全く異なるものです。QueueはスレッドやISR間の通信のための仕組みで、EventQueueはノンプリエンプティブな制御権の移動の仕組みです。「よくある」Queueだと思ってやってみたのだけれど疑問あり。何故?

“モダンOSのお砂場(41) Mbed OS6、Queue、いろいろ疑問あるんですが。” の続きを読む

モダンOSのお砂場(40) Mbed OS6、EventFlags、便利なお知らせ

F401RE
Joseph Halfmoon

前回ConditionalVariableをヤバイなどと言ってしまいましたが、どうもそんなこと無いみたいです。メモリの使い方がOS2とOS6で違うだけだったみたい。ボードもOSも「2種併用中」で混乱してました。さて、今回はEventFlagsです。スレッド間、あるいは割り込みサービスルーチンからイベントを他に簡単に伝えることができるもの。

“モダンOSのお砂場(40) Mbed OS6、EventFlags、便利なお知らせ” の続きを読む

モダンOSのお砂場(39) Mbed OS6、ConditionalVariableヤバイ?

NucleoF401RE
Joseph Halfmoon

カッコイイ機能があるな、ということで使ってみました。ConditionalVariableであります。確かにカッコイイのですが、ターゲットのSTM32F401REにとっては結構ヤバイ奴でした。シンプルなサンプルコードなのにRAMがいっぱいいっぱいな感じ。何かコードを書けるような余地があるような気がしません。気のせい?

※2022/03/17追記:「気のせい」でした。すみません。OS6はZI Dataとして扱われる部分が多いためにヤバイなどと書いてしまいました。全然ヤバくありません。ヤバイのは自分。

“モダンOSのお砂場(39) Mbed OS6、ConditionalVariableヤバイ?” の続きを読む

モダンOSのお砂場(38) Mbed OS6、Timerでインターバル測定。STM32

MbedSRC
Joseph Halfmoon

前回がPWM出力だったので、今回は逆に入力インターバルをタイマAPIで測定してみました。入力は割り込み受け、人間がボタンを押す想定なので精度的にはいい加減な方法です。まあ、とりあえずボタンを押す時間間隔は測れたと。また、前回と異なり今回はオブジェクトコードの作成にWebベースのMbed Compilerを使ってみます。

“モダンOSのお砂場(38) Mbed OS6、Timerでインターバル測定。STM32” の続きを読む