動かないシールドの原因確認をいろいろ。
ライブラリの途中にprintfとか入れようと思ったが、Galileoの各ソースを見るとトレース出力がいろいろある。これを活用しない手は無いだろう。
トレース出力関連の処理はtrace.h/cに書かれている。出力のレベルはTRACE_LEVEL_ERROR/INFO/DEBUGの3種類、DEBUGが最も情報量が多い。これに設定してみよう。
デフォルトではTRACE_LEVEL_INFOが設定されている。これは hardware/arduino/x86/variants/galileo_fab_d/variant.h の中で設定されている。
#define VARIANT_TRACE_LEVEL TRACE_LEVEL_INFO // default trace level
これを TRACE_LEVEL_DEBUG に書き換える。
トレース出力は stdout に出力される。デフォルトでは /tmp/log.txt に書き出されるのでこれを tail とかで表示させればいいが、トレース出力だけでなくエラーに関する情報を stderr に書いているところもある。これは /tmp/log_er.txt に書かれる。情報が分散されると見づらいので同一出力先にしたほうが便利。そこで main.c を書き換え、両方とも /dev/console に出力されるようにする。
(前略)
// stdout = freopen("/tmp/log.txt", "w", stdout);
stdout = freopen("/dev/console", "w", stdout);
(中略)
// stderr = freopen("/tmp/log_er.txt", "w", stderr);
stderr = freopen("/dev/console", "w", stderr);
(後略)
これでシリアル出力にトレース出力が表示される。
スケッチでトレース出力をするには、まず MY_TRACE_PREFIX を何か定義する。この文字列がトレース出力の頭に追加される。
#define MY_TRACE_PREFIX "MySketch"
あとは trace_debug, trace_info, trace_errorのいずれかで出力する。
Serial.printとは別に表示でき、便利。