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

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

11.3.3. スレッドセーフ・ドライバー

HAL と MicroC/OS-II 環境の間でドライバーを移植できるようにするために、インテルはオペレーティング・システム機能へのアクセスを提供する、オペレーティング・システムに依存しない一連のマクロを定義します。これらのマクロは、マルチスレッド環境にのみ関連する機能を実装します。マルチスレッド uCOS/II プロジェクトに向けてコンパイルを実行すると、マクロは MicroC/OS-II API 呼び出しに展開されます。シングルスレッド HAL プロジェクトに向けてコンパイルを実行すると、マクロは無害な空の実装に展開されます。これらのマクロは、インテルが提供するデバイスドライバー・コードであり、同様の移植性を備えたデバイスドライバーを作成する必要がある場合に使用できます。

ヘッダーファイルに対してリストされたパスは、<Intel Quartus installation directory>/nios2eds/components/micrium_uc_osii/UCOSII/inc ディレクトリーを基準とする相対パスです。

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

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

os/alt_flag.h および priv/alt_flag_ucosii.h で定義されます。

ALT_FLAG_GRP(group) group という名前のフラググループを作成します。 空のステートメントです。
ALT_EXTERN_FLAG_GRP(group) group という名前のフラググループへ外部参照を作成します。
ALT_STATIC_FLAG_GRP(group) group という名前の静的フラググループを作成します。
ALT_FLAG_CREATE(group, flags) OSFlagCreate() を呼び出して、フラグ・グループ・ポインターの group をフラグ値 flags で初期化します。エラーコードは、マクロの戻り値です。 0 を返します。(成功)
ALT_FLAG_PEND(group, flags, wait_type, timeout) groupflagswait_type、および timeout に設定された最初の 4 つの入力引数で OSFlagPend() を呼び出します。エラーコードは、マクロの戻り値です。
ALT_FLAG_POST(group, flags, opt) groupflags、および opt に設定された最初の 3 つの入力引数で OSFlagPost() を呼び出します。エラーコードは、マクロの戻り値です。

セマフォーマクロ

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

ALT_SEM(sem) sem という名前の OS_Event ポインターを作成します。 空のステートメントです。
ALT_EXTERN_SEM(sem) sem という名前の OS_Event ポインターへの外部参照を作成します。
ALT_STATIC_SEM(sem) sem という名前の静的 OS_Eventpointer を作成します。
ALT_STATIC_CREATE(sem, value) 引数値で OSSemCreate() を呼び出し、OS_Event ポインター sem を初期化します。戻り値は、成功時は 0、それ以外は負の値です。 0 を返します。(成功)
ALT_SEM_PEND(sem, timeout) sem および timeout に設定された最初の 2 つの引数で OSSemPend() を呼び出します。エラーコードは、マクロの戻り値です。
ALT_SEM_POST(sem) 入力引数 sem を使用して OSSemPost() を呼び出します。
表 43.  イベント・フラグ・マクロの引数
引数 有効な入力 定義するヘッダー
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
  • ucos_ii.h
timeout
  • ALT_FLAG_WAIT_MAX_TIMEOUT
opt
  • ALT_FLAG_SET
  • ALT_FLAG_CLEAR