溶接機器の設計をしていて、動作中の機器から、無線(XBee)により
ログを収集しようとしたところ、ノイズが大きくて、収集できなかった。
ログは、リアルタイムOSのログをそのまま出力しようとしていて
デバッグ環境では、便利に使えていたのだが。
そこで、ログをSRAMに保存することにした。
可変引数のsyslogの代わりを作成し、文字列を作成し、SRAMに保存
void set_syslog( uint_t errlevel, char *format, … )
{
va_list arg;
char err_msg[ MSG_LEN ];
va_start( arg, format );
vsprintf( err_msg, format, arg ); // err_msgに文字列保存
va_end( arg );
syslog( errlevel, err_msg ); //シリアルにログを出力
if( errlevel <= LOG_INFO ) { // LOG_INFO 以上のメッセージのみ保存
save_msg( err_msg); //SRAMに保存
}
}
SRAMに保存する関数(save_msg)では、時刻を付加し、書き込み位置計算を行い
文字列を保存する。
これにより、溶接が終了したあとで、動作不具合の調査が可能となった。