インテルのみ表示可能 — GUID: iga1401317116475
Ixiasoft
インテルのみ表示可能 — GUID: iga1401317116475
Ixiasoft
12.4.1. HALシステム・ライブラリーのサポート
インテルで提供しているドライバーは、HALキャラクター・モードのデバイスドライバーを実装しています。これは、 Nios® IIシステムのHALシステム・ライブラリーに統合されます。HALユーザーは、JTAG UARTレジスターにアクセスするのではなく、広く利用されているHAL APIおよびANSI C標準ライブラリーを介してJTAG UARTにアクセスします。ioctl() 要求が定義されているため、HALユーザーはJTAG UARTのハードウェアに依存する側面を制御することができます。
Nios® IIプロセッサーのユーザーに対して、HALシステム・ライブラリーのAPIは、JTAG UARTコアの機能への完全なアクセスを提供します。Nios IIのプログラムは、JTAG UARTコアをキャラクター・モードのデバイスとして扱い、ANSI C標準ライブラリー関数のgetchar()、printf() などを使用してデータを送受信します。
次の「文字をstdoutとしてJTAG UARTコアに出力」の例は、printf() を使用してstdoutにメッセージを出力する最も簡単な使用法を示しています。この例では、プラットフォーム・デザイナー・システムにJTAG UARTコアが含まれており、HALシステム・ライブラリーはこのJTAG UARTデバイスをstdoutに使用するようにコンフィグレーションされています。
#include <stdio.h> int main () { printf("Hello world.\n"); return 0; } |
次のJTAG UARTコアへの文字の送信の例では、C標準ライブラリーを使用してJTAG UARTコアから文字を読み出し、JTAG UARTコアにメッセージを送信しています。この例では、プラットフォーム・デザイナー・ システムにjtag_uartと名付けられているJTAG UARTコアが含まれています。これは必ずしもstdoutデバイスとしてコンフィグレーションされるわけではありません。この場合、プログラムはデバイスをHALファイルシステム内の他のノードと同様に扱います。
/* A simple program that recognizes the characters 't' and 'v' */ #include <stdio.h> #include <string.h> int main () { char* msg = "Detected the character 't'.\n"; FILE* fp; char prompt = 0; fp = fopen ("/dev/jtag_uart", "r+"); //Open file for reading and writing if (fp) { while (prompt != 'v') { // Loop until we receive a 'v'. prompt = getc(fp); // Get a character from the JTAG UART. if (prompt == 't') { // Print a message if character is 't'. fwrite (msg, strlen (msg), 1, fp); } if (ferror(fp)) // Check if an error occurred with the file clearerr(fp); // If so, clear it. } fprintf(fp, "Closing the JTAG UART file handle.\n"); fclose (fp); } return 0; } |
この例では、ferror(fp) を使用し、JTAG UART接続でJTAG接続の切断などのエラーが発生していないかを確認します。この場合、ドライバーはJTAG接続の切断を検出し、エラー (EIO) を報告後、後続のトランザクションのデータを破棄します。このエラーが発生した場合は、clearerr() 関数で明示的にそれをクリアするまで、Cライブラリーは値をラッチします。
HALシステム・ライブラリーの詳細に関しては、NiosII Software Developer's Handbookを参照してください。
Nios® IIエンベデッド・デザイン・スイート (EDS) では、JTAG UARTコアを使用する多数のソフトウェア・デザイン例を提供しています。