nRF51822で、UARTが使えないけど動作状況を見たいときがある。
ブレークポイントで止めることはできるが、そこから再開させられないので、流しながら動作を見たい方が多い。
そういうときに、SEGGER RTTというものが使えそうだ。
Debugging with Real Time Terminal
上記はKeilでの説明だが、うちではGCC+GDB(eclipse)なので、その環境で試す。
Makefile
書き方は各人異なると思うので、こんな感じで。
今回は、printf風のAPIを使いたいので、それも追加している。
C_SOURCE_FILES += \
$(SDK_PATH)/components/drivers_ext/segger_rtt/RTT_Syscalls_GCC.c \
$(SDK_PATH)/components/drivers_ext/segger_rtt/SEGGER_RTT.c \
$(SDK_PATH)/components/drivers_ext/segger_rtt/SEGGER_RTT_printf.c
INC_PATHS += -I$(SDK_PATH)/components/drivers_ext/segger_rtt
ソースファイル
ヘッダファイル。
#include "SEGGER_RTT.h"
ログ。
最初の「0」は、Channelのようである。
nRF51822で試したところ、1にするとHardFaultが発生した。
SEGGER_RTT_printf(0, "START\r\n");
SEGGER_RTT_printf(0, "err_code = %u\r\n", err_code);
実行
うちはeclipseなので、まずは普通にSEGGERでのデバッグを開始させる。
そうすると、SEGGER J-Link Control panelというアプリが立ち上がるんじゃないかと思う。
(Windowsでやっていると、そうなった。)
RTTタブを選び、右側の「Start」を押すとログ取得を開始する。
Startしてからデバッグを開始させると良いだろう。
SEGGERのアプリをインストールしたときに「RTT Viewer」というものがあり、リンク先ではそれを使っているようだ。
Control Panelアプリがもう1個立ち上がったので変になるかと思ったが、特に問題でもなさそうだ。
ブレークポイントを使ったりしないなら、RTT Viewerだけ起動させれば済むと思われる。
RTT Viewerを立ち上げる前もSEGGERがバッファリングしているようで、nRF51822起動時のログが後からでも表示できた。
なお、ログのクリアはタブの上で右クリックして「Clear Terminal」を選択するようだ。