fprintf ライブラリ
fprintf ライブラリ
fprintf
の簡易的な実装です。fprintf ライブラリ
fprintf
の簡易的な実装です。
本ライブラリは、ソースコードの互換性のために用意しています。新規実装には
TWENETmcu/printf
の利用を推奨します参考
TWENETmcu/printf
-printf
ライブラリ(オープンソース)TWENETstgs
-TWE_fprintf()
など
tsFILE
vfPrintf()
vPutChar()
で指定する出力先を定義した構造体。
メンバー
型 | 名前 | 詳細 |
---|---|---|
uint8 | u8Device | シリアルポート (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まで) |
x | 16進数。a-f は小文字。 |
X | 16進数。A-F は大文字。 |
b | bit列 |
戻り値
なし。
サンプル
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 | 出力先 |
uint8 | u8Char | 出力バイト |
戻り値
なし
サンプル
#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 : '.');
}
}