セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2025-08-08 現在

fprintf ライブラリ

fprintf ライブラリ
    fprintfの簡易的な実装です。

    fprintf ライブラリ

    fprintfの簡易的な実装です。

    参考

    tsFILE

    vfPrintf() vPutChar() で指定する出力先を定義した構造体。

    メンバー
    名前詳細
    uint8u8Deviceシリアルポート (E_AHI_UART_0 または E_AHI_UART_1 を指定する)
    bool_t (*) (uint8 u8Device, uint8 u8Char)bPutChar出力用の関数ポインタ。SERIAL ライブラリ用には SERIAL_bTxChar() が準備されているので、これを指定する。

    {% hint style=“info” %} SERIAL_bTxChar() は、u8Char として渡されたバイトを SERIAL ライブラリ内の FIFO キューに投入します。

    独自に出力関数を準備することで、UART 以外への文字列の出力にも利用できます。 {% endhint %}

    サンプルコード
    #include "serial.h"
    #include "fprintf.h"
    
    tsFILE sSerStream;
    tsSerialPortSetup sSerPort;
    
    void vSerialInit(uint32 u32Baud, tsUartOpt *pUartOpt) {
    	// initialize sSerPort
    	...
    	SERIAL_vInit(&sSerPort);
    
    	// for vfPrintf()
    	sSerStream.bPutChar = SERIAL_bTxChar;
    	sSerStream.u8Device = E_AHI_UART_0;
    }
    
    void vSerOut() {
        vfPrintf(&sSerStream, "HELLO!");
    }

    以下は、キャラクタ LCD の出力コードとして利用した一例です。

    #include "serial.h"
    #include "fprintf.h"
    
    tsFILE sLcdStream;
    
    // handle LCD display
    PUBLIC bool_t LCD_bTxChar(uint8 u8Device, uint8 u8Data) {
    	int i;
    
    	switch (u8Data) {
    	case '\n':
    	...
    }
    
    void vInitHardware() {
        /* Initialise the LCD */
        vLcdReset(3, 0);
    
        /* register for vfPrintf() */
        sLcdStream.bPutChar = LCD_bTxChar;
        sLcdStream.u8Device = 0xFF;
    }
    
    void vSomeOutput() {
        vfPrintf(&sLcdStream, "Hello World!\n");
    }

    vfPrintf()

    解説

    tsFILE 構造体の示す出力先(UART)に printf 書式にて出力する。

    引数

    名前詳細
    tsFILE*psStream出力先
    const char *pcFormat出力書式
    可変引数
    対応する書式
    s文字列
    d整数(32bitまで)
    u符号なし整数(32bitまで)
    x16進数。a-f は小文字。
    X16進数。A-Fは大文字。
    bbit列

    戻り値

    なし。

    サンプル

    void cbToCoNet_vMain(void) {
    	while (!SERIAL_bRxQueueEmpty(sSerPort.u8SerialPort)) {
    		int16 i16Char;
    		i16Char = SERIAL_i16RxChar(sSerPort.u8SerialPort);
    		vfPrintf(&sSerStream, "\n\r## [%c] --> ", i16Char);
    	    SERIAL_vFlush(sSerStream.u8Device);
    		...
    	}
    }

    vPutChar()

    解説

    tsFILE 構造体の示す出力先(UART)に1バイト出力する。

    引数

    名前詳細
    tsFILE*psStream出力先
    uint8u8Char出力バイト

    戻り値

    なし

    サンプル

    #define IS_ASC(c) ((c) >= 0x20 && (c) <= 0x7e)
    
    void cbToCoNet_vRxEvent(tsRxDataApp *pRx) {
    	uint8 u8i;
    	vfPrintf(&sSerStream, LB"RX(len=%d):[", pRx->u8Len);
    	for (i = 0; i < pRx->u8Len; i++) {
    		uint8 c = pRx->auData[i];
    		vPutChar(&sSerStream, IS_ASC(c) ? c : '.');
    	}
    }