この記事は、nRF52でBLEデバイスを開発する(2)OTAアップデート Buttonless DFUとSecure DFUの続きです。
はじめに
nRF52840-DKにFeather nRF52840をSWDケーブルで接続すると、FeatherのUARTはDKのデバッグマイコンには接続されないため、UARTでのログ取りができません。SWDのRTT(Real Time Terminal)機能でログを出力する必要があります。
SDKの設定
nRF52 SDKの各種設定のために、各プロジェクトは sdk_config.h をインクルードするように設定されています。
各モジュールの設定値を変更する際は、この中を書き換えることになります。
RTTログの設定
RTTログを有効にするためには、sdk_config.h内の以下の部分を変更します。
// ログ機能の有効化
#ifndef NRF_LOG_ENABLED
#define NRF_LOG_ENABLED 1
#endif
// RTT ログの有効化
#ifndef NRF_LOG_BACKEND_RTT_ENABLED
#define NRF_LOG_BACKEND_RTT_ENABLED 1
#endif
// UARTログの有効化
#ifndef NRF_LOG_BACKEND_UART_ENABLED
#define NRF_LOG_BACKEND_UART_ENABLED 1
#endif
ここの設定値に1を定義することで、各機能が有効になります。
nRF52832では、ここの設定のみでsesのターミナルウインドウにログが出力されるようになります。
nRF52840
ですが、nRF52840では、上の設定だけではログが出ません。少し前のSDKからのバグのようです。
#ifndef NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED
#define NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED 0
#endif
上の定義を0にすることで、nRF52840でもログが出るようになります。
ログ機能の初期化
以下のコードでログ機能の初期化を行います。通常main.cの先頭の方で呼ばれます。
APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
NRF_LOG_DEFAULT_BACKENDS_INIT();
ログ出力は以下のマクロで。
NRF_LOG_INFO("Application started.");
nrf_log.hに各種マクロが定義されています。
- NRF_LOG_XXXX() 系はprintf関数として動作します。
- NRF_LOG_HEXDUMP_XXXX() 系は、ポインタの先をダンプします。
- NRF_LOG_FLOAT() でfloatの固定フォーマット出力が出来ます。
以上です。