Nios® V プロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 7/08/2024
Public
ドキュメント目次

13.2.3. スレッドセーフ HAL ドライバー

HAL 環境と FreeRTOS 環境間でドライバーを移植可能にするために、インテルはオペレーティング・システムに依存しないマクロのセットを定義しており、これによりオペレーティングシステムの機能にアクセスできます。これらのマクロは、マルチスレッド環境にのみ関連する機能を実装します。これらのマクロは、インテルが提供するデバイスドライバー・コードで使用することができ、同様の移植性を持つデバイスドライバーを記述する必要がある場合にも使用できます。
  • マルチスレッドの FreeRTOS プロジェクトをコンパイルする場合、マクロは FreeRTOS API 呼び出しに展開されます。
  • シングルスレッドの HALプロジェクトをコンパイルする場合、マクロは無害な空の実装に展開されます。

ヘッダーファイルに向けてリストされたパスは、/ip/altera/soft_processor /aws_freertos/FREERTOS/inc ディレクトリーに対する相対パスです。

表 45.  スレッドセーフ HAL ドライバー用の OS に依存しないマクロ
マクロ FreeRTOS 実装 シングルスレッド HAL 実装

イベント・フラグ・マクロ

os/alt_flag.h and priv/alt_flag_freertos.h で定義されます。

ALT_FLAG_GRP(group) group という名前のフラググループを作成します。 空のステートメントです。
ALT_EXTERN_FLAG_GRP(group) group という名前のフラググループへ外部参照を作成します。
ALT_STATIC_FLAG_GRP(group) group という名前の静的フラググループを作成します。
ALT_FLAG_CREATE(group, flags)
  • xEventGroupCreate() を呼び出して、フラグ値 flags でフラグ・グループ・ポインター group を初期化します。
  • エラー・コードは、マクロの戻り値です。
0 を返します。

(成功)

ALT_FLAG_PEND(group, flags, wait_type, timeout)
  • 最初の4つの入力引数をそれぞれ groupflagswait_type、および timeout に設定して、xEventGroupWaitBits() を呼び出します。
  • エラー・コードは、マクロの戻り値です。
ALT_FLAG_POST(group, flags, opt)
  • 最初の 3 つの入力引数をそれぞれ groupflags、および opt に設定して、xEventGroup[Set|Clear]Bits() または xEventGroup[Set|Clear]BitsFromISR() を呼び出します。
  • エラー・コードは、マクロの戻り値です。

セマフォーマクロ

os/alt_sem.h and priv/alt_sem_freertos.h で定義されます。

ALT_SEM(sem) sem という名前の SemaphoreHandle_t を作成します。 空のステートメントです。
ALT_EXTERN_SEM(sem) sem という名前の SemaphoreHandle_t への外部参照を作成します。
ALT_STATIC_SEM(sem) sem という名前の静的 SemaphoreHandle_t を作成します。
ALT_STATIC_CREATE(sem, value)
  • 引数値で xSemaphoreCreateCounting() を呼び出して、SemaphoreHandle_tsem を初期化します。
  • 戻り値は、成功時は 0、それ以外は負の値です。
0 を返します。

(成功)

ALT_SEM_PEND(sem, timeout)
  • 最初の2つの引数をそれぞれ sem および timeout に設定して、xSemaphoreTake() を呼び出します。
  • エラー・コードは、マクロの戻り値です。
ALT_SEM_POST(sem) 入力引数 sem を使用して xSemaphoreGive() を呼び出します。
表 46.  イベント・フラグ・マクロの引数
引数 有効な入力 定義するヘッダー
wait_type
  • ALT_FLAG_WAIT_SET_ALL_WITH_CONSUME
  • ALT_FLAG_WAIT_SET_ALL_WO_CONSUME
  • ALT_FLAG_WAIT_SET_ANY_WITH_CONSUME
  • ALT_FLAG_WAIT_SET_ANY_WO_CONSUME
os/alt_flag.h
timeout
  • ALT_FLAG_WAIT_MAX_TIMEOUT
opt
  • ALT_FLAG_SET
  • ALT_FLAG_CLEAR