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

もとのページに戻る

2025-08-08 現在

printf について (デバッグ, シリアル出力)

printf について (デバッグ, シリアル出力)
    printf について (デバッグ, シリアル出力)について記述しています。

    printf について (デバッグ, シリアル出力)

    printfライブラリ

    TWENETライブラリ内で使用する printf() 処理です。詳細は TWENETmuc/printf を御覧ください。

    デバッグ用の PRINTF

    NXP提供のfslライブラリではPRINTF()マクロを用いてデバッグ出力を行い、リリース時はコンパイル対象から外すようになっています。TWENETライブラリでも、PRINTF()を利用できるようにコードを調整していますが、fslライブラリの機能そのままではありません。

    • PRINTF()マクロの呼び出し先は上述の printf_()です。
    • GETCHAR()マクロなど入力には非対応です。

    JN518x SDK2.6.3,2.6.4 での NewLib, NewLibNano ではデータ出力の化けや抜けなどが見られ、適切な振る舞いをしません(バッファリングに関する問題と考えられる。RedLib では当該現象がみられないが C/C++ 混在プロジェクトでは使用できない)。このため PRINTF() マクロを libTWENETmcu/printf 内の printf_() 関数を用いるように変更しています。

    SDK_DEBUGCONSOLE 定義

    SDK_DEBUGCONSOLE の値によって振る舞いが変わります。ビルド対象のアプリケーション内の PRINTF() の振る舞いが変更されます。

    内容
    0デバッグコンソール(Semihost)へ出力されます(この手続は非常に低速です)。
    ※ この出力を有効にするためには libTWENETmcu(Debugビルド)のSDK_DEBUGCONSOLE=0設定を行いライブラリの再ビルドを行い、アプリケーションコード中で_putchar(-1) を周期的(16ms程度)に呼び出す必要があります。
    (サンプル Samp_bare_MMAC 中に定義された SysTick_Handler() 参照)
    1Debug ビルド時の設定です。PRINTFprintf_関数(libTWENETmcu)を用います。_putchar() の再定義を行わない場合SERIAL_bTxChar(0, c); が呼び出されます。TWENETxxxライブラリの Debug 設定もこの値です。
    2Release ビルド時の設定です。PRINTFはコンパイル対象から外され、またprintf_()は何も出力しません。printf_()を用いる場合は_putchar(int)を再定義してください。TWENETxxxライブラリの Release 設定もこの値です。
    • libTWENETmcuライブラリ中の _putchar() は weak リンク指定です。アプリケーションコード中に定義した _putchar() が優先されます。
    • TWENETxxx ライブラリ中のPRINTF()を有効にする場合は、アプリケーション内の SDK_DEBUGCOSOLE と同じ定義を行い、ライブラリの再ビルドが必要です。

    SWO について

    TWENETmcu/source には SWO 向けの出力コードが含まれます。この機能については正式サポートは行いませんが、コード内の記述等を以下に解説します。

    • ソース中は -DDEBUG -DSERIAL_PORT_TYPE=1の定義を行った部分が SWO 関連処理としている。この定義を行うとPRINTF()の出力はSWOのITMに出力されるようにコード調整している (main/retarget_itm.c, main/retarget_putchar.c)。
    • SWOのポートは PIO14 としている。
    • SWOを有効にしてデバッグが開始しないことが多い。ISPピン(PIO5)=LO操作をデバッガ起動直前まで維持すると動作する場合がある。