午前中に装置の最後のテストをした。
なんと、ある条件でフィードバックが反転するというひどいバグが見付かった。

原因はint型をshort型の引数に渡してしまっていたことで、
short型の最小値:-32768を反転すると 0x10000 になり、short型から溢れる。
この値をshort型変数に代入すると、ゼロになってしまう。

int CalcFeedback(short v)
{
    int result = Calc(v);
    return result;
}

int sign = 1;     /* 信号の符号 */

void interrupt(void)
{
    short signal = ReadDA();
    int val = signal * sign;
    output = CalcFeedback(val);
}

我ながらマヌケなバグだが、まあ見付かって良かった。

午後からは出荷の準備。
手順を文書化するためにメモをとりながら進める。
ぎりぎりになったが無事に出荷できた。