アプリ版:「スタンプのみでお礼する」機能のリリースについて

c言語でイベントフラグを使った制御をしたいんですけど
set_flg(FLG,0x01)
で設定したイベントフラグを他のタスクで
if(FLG == 0x01){}のようにして動きますか??

A 回答 (1件)

イベントフラグとは、タスク間の同期を行うために使われるビットパターンのことです¹²。

イベントフラグを設定するには、set_flg()関数を使います³。この関数は、第一引数にイベントフラグのID、第二引数に設定するビットパターンを指定します⁴。

イベントフラグを待つには、wai_flg()関数を使います⁴。この関数は、第一引数にイベントフラグのID、第二引数に待ち条件となるビットパターン、第三引数に待ち条件の種類(ANDまたはOR)、第四引数に待ち解除時に得られるビットパターンを格納する変数のポインタを指定します⁴。

したがって、あなたの質問の場合、set_flg(FLG,0x01)で設定したイベントフラグを他のタスクでif(FLG == 0x01){}のようにして動かすことはできません。なぜなら、FLGはイベントフラグのIDであり、ビットパターンではないからです。正しい方法は、wai_flg(FLG,0x01,TWF_OR,&flgptn)のようにして、イベントフラグが0x01になるまで待つことです⁴。

C言語でマルチスレッドプログラミングをするときは、寝たスレッドが起床するために必要なイベントをすべて参照しているかと自問自答すると、自分のアプリに必要な同期機構が分かります⁵。イベントフラグ以外にも、セマフォやメールボックスなどの同期・通信機能がありますので、用途に応じて適切に選択してください¹²。

ソース: Bing との会話 2023/8/8
(1) イベントフラグ、セマフォ | APS|組み込み業界専門メディア. https://www.aps-web.jp/academy/rtos/280/.
(2) 【問題1】タスク間の同期と通信:“組み込み力”向上! ETEC .... https://monoist.itmedia.co.jp/mn/articles/1009/1 …
(3) Windowsシミュレータで学ぶuITRON (2) - イベントフラグ - Qiita. https://qiita.com/imagou/items/80ec6e4970de31540 …
(4) ITRON入門 イベントフラグで学ぶタスク間同期・通信機能. https://monozukuri-c.com/itron-eventflg/.
(5) スレッドを使う前に知るべき C 言語の特性 - Qiita. https://qiita.com/aKatsuhiroMihara/items/211b109 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています