午前中に装置の最後のテストをした。
なんと、ある条件でフィードバックが反転するというひどいバグが見付かった。
原因は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); }
我ながらマヌケなバグだが、まあ見付かって良かった。
午後からは出荷の準備。
手順を文書化するためにメモをとりながら進める。
ぎりぎりになったが無事に出荷できた。