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

イベントフラググループ:紹介と基本サービス


RTOSRevealedシリーズを表示する

イベントフラググループは、以前の記事で紹介されました。 Nucleus SEでは、信号に多少似ていますが、柔軟性が高くなっています。これらは、タスク間で単純なメッセージを渡すための低コストでありながら柔軟な手段を提供します。

イベントフラグの使用

Nucleus SEでは、イベントフラグはビルド時に設定されます。アプリケーションには、最大16のイベントフラググループを設定できます。イベントフラググループが設定されていない場合、イベントフラググループに関連するデータ構造やサービスコールコードはアプリケーションに含まれません。

イベントフラググループは、8つの1ビットフラグのセットであり、複数のタスクで安全に利用できるようにアクセスが制御されます。 1つのタスクで、イベントフラグの任意の組み合わせを設定またはクリアできます。別のタスクは、いつでもイベントフラググループを読み取るか、特定のフラグパターンを待機(ポーリングまたは一時停止)することができます。

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

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

Nucleus SEのほとんどの側面と同様に、イベントフラググループの構成は主に #define によって制御されます。 nuse_config.h のステートメント 。キー設定は NUSE_EVENT_GROUP_NUMBER 、アプリケーションに設定されているイベントフラググループの数を決定します。デフォルト設定は0(つまり、イベントフラググループは使用されていません)で、16までの任意の値に設定できます。値が間違っていると、コンパイル時エラーが発生し、 nuse_config_checkのテストによって生成されます。 h (これは nuse_config.c に含まれています したがって、このモジュールでコンパイルされます)結果として #error コンパイル中のステートメント。

ゼロ以外の値を選択することは、イベントフラググループの「マスターイネーブル」です。これにより、一部のデータ構造がそれに応じて定義およびサイズ設定され、このシリーズの後半でさらに詳しく説明します。また、APIを有効にする設定をアクティブにします。

APIの有効化

Nucleus SEのすべてのAPI関数(サービス呼び出し)には、有効な #define があります。 nuse_config.h の記号 。イベントフラググループの場合、これらは次のとおりです。

  NUSE_EVENT_GROUP_SET   NUSE_EVENT_GROUP_RETRIEVE   NUSE_EVENT_GROUP_INFORMATION   NUSE_EVENT_GROUP_COUNT  

デフォルトでは、これらはすべて FALSE に設定されています 、したがって、各サービスコールを無効にし、実装コードを含めることを禁止します。アプリケーションのイベントフラググループを構成するには、使用するAPI呼び出しを選択し、それらの有効化記号を TRUE に設定する必要があります。 。

これは、デフォルトの 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関数が有効で、イベントフラググループが構成されていない場合( NUSE_Event_Group_Count()を除く)、コンパイル時エラーが発生します。 これは常に許可されています)。コードで有効にされていないAPI呼び出しを使用すると、アプリケーションに実装コードが含まれていないため、リンク時間エラーが発生します。

イベントフラグサービス呼び出し

Nucleus RTOSは、イベントフラグに関連する7つのサービス呼び出しをサポートし、次の機能を提供します。

これらの各サービス呼び出しの実装について詳しく調べます。

(NucleusRTOSまたはNucleusSEのいずれかで)リセット機能が提供されていないことに注意してください。これは意図的なものです。リセットは、特別な状態が優勢であることを意味します。イベントフラググループの場合、唯一の「特別な」条件はすべてゼロであり、 NUSE_Event_Group_Set()で設定できます。 。

イベントフラググループセットおよび取得サービス

イベントフラググループで実行できる基本的な操作は、1つ以上のフラグを設定し、フラグの現在の状態を取得することです。 NucleusRTOSとNucleusSEはそれぞれ、これらの操作のための2つの基本的なAPI呼び出しを提供します。これについては、ここで説明します。

イベントフラグはビットであるため、2進数として視覚化するのが最適です。標準Cはバイナリ定数(8進数と16進数のみ)の表現をサポートしていないため、Nucleus SEディストリビューションには便利なヘッダーファイル nuse_binary.h が含まれています。 –これには #define が含まれます b01010101 の形式の記号 256個の8ビット値すべてに対して。

