工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> 埋め込み

Nucleus SEのイベントフラググループ:設定とAPI使用の入門ガイド

Nucleus SEのイベントフラググループ:設定とAPI使用の入門ガイド
RTOS Revealedシリーズを表示

イベントフラググループは、シグナルに似ていますがより豊富な機能を持つ、Nucleus SEにおける軽量で柔軟なタスク間通信メカニズムを提供します。

イベントフラグの使用

Nucleus SEでは、イベントフラグはビルド時に設定されます。最大16グループまで定義可能。設定しない場合、RTOSは関連するすべてのデータ構造とAPIコードを省略します。

イベントフラググループの設定

イベントフラググループ数

設定はnuse_config.h内の#define指令で駆動されます。鍵マクロNUSE_EVENT_GROUP_NUMBERがアプリケーションで使用するグループ数を設定(デフォルト0)。16超または負値はnuse_config_check.hによるコンパイル時#errorをトリガー。

非ゼロ値を設定するとイベントフラグサブシステムが活性化:データ構造が割り当てられ、API有効化が考慮されます。

API有効化

各サービスコールにはnuse_config.hに有効化マクロがあります:

NUSE_EVENT_GROUP_SET NUSE_EVENT_GROUP_RETRIEVE NUSE_EVENT_GROUP_INFORMATION NUSE_EVENT_GROUP_COUNT 

デフォルトではすべてFALSEで、対応関数を無効化。APIを使用するには目的のマクロをTRUEに設定。ミスマッチ(NUSE_EVENT_GROUP_NUMBERが0なのにAPI有効化)はコンパイルエラーを引き起こします(NUSE_Event_Group_Count()は常に利用可能)。

デフォルトnuse_config.hからの抜粋:

#define NUSE_EVENT_GROUP_NUMBER 0 /* イベントグループ数 – 0-16 */ #define NUSE_EVENT_GROUP_SET FALSE /* サービスコール有効化 */ #define NUSE_EVENT_GROUP_RETRIEVE FALSE /* サービスコール有効化 */ #define NUSE_EVENT_GROUP_INFORMATION FALSE /* サービスコール有効化 */ #define NUSE_EVENT_GROUP_COUNT FALSE /* サービスコール有効化 */ 

有効化されていないAPIを参照するコードがあると、リンカが実装省略によりエラーを出します。

イベントフラグサービスコール

Nucleus SEにはイベントフラグ関連の7つのサービスコールがありますが、実装されているのは4つのみ:

専用のリセット関数はありません;NUSE_Event_Group_Set()でゼロフラグマスクに対するOR演算を行うことで、グループを全ゼロにリセットできます。

設定と取得操作

イベントフラグはビットなので、バイナリ値として表現するのが最適です。Nucleus SEにはnuse_binary.hが同梱され、b01010101のようなマクロで全256通りの8ビットパターンを定義しています。

イベントフラグの設定

RTOSとSEで類似のAPIを公開。RTOSプロトタイプは:

STATUS NU_Set_Events(NU_EVENT_GROUP *group, UNSIGNED event_flags, OPTION operation); 

パラメータ:

戻り値:

SE版は:

STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP group, U8 event_flags, OPTION operation); 

パラメータと戻りコードはRTOS版を反映し、NUSE_SUCCESS、NUSE_INVALID_GROUP、NUSE_INVALID_OPERATION。

実装のハイライト

コアルーチンはoperationをチェックしマスクを適用:

NUSE_CS_Enter(); if (operation == NUSE_OR) { NUSE_Event_Group_Data[group] |= event_flags; } else { /* NUSE_AND */ NUSE_Event_Group_Data[group] &= event_flags; } 

ブロッキング有効(NUSE_BLOCKING_ENABLE)時、全タスクをイテレーションし、このグループでサスペンドしているタスクをウェイクアップし、ブロッキングカウンタを更新。その後、優先度スケジューラがアクティブならリセケジュールが発生する可能性があります。

サスペンドタスクはフラグ状態変更時にレジュームし、待機条件を評価できるようになります。

ページ2へ >>

埋め込み

  1. カムロック完全解説:キャビネットを目立たず確実に施錠する仕組み
  2. アイボルト(アイスクリュー)とは:設計と用途のプロフェッショナルガイド
  3. グロメット完全ガイド:種類・用途・機器保護の仕組み
  4. ステンレス鋼解説:組成・製造プロセス・グローバルインパクト
  5. Nucleus SEのメールボックス:設定と使用の実践ガイド
  6. Nucleus RTOSのセマフォ:ユーティリティサービスとデータ構造
  7. Nucleus SEのセマフォ:概要、設定、API要点
  8. イベントフラググループの習得:Nucleus RTOS/SEのユーティリティサービスとデータ構造
  9. Nucleus SEのキュー:導入とコアサービスコール
  10. ArrowとFreelancer.com、電子/電気エンジニアリングサービスのグローバルマーケットプレイス「ArrowPlus」を立ち上げ
  11. C# 入出力の基礎:ユーザー入力と出力の基本をマスター