1

MPLAB C32 を使用しています。次のようなことを行うために、周辺機器をストリームにマップしたいと思います。

FILE* uart2 = fopen("UART2", 9600, param2, param3);

あるいは単に

FILE* uart2 = fopen("UART");

fprintf を使用して書き込みます。

fprintf(uart2, fmt, params);

FILE を作成する通常の方法は何ですか? ファイルシステムがなくても、周辺機器をマップしたいだけです。

4

2 に答える 2

4

周辺機器ごとにドライバーを作成する必要があります。また、適切なドライバーを呼び出すのに十分な情報を取得できるように、FILE* を再定義する必要があります。また、 fopen および fprintf 関数も再定義する必要があります。しかし、これは無意味です。この種の練習はお勧めしません。既にビルド済みのライブラリPIC32 Peripheral Libraryが出ています。使用することをお勧めします。

于 2011-07-25T12:42:27.110 に答える
1

MPLAB C Compiler User's Guide、Document DS51686B ( http://ww1.microchip.com/downloads/en/DeviceDoc/51686B.pdf ) によると、ライブラリは stdio 機能へのデバイスの接続をサポートしています。運が良ければ、UART 2 はデフォルトで stdin/stdout/stderr に設定されていますが、デフォルトで_mon_getcは実装されていないため、出力のみが機能します。独自に定義すると、標準入力経由で UART 2 からの入力が有効になります。

2.3 標準 I/O:

標準入出力ライブラリ関数は、Simple と Full の 2 つの操作モードをサポートしています。Simple モードは、stdout、stdin、および stderr に使用される 1 文字のデバイスで 2 つの関数インターフェイスを介して I/O をサポートします。Full モードは、標準 I/O 機能の完全なセットをサポートします。アプリケーションが fopen を呼び出す場合、ライブラリはフル モードを使用します。それ以外の場合は、シンプル モードが使用されます。

シンプルモードは、4 つの関数 _mon_puts、_mon_write、_mon_getc、および _mon_putc を使用して I/O を実行し、raw デバイス I/O を実行します。_mon_getc のデフォルトの実装は、常に失敗を返します (つまり、デフォルトでは、文字入力は利用できません)。_mon_putc のデフォルトの実装は、文字を UART2 に書き込みます。アプリケーションが必要な UART の初期化を実行したと想定されます。_mon_puts と _mon_write のデフォルトの実装は、単純に _mon_putc を繰り返し呼び出します。4 つの関数はすべて弱い関数として定義されているため、別の機能が必要な場合はユーザー アプリケーションでオーバーライドできます。これらの関数の詳細については、「32 ビット言語ツール ライブラリ」を参照してください。

それ以上の制御が必要な場合は、デバイスをコンパイラのランタイム ライブラリの stdio 機能に「接続」するためにランタイムをカスタマイズする方法の説明が、MPLAB C32「32 ビット言語ツール ライブラリ」文書 DS51685 ( http: //ww1.microchip.com/downloads/en/DeviceDoc/MPLAB%20C32%20Libraries.pdf )。

「フルモード」をサポートするために必要な機能のほとんどは、「2.18 MISCELLANEOUS FUNCTIONS」に記載されているようです。

于 2011-07-26T05:31:02.233 に答える