イベントフラグの設定

イベントフラグを設定するためのNucleusRTOS API呼び出しは非常に柔軟であり、 AND を使用してイベントフラグを設定およびクリアできます。 およびまたは オペレーション。 Nucleus SEは、タスクの一時停止がオプションであることを除いて、同じサービスを提供します。

Nucleus RTOSAPIによるフラグ設定の呼び出し

サービスコールプロトタイプ:

STATUS NU_Set_Events(NU_EVENT_GROUP * group、UNSIGNED event_flags、
OPTION操作);

パラメータ:

グループ –ユーザー提供のイベントフラググループ制御ブロックへのポインタ

event_flags –操作対象のフラグのパターンのビット値

操作 –実行する操作。 NU_OR の可能性があります (フラグを設定するため)または NU_AND (フラグをクリアするため)

返品:

NU_SUCCESS –通話は正常に完了しました

NU_INVALID_GROUP –イベントフラググループポインタが無効です

NU_INVALID_OPERATION –指定された操作は NU_OR ではありませんでした または NU_AND

Nucleus SEAPIによるフラグ設定の呼び出し

このAPI呼び出しは、Nucleus RTOSAPIの主要な機能をサポートしています。

サービスコールプロトタイプ:

STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP group、
U8 event_flags、OPTION操作);

パラメータ:

グループ –フラグが設定/クリアされるイベントグループのインデックス(ID)

event_flags –操作対象のフラグのパターンのビット値

操作 –実行する操作。 NUSE_OR の可能性があります (フラグを設定するため)または NUSE_AND (フラグをクリアするため)

返品:

NUSE_SUCCESS –通話は正常に完了しました

NUSE_INVALID_GROUP –イベントフラググループインデックスが無効です

NUSE_INVALID_OPERATION –指定された操作は NUSE_OR ではありませんでした または NUSE_AND

Set EventFlagsのNucleusSE実装<​​/ strong>

NUSE_ Event_Group_Set()の初期コード API呼び出しのブロック(タスクの一時停止)のサポートが有効になっているかどうかに関係なく、API関数(パラメーターチェック後)は一般的です。ロジックは非常に単純です:

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

ビットパターン、 event_flags 、は、指定されたイベントフラググループにORまたはANDされるだけです。

残りのコードは、タスクのブロックが有効になっている場合にのみ含まれます:

  #if NUSE_BLOCKING_ENABLE   while(NUSE_Event_Group_Blocking_Count [group]!=0)  {  U8インデックス; / *ブロックされているタスクがあるかどうかを確認します* /   / *このイベントグループについて* /   for(index =0; index   {  if((LONIB(NUSE_Task_Status [index])==  NUSE_EVENT_SUSPEND)  &&(HINIB(NUSE_Task_Status [index])==group))  {  NUSE_Task_Blocking_Return [index] =NUSE_SUCCESS;   NUSE_Task_Status [index] =NUSE_READY;  休憩;  }  }   NUSE_Event_Group_Blocking_Count [group]-;  }   #if NUSE_SCHEDULER_TYPE ==NUSE_PRIORITY_SCHEDULER   NUSE_Reschedule(NUSE_NO_TASK);   #endif   #endif   NUSE_CS_Exit();   return NUSE_SUCCESS;  

このイベントフラググループでタスクが中断された(取得された)場合、それらはすべて再開されます。スケジューラに応じて実行する機会がある場合、リターンの条件が満たされているかどうかを判断できます。イベントフラグの取得を参照してください。 以下。

2ページに進む>>


埋め込み

  1. カムロックの概要とその仕組み
  2. アイスクリューの紹介とその仕組み
  3. グロメットの紹介とその仕組み
  4. ステンレス鋼の紹介とその製造方法
  5. C# の基本的な入力と出力
  6. メールボックス:紹介と基本的なサービス
  7. セマフォ:ユーティリティサービスとデータ構造
  8. セマフォ:紹介と基本的なサービス
  9. イベントフラググループ:ユーティリティサービスとデータ構造
  10. キュー:紹介と基本的なサービス
  11. ArrowとFreelancer.comがElectronics&Electrical Engineering ServicesMarketplaceを立ち上げました