Altera Corporation セクション IV–1
セクション IV. マルチプロセッサ
の調整
このセクションでは、SOPC Builder システム向けにアルテラが提供して いるマルチプロセッサ調整のペリフェラルを説明しています。 これらの コンポーネントは、複数のNios®II プロセッサを互いに通信させ動作さ せる信頼性の高いメカニズムを提供します。 詳しくは、「このハンドブックについて」を参照してください。 このセクションは、以下の章で構成されています。 ■ 第9 章 Avalon インタフェース対応 Mutex コア ■ 第10 章 Avalon インタフェース対応 Mailbox コア改訂履歴
以下の表に9章および10章の改訂履歴を示します。 章 日付 / バージョン 変更内容 9 2005 年 10 月、v5.1.0 前リリースから内容の変更はなし。 2005 年 5 月、v5.0.0 前リリースから内容の変更はなし。 以前は Nios II プロセッサ・リファレンス・ハンドブックに収録。 2004 年 12 月、v1.0 初版 10 2005 年 10 月、v5.1.0 前リリースから内容の変更はなし。 2005 年 5 月、v5.0.0 初版セクション IV–2 Altera Corporation マルチプロセッサの調整 Quartus II ハンドブック Volume 5
Altera Corporation 9–1 2005 年 10 月 この資料は英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。こちらの日本語版は参考用としてご利用 ください。設計の際には、最新の英語版で内容をご確認ください。
9. Avalon インタフェース対応
Mutex コア
コアの概要
マルチプロセッサ環境では、Avalon®インタフェース付きMutex コア (Mutex コア)を使用して、共有リソースへのアクセスを調整すること ができます。Mutex コアは、共有リソースの相互排他的な所有権を保証 するプロトコルを提供します。 Mutex コアは、ハードウェアをベースにした微小なテスト&セット操作 を提供し、これによってマルチプロセッサ環境のソフトウェアがMutex を所有するプロセッサを特定することができます。Mutex コアを共有メ モリと併用すれば、メールボックスやソフトウェアMutex などの付加的 なプロセッサ間調整機能を実装できます。Mutex コアは、Nios® II プロセッサ・システムなど、Avalon ベースのプ
ロセッサ・システムで使用するように設計されています。アルテラは、 ハードウェアMutex の使用が可能になる Nios II プロセッサ用デバイス・ ドライバを提供しています。
Mutex コアは、SOPC Builder に対応しており、SOPC Builder で生成さ れたどのシステムにも容易に統合できます。
機能の説明
Mutex コアには、2 つのメモリ・マップド 32 ビット・レジスタへのアク セスを提供するシンプルなAvalon スレーブ・インタフェースを備えて います。表9–1に、レジスタを示します。 表 9–1. Mutex コアのレジスタ・マップ オフ セット レジスタ名 R/W ビットの説明 31 … 16 15 … 1 00 mutex RW OWNER VALUE
1 reset RW – – RESET
9–2 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 デバイスおよびツールのサポート Mutex コアの基本的な動作を以下に示します。この説明では、1 つの Mutex コアにアクセスするプロセッサが複数存在し、各プロセッサが 固有の識別子(ID)をもっているものと想定しています。 ■ VALUE フィールドが0x0000 のとき、Mutex は利用可能です(つま り、ロック解除されている)。それ以外の場合、Mutex は利用できま せん(つまり、ロックされている)。 ■ mutex レジスタは常に読み出し可能です。プロセッサ(または任意 のAvalon マスタ・ペリフェラル)は、mutex レジスタを読み出し て、現在の状態を確認できます。 ■ mutex レジスタは特定の条件でのみ書き込み可能です。以下の条件 の一方または両方が成立する場合にのみ、書き込み動作でmutex レ ジスタが変更されます。 ● mutex レジスタの VALUE フィールドがゼロである。 ● mutex レジスタの OWNER フィールドが書き込むデータの OWNER フィールドと一致する。 ■ プロセッサは、自身のID を OWNER フィールドに書き込み、VALUE に ゼロ以外を書き込んで、Mutex の獲得を試みます。次にプロセッサは、 OWNER フィールドを確認して、獲得に成功したかどうかをチェック します。
■ システム・リセット後に、reset レジスタの RESET ビットは High に
なります。このビットは1 を書き込むとクリアされます。
デバイスおよ
びツールの
サポート
Mutex コアは、SOPC Builder でサポートされるすべてのアルテラ・デバイ ス・ファミリをサポートし、Nios II HAL(Hardware Abstraction Layer)シ ステム・ライブラリ用のデバイス・ドライバを提供します。
SOPC Builder
でのコアの
インスタンス化
ハードウェア設計者は、Mutex コアの SOPC Builder コンフィギュレー ション・ウィザードを使用して、コアのハードウェア機能を指定します。 コンフィギュレーション・ウィザードは、以下の設定を提供します。
■ Initial Value − リセット後のVALUE フィールドの初期内容。Initial
Value 設定がゼロ以外の場合は、さらに Initial Owner も指定する必
要があります。
■ Initial Owner − リセット後の OWNER フィールドの初期内容。
Initial Owner が指定された場合、この所有者はMutex を解放してか ら、別の所有者が獲得できるようにする必要があります。
Altera Corporation 9–3 2005 年 10 月 Quartus II ハンドブック Volume 5 Avalon インタフェース対応 Mutex コア
ソフトウェア・
プログラミン
グ・モデル
以下のセクションでは、ハードウェアへのアクセスに使用されるソフト ウェア構造など、Mutex コアのソフトウェア・プログラミング・モデル について説明します。アルテラは、Nios II プロセッサ・ユーザ向けに、 Mutex コア・ハードウェアにアクセスするためのルーチンを提供してい ます。これらの関数はMutex コア専用のもので、低水準ハードウェアを直接操作します。HAL API または ANSI C 標準ライブラリを介して、 Mutex コアにアクセスすることはできません。Nios II プロセッサ・シス テムでは、プロセッサはcpuid コントロール・レジスタの値を mutex レジスタのOWNER フィールドに書き込んで、Mutex をロックします。
ソフトウェア・ファイル
アルテラはMutex コアとともに、以下のソフトウェア・ファイルを提供 しています。 ■ altera_avalon_mutex_regs.h −このファイルは、コアのレジスタ・ マップを定義し、低水準ハードウェアにアクセスするための記号定 数を提供します。 ■ altera_avalon_mutex.h −このファイルは、データ構造体とMutex コ ア・ハードウェアにアクセスするための関数を定義しています。 ■ altera_avalon_mutex.c −このファイルには、Mutex コアにアクセス するための関数の実装が含まれています。ハードウェア Mutex
このセクションでは、Mutex コア・ハードウェアを操作する低水準ソフ トウェア構造体について説明します。 ファイルaltera_avalon_mutex.h は、Mutex デバイスのインスタンスを 表す構造体alt_mutex_dev を宣言します。また、表9–2に示す、Mutex ハードウェア構造体にアクセスするための関数も宣言します。 表 9–2. ハードウェア Mutex 関数 ( 1 / 2 ) 関数名 説明 altera_avalon_mutex_open() Mutexのハンドルを要求して、その他のすべての関数がMutex コアにアクセスできるようにします。altera_avalon_mutex_trylock() Mutex のロックを試みます。Mutex のロックに失敗すると直 ぐに戻ります。
altera_avalon_mutex_lock() Mutex をロックします。Mutex を獲得するまで戻りません。 altera_avalon_mutex_unlock() Mutex のロックを解除します。
9–4 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 ソフトウェア・プログラミング・モデル これらのルーチンは、ハードウェアMutex コアを使用して、ソフトウェ アMutex 構造体へのアクセスを調整します。各関数の詳細な説明につい ては、9–5 ページの「Mutex API」のセクションを参照してください。 以下のコードは、Mutex デバイス・ハンドルのオープン方法と、Mutex のロック方法を示します。 例: 例:例: 例:Mutex のオープンとロックのオープンとロックのオープンとロックのオープンとロック #include <altera_avalon_mutex.h> /* Mutex デバイス・ハンドルを取得 */
alt_mutex_dev* mutex = altera_avalon_mutex_open( “/dev/mutex” ); /* Mutex を獲得して、値を 1 に設定 */ altera_avalon_mutex_lock( mutex, 1 ); /* * ここで共有リソースにアクセスする。 */ /* ロックを解放 */ altera_avalon_mutex_unlock( mutex );
altera_avalon_mutex_is_mine() この CPU が Mutex を所有しているかどうかを判断します。 altera_avalon_mutex_first_lock() リセット以降に Mutex が解放されているかどうかをテストし
ます。
表 9–2. ハードウェア Mutex 関数 ( 2 / 2 )
Altera Corporation 9–5 2005 年 10 月 Quartus II ハンドブック Volume 5 Avalon インタフェース対応 Mutex コア
Mutex API
このセクションでは、Mutex コアに対するアプリケーション・プログラ9–6 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 altera_avalon_mutex_is_mine()
altera_avalon_mutex_is_mine()
プロトタイプ プロトタイプ プロトタイププロトタイプ : int altera_avalon_mutex_is_mine(alt_mutex_dev* dev) スレッド・セーフ スレッド・セーフ スレッド・セーフ スレッド・セーフ : ○ ISR からの利用からの利用からの利用からの利用 : × インクルード インクルード インクルード インクルード : <altera_avalon_mutex.h> パラメータ パラメータ パラメータ パラメータ : dev— テストする Mutex デバイス。 戻り値 戻り値 戻り値 戻り値 : この CPU が Mutex を所有する場合は、ゼロ以外の値を返します。 説明 説明 説明
説明 : altera_avalon_mutex_is_mine()は、この CPU が Mutex を所有しているかどう かを判断します。
Altera Corporation 9–7 2005 年 10 月 Quartus II ハンドブック Volume 5 altera_avalon_mutex_first_lock()
altera_avalon_mutex_first_lock()
プロトタイプ プロトタイプ プロトタイププロトタイプ : int altera_avalon_mutex_first_lock(alt_mutex_dev* dev) スレッド・セーフ スレッド・セーフ スレッド・セーフ スレッド・セーフ : ○ ISR からの利用からの利用からの利用からの利用 : × インクルード インクルード インクルード インクルード : <altera_avalon_mutex.h> パラメータ パラメータ パラメータ パラメータ : dev— テストする Mutex デバイス。 戻り値 戻り値 戻り値 戻り値 : リセット以降にこの Mutex が解放されている場合は 1、解放されていない場合は 0 を 返します。 説明 説明 説明 説明 : altera_avalon_mutex_first_lock()は、リセット以降にこの Mutex が解放さ れているかどうかを判断します。
9–8 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 altera_avalon_mutex_lock()
altera_avalon_mutex_lock()
プロトタイプ プロトタイプ プロトタイププロトタイプ : void altera_avalon_mutex_lock(alt_mutex_dev* dev, alt_u32 value) スレッド・セーフ スレッド・セーフ スレッド・セーフ スレッド・セーフ : ○ ISR からの利用からの利用からの利用からの利用 : × インクルード インクルード インクルード インクルード : <altera_avalon_mutex.h> パラメータ パラメータ パラメータ パラメータ : dev— 獲得する Mutex デバイス。 value—Mutex に書き込む新しい値。 戻り値 戻り値 戻り値 戻り値 : – 説明 説明 説明 説明 : altera_avalon_mutex_lock()は、ハードウェアMutexを獲得すると同時に、Mutex にvalueパラメータをロードするブロッキング・ルーチンです。
Altera Corporation 9–9 2005 年 10 月 Quartus II ハンドブック Volume 5 altera_avalon_mutex_open()
altera_avalon_mutex_open()
プロトタイプ プロトタイプ プロトタイププロトタイプ : alt_mutex_dev* alt_hardware_mutex_open(const char* name) スレッド・セーフ スレッド・セーフ スレッド・セーフ スレッド・セーフ : ○ ISR からの利用からの利用からの利用からの利用 : × インクルード インクルード インクルード インクルード : <altera_avalon_mutex.h> パラメータ パラメータ パラメータ パラメータ : name— オープンする Mutex デバイスの名前。 戻り値 戻り値 戻り値 戻り値 : 供給された名前に関連付けられた Mutex デバイス構造体へのポインタ。対応する Mutex デバイス構造体が検出されなかった場合は NULL。 説明 説明 説明 説明 : altera_avalon_mutex_open()はハードウェアMutex構造体へのポインタを取得 します。
9–10 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 altera_avalon_mutex_trylock()
altera_avalon_mutex_trylock()
プロトタイプ プロトタイプ プロトタイププロトタイプ : int altera_avalon_mutex_trylock(alt_mutex_dev* dev, alt_u32 value) スレッド・セーフ スレッド・セーフ スレッド・セーフ スレッド・セーフ : ○ ISR からの利用からの利用からの利用からの利用 : × インクルード インクルード インクルード インクルード : <altera_avalon_mutex.h> パラメータ パラメータ パラメータ パラメータ : dev— ロックする Mutex デバイス。 value—Mutex に書き込む新しい値。 戻り値 戻り値 戻り値 戻り値 : Mutex が正常にロックされた場合はゼロ、Mutex がロックされなかった場合はゼロ以外 の値。 説明 説明 説明 説明 : altera_avalon_mutex_trylock()は、ハードウェア Mutex のロックを 1 回だけ試 行して直ちに戻ります。
Altera Corporation 9–11 2005 年 10 月 Quartus II ハンドブック Volume 5 altera_avalon_mutex_unlock()
altera_avalon_mutex_unlock()
プロトタイプ プロトタイプ プロトタイププロトタイプ : void altera_avalon_mutex_unlock(alt_mutex_dev* dev) スレッド・セーフ スレッド・セーフ スレッド・セーフ スレッド・セーフ : ○ ISR からの利用からの利用からの利用からの利用 : × インクルード インクルード インクルード インクルード : <altera_avalon_mutex.h> パラメータ パラメータ パラメータ パラメータ : dev— ロックを解除する Mutex デバイス。 戻り値 戻り値 戻り値 戻り値 : – 説明 説明 説明 説明 : altera_avalon_mutex_unlock()は、ハードウェア Mutex デバイスを解放します。 解放時に、Mutex に格納されている値はゼロに設定されます。呼び出し元が Mutex を保 持しない場合、この関数の動作は不定です。
9–12 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 altera_avalon_mutex_unlock()
Altera Corporation 10–1 2005 年 10 月 この資料は英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。こちらの日本語版は参考用としてご利用 ください。設計の際には、最新の英語版で内容をご確認ください。
10. Avalon インタフェース対応
Mailbox コア
コアの概要
マルチプロセッサ環境では、Avalon®インタフェース対応のMailbox コ アを使用して、プロセッサ間でメッセージを送信することができます。 Mailbox コアには、同時に 1 つのプロセッサのみが Mailbox の内容を変 更することを保証するMutex が含まれています。Mailbox コアは、実際 のメッセージの保存に使用される独立した共有メモリと共に使用する必 要があります。Mailbox コアは、Nios®II プロセッサ・システムなどの Avalon ベースの
プロセッサ・システムで使用するように設計されています。アルテラは、 Nios II プロセッサ用のデバイス・ドライバを提供しています。Mailbox コアはSOPC Builder に対応しており、SOPC Builder で生成されたどの システムにも容易に統合できます。
機能の説明
Mailbox コアは、4 つのメモリ・マップド 32 ビット・レジスタへのアク セスを提供するシンプルなAvalon スレーブ・インタフェースを備えて います。表10–1にレジスタを示します。 表 10–1. Mutex コアのレジスタ・マップ オフ セット レジスタ名 R/W ビットの説明 31 … 16 15 … 1 00 mutex0 RW OWNER VALUE
1 reset0 RW – – RESET
2 mutex1 RW OWNER VALUE
3 reset1 RW – – RESET
10–2 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 デバイスおよびツールのサポート Mailbox コンポーネントには、2 つの mutex が含まれています。1 つは 共有メモリへの一意の書き込みアクセスを保証し、もう1 つは共有メモ リからの一意の読み出しアクセスを保証するためのものです。Mailbox コアは、複数のプロセッサ間で共有されるシステム内の独立したメモリ と共に使用されます。 Mutex およびメモリを使用する Mailbox 機能は、全体がソフトウェア で実装されています。ソフトウェアでMailbox コアを使用する方法に ついて詳しくは、10–3 ページの「ソフトウェア・プログラミング・モ デル」を参照してください。 Mutex ハードウェア動作について詳しくは、「Avalon インタフェース対 応Mutex コア」の章を参照してください。
デバイス
およびツールの
サポート
Mailbox コアは、SOPC Builder でサポートされるすべてのアルテラ・デ バイス・ファミリをサポートし、Nios II HAL (Hardware Abstraction Layer) システム・ライブラリ用のデバイス・ドライバを提供します。
SOPC Builder
でのコアの
インスタンス化
ハードウェア設計者は、以下のプロセスを使用してSOPC Builder シス テムで Mailbox コアをインスタンス化しコンフィギュレーションしま す。 1. どのプロセッサが Mailbox を共有するかを決定します。2. SOPC Builder の System Contents タブで、メモリ・コンポーネント をインスタンス化して、Mailbox バッファとして機能させます。どの RAM でも Mailbox バッファとして使用できます。Mailbox バッファ は、プログラム・メモリなど、既存のメモリ内のスペースを共有で きます。これには専用メモリは必要ありません。
3. SOPC Builder の System Contents タブで、Mailbox コンポーネント をインスタンス化します。Mailbox コンフィギュレーション・ウィ ザードにコンフィギュレーション可能な設定はありません。 4. SOPC Builder の System Contents タブで接続を作成します。
a. 各プロセッサのデータ・バス・マスタ・ポートをMailbox スレー ブ・ポートに接続します。
b. 各プロセッサのデータ・バス・マスタ・ポートを共有Mailbox メ モリに接続します。
Altera Corporation 10–3 2005 年 10 月 Quartus II ハンドブック Volume 5 Avalon インタフェース対応 Mailbox コア
5. Mailbox コアを More <mailbox name> Settings タブでコンフィギュ レーションします。このタブは、Mailbox コンポーネントがシステム に存在する場合はいつでも、SOPC Builder グラフィカル・ユーザ・ インタフェース(GUI)で使用可能です。
More <mailbox name> Settings タブには、次のオプションがあります。
■ Memory module - Mailbox バッファに使用するメモリを指定します。
Memory module リストに使用する共有メモリが含まれていない場
合、メモリはシステムに正しく接続されていません。ページ10–2の
ステップ4を参照してください。
■ Shared Mailbox Memory Offset - メモリへのオフセットを指定しま す。Mailbox メッセージ・バッファはこのオフセットから始まります。
■ Mailbox Size (bytes) - Mailbox メッセージ・バッファに使用するバイ ト数を指定します。アルテラが提供する Nios II ドライバ・ソフト ウェアは、Mailbox 機能を実装するために、8 バイトのオーバヘッド を使用します。一度に1 つのメッセージしか渡さない Mailbox の場 合は、Mailbox Size (bytes) は12 バイト以上でなければなりません。
ソフトウェア・
プログラミン
グ・モデル
以下の項では、ハードウェアへのアクセスに使用されるソフトウェア構 造など、Mailbox コアのソフトウェア・プログラミング・モデルを説明 します。アルテラは、Nios II プロセッサ・ユーザ向けに Mailbox コア・ ハードウェアにアクセスするためのルーチンを提供しています。これら の関数はMailbox コア専用のもので、ロー・レベル・ハードウェアを直 接操作します。 Mailbox ソフトウェア・プログラミング・モデルは、以下の特性を持 ち、1 つの Mailbox コアと共有メモリにアクセスしている複数のプロ セッサが存在することを想定しています。 ■ 各Mailbox メッセージは 32 ビット・ワードです。 ■ メッセージの保存専用の共有メモリには、定義済みのアドレス範囲 があります。このアドレス範囲のサイズにより、保留中のメッセー ジの最大数に制限が課されます。 ■ Mailbox ソフトウェアは、プロセッサ間にメッセージ FIFO を実装しま す。メッセージの完全性を確保するために、同時にMailbox に書き 込めるプロセッサは1 個のみ、また同時に Mailbox から読み出せる プロセッサも1 個のみです。 ■ 送信プロセッサおよび受信プロセッサの両方ともソフトウェアは、 Mailboxメッセージを解釈するためのプロトコルに適合している必要 があります。通常、プロセッサはメッセージを共有メモリの構造へ のポインタとして扱います。 ■ 送信プロセッサは、メッセージ・アドレス範囲のサイズによる制限 まで、連続してメッセージをポストできます。10–4 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 ソフトウェア・プログラミング・モデル ■ Mailbox 内にメッセージが存在するときに、受信プロセッサはメッセー ジを読み出すことができます。受信プロセッサはメッセージが現れる までブロックしたり、Mailbox をポーリングして新しいメッセージを 調べることができます。 ■ メッセージを読み出すと、そのメッセージはMailbox から削除されま す。
ソフトウェア・ファイル
アルテラは、Mailbox コア・ハードウェアと共に以下のソフトウェア・ ファイルを提供しています。 ■ altera_avalon_mailbox_regs.h – コアのレジスタ・マップを定義し、ロー・ レベル・ハードウェアにアクセスするための記号定数を提供します。 ■ altera_avalon_mailbox.h – データ構造体と Mailbox コア・ハードウェ アにアクセスするための関数を定義しています。 ■ altera_avalon_mailbox.c – Mailbox コアにアクセスするための関数の 実装が含まれています。Mailbox コアを使用したプログラミング
この項では、Mailbox コア・ハードウェアを操作するソフトウェア構造 について説明します。 altera_avalon_mailbox.h ファイルは、Mailbox デバイスのインスタンス を表わすalt_mailbox_dev 構造を宣言します。また、表10–2に示す Mailbox ハードウェア構造にアクセスする関数も宣言します。各関数の 詳細な説明については、10–6 ページの「Mailbox API」の項を参照して ください。 表 10–2. Mailbox API 関数 関数名 説明 altera_avalon_mailbox_close() Mailbox へのハンドルを閉じます。 altera_avalon_mailbox_get() メッセージが存在する場合はそれを返しますが、メッセージ の待機はブロックしません。altera_avalon_mailbox_open() Mailbox へのハンドルを要求し、他のすべての関数が Mailbox コアにアクセスできるようにします。
altera_avalon_mailbox_pend() Mailbox に入るメッセージの待機をブロックします。 altera_avalon_mailbox_post() Mailbox にメッセージをポストします。
Altera Corporation 10–5 2005 年 10 月 Quartus II ハンドブック Volume 5 Avalon インタフェース対応 Mailbox コア 以下のコードは、Mailbox への書き込みと Mailbox からの読み出しを 示しています。この例では、ハードウェア・システムにMailbox を通 して通信する2 個のプロセッサがあるものと仮定しています。システム には2 つの Mailbox コアが含まれており、プロセッサ間に双方向通信 を提供します。 例: 例:例: 例:Mailbox への書き込みとへの書き込みとへの書き込みとへの書き込みとMailbox からの読み出しからの読み出しからの読み出しからの読み出し #include <stdio.h> #include "altera_avalon_mailbox.h" int main() alt_u32 message = 0;
alt_mailbox_dev* send_dev, recv_dev;
/* このプロセッサと別のプロセッサ間にある 2 つの Mailbox を開く */ send_dev = altera_avalon_mailbox_open("/dev/mailbox_0"); recv_dev = altera_avalon_mailbox_open("/dev/mailbox_1"); while(1) { /* 他のプロセッサにメッセージを送信する */ altera_avalon_mailbox_post(send_dev, message); /* 他のプロセッサがメッセージを返送するのを待機する */ message = altera_avalon_mailbox_pend(recv_dev); } return 0; }
10–6 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 Mailbox API
Mailbox API
この項では、Mailbox コアに対するアプリケーション・プログラミング・Altera Corporation 10–7 2005 年 10 月 Quartus II ハンドブック Volume 5 altera_avalon_mailbox_close()
altera_avalon_mailbox_close()
プロトタイプ: プロトタイプ: プロトタイプ:プロトタイプ: void altera_avalon_mailbox_close (alt_mailbox_dev* dev); スレッド・セーフ: スレッド・セーフ: スレッド・セーフ: スレッド・セーフ: ○ ISR からの利用:からの利用:からの利用:からの利用: × インクルード: インクルード: インクルード: インクルード: <altera_avalon_mailbox.h> パラメータ: パラメータ: パラメータ: パラメータ: dev—Mailbox を閉じるデバイス 戻り値: 戻り値: 戻り値: 戻り値: – 説明: 説明: 説明: 説明: altera_avalon_mailbox_close()は Mailbox を閉じます。
10–8 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 altera_avalon_mailbox_get()
altera_avalon_mailbox_get()
プロトタイプ: プロトタイプ: プロトタイプ:プロトタイプ: alt_u32 altera_avalon_mailbox_get (alt_mailbox_dev* dev, int* err); スレッド・セーフ: スレッド・セーフ: スレッド・セーフ: スレッド・セーフ: ○ ISR からの利用:からの利用:からの利用:からの利用: × インクルード: インクルード: インクルード: インクルード: <altera_avalon_mailbox.h> パラメータ: パラメータ: パラメータ: パラメータ: dev—Mailbox のハンドル err— 返されるエラー・コードへのポインタ 戻り値: 戻り値: 戻り値: 戻り値: Mailbox にメッセージがある場合はそのメッセージを返し、ない場合は 0 を返します。 errで指し示される値は、メッセージが正しく読み出された場合は 0、読み出すメッ セージがない場合は、EWOULDBLOCKです。 説明: 説明: 説明: 説明: altera_avalon_mutex_get()は、メッセージが存在する場合はそれを返します が、メッセージの待機はブロックしません。
Altera Corporation 10–9 2005 年 10 月 Quartus II ハンドブック Volume 5 altera_avalon_mailbox_open()
altera_avalon_mailbox_open()
プロトタイプ: プロトタイプ: プロトタイプ: プロトタイプ: alt_mailbox_dev* altera_avalon_mailbox_open(const char* name); スレッド・セーフ: スレッド・セーフ: スレッド・セーフ: スレッド・セーフ: ○ ISR からの利用:からの利用:からの利用:からの利用: × インクルード: インクルード: インクルード: インクルード: <altera_avalon_mailbox.h> パラメータ: パラメータ: パラメータ: パラメータ: name— 開く Mailbox デバイスの名前 戻り値: 戻り値: 戻り値:
戻り値: Mailbox へのハンドルを返します。Mailbox が存在しない場合は NULL を返します。 説明:
説明: 説明:
10–10 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 altera_avalon_mailbox_pend()
altera_avalon_mailbox_pend()
プロトタイプ: プロトタイプ: プロトタイプ:プロトタイプ: alt_u32 altera_avalon_mailbox_pend (alt_mailbox_dev* dev); スレッド・セーフ: スレッド・セーフ: スレッド・セーフ: スレッド・セーフ: ○ ISR からの利用:からの利用:からの利用:からの利用: × インクルード: インクルード: インクルード: インクルード: <altera_avalon_mailbox.h> パラメータ: パラメータ: パラメータ: パラメータ: dev— メッセージを読み出す Mailbox デバイス 戻り値: 戻り値: 戻り値: 戻り値: メッセージを返します。 説明: 説明: 説明: 説明: altera_avalon_mailbox_pend()は、メッセージが Mailbox に現れるまで待機し て、それを読み出すブロッキング・ルーチンです。
Altera Corporation 10–11 2005 年 10 月 Quartus II ハンドブック Volume 5 altera_avalon_mailbox_post()
altera_avalon_mailbox_post()
プロトタイプ: プロトタイプ: プロトタイプ:プロトタイプ: int altera_avalon_mailbox_post (alt_mailbox_dev* dev, alt_u32 msg); スレッド・セーフ: スレッド・セーフ: スレッド・セーフ: スレッド・セーフ: ○ ISR からの利用:からの利用:からの利用:からの利用: × インクルード: インクルード: インクルード: インクルード: <altera_avalon_mailbox.h> パラメータ: パラメータ: パラメータ: パラメータ: dev— メッセージをポストする Mailbox デバイス msg— ポストする値 戻り値: 戻り値: 戻り値: 戻り値: 成功すると 0 を返し、Mailbox が満杯の場合はEWOULDBLOCKを返します。 説明: 説明: 説明: 説明: altera_avalon_mailbox_post()は、Mailbox にメッセージをポストします。
10–12 Altera Corporation Quartus II ハンドブック Volume 5 2005 年 10 月 altera_avalon_mailbox_post()