『NXT本体のプログラム上の時刻』 と 『パソコン上に記録されるログの時刻』 が異なることで、少しハマったので記録に残します。
NXT内部で管理するシステム時刻は、nxtOSEKのsystick_get_ms関数で取得することができます。systime_get_ms関数で取得する時刻は、システムプログラムの動作開始からの経過時間となっています。
一方、パソコン上に記録されるログの時刻は、最初(先頭)のログを受け取った時点からの相対時間となっています。
NXTGamePadのコードでは下記のように、NXTからBluetooth経由で受信したシステム時刻を、ログの先頭時刻をオフセットとする相対時刻に変換して記録しています。
NXTGamePadDlg.cpp (LINE 550)
[code lang=”cpp” firstline=”550″]
if(!timeFlag)
{
timeOffset = *sysTick;
timeFlag = true;
}
/* 中略 */
sprintf(csvrow, "%ld,%hd,%hd,%ld,%ld,%ld,%ld,%hd,%hd,%hd,%hd,%ld\n",
(*sysTick – timeOffset), *analogStickL, *analogStickR,
*bState, *motorCnt0, *motorCnt1, *motorCnt2,
*sensorADC0, *sensorADC1, *sensorADC2, *sensorADC3, *distState);
[/code]
拙作のNxtLoggerもNXTGamePadに準拠して、ログ先頭からの相対時刻で表示・保存しているのですが、このことを思い出すまでに、ひとしきり頭を捻りました。 🙂