このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。
インテルのみ表示可能 — GUID: wfy1641456123988
Ixiasoft
インテルのみ表示可能 — GUID: wfy1641456123988
Ixiasoft
3.4.3.2.2. I/Oのブロッキングとノン・ブロッキング
キャラクター・モード・デバイスは、ブロッキング・モードまたは非ブロッキング・モードで動作するようにコンフィグレーションできます。モードは、デバイスのファイル・ディスクリプターで指定されます。
- ブロッキング・モードでは、デバイスから読み取る関数呼び出しは、デバイスが新しいデータを受信するまで待機します。
- ノン・ブロッキング・モードでは、新しいデータを読み出すためのファンクション・コールは、すぐに返され、新しいデータが受信されたかどうか通知します。
ファイルハンドルの読み取りに使用する関数によっては、新しいデータが到着したかどうかを示すエラー コードが返されます。
UART および JTAG UART コンポーネントはブロッキング・モードで初期化されます。しかし、各コンポーネントでは、fnctl()またはioctl()ファンクションを使用してノン・ブロッキングを作成することが可能です。以下のopenシステム・コールに示す通り、これは、開いているデバイスがノン・ブロッキング・モードで機能するように指定します。
fd = open ("/dev/<your uart name>", O_NONBLOCK | O_RDWR);
下の例に示すfnctl()システム・コールは、既に開いているデバイスがノン・ブロッキング・モードで機能することを指定します。
UART および JTAG UART ペリフェラルの動作は、ioctl()関数呼び出しを使用して変更することもできます。 ioctl()関数は次のパラメーターをサポートしています。
- UART ペリフェラルの場合:
- TIOCMGET (UART のボーレートを報告)
- TIOCMSET (UARTのボーレートを設定)
- JTAG UART ペリフェラルの場合:
- TIOCSTIMEOUT (ワークステーションへの接続のタイムアウト値)
- TIOCGCONNECTED (ホストが接続されているかどうかを調べる)
altera_avalon_uart_driver.enable_ioctl BSP 設定は、 ioctl() UART ペリフェラル用の関数。ioctl() 機能は、JTAG UART ペリフェラルに対して自動的に有効になります。
ioctl()関数は、altera_avalon_uart_driver.enable_small_driverおよび hal.enable_reduced_driver BSP 設定と互換性がありません。 これらの設定のいずれかが有効になっている場合、ioctl() は実装されません。
fnctl()システム・コール
/* You can specify <file_descriptor> to be * STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO * if you are using STDIO */ fnctl(<file_descriptor>, F_SETFL, O_NONBLOCK
ノン・ブロッキング・デバイスのコードの一部分
input_chars[128]; return_chars = scanf("%128s", &input_chars); if(return_chars == 0) { if(errno != EWOULDBLOCK) { /* check other errnos */ } } else { /* process received characters */ }