/      English

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 : '.');
	}
}