まず、次のコード ブロックを参照してください。
while(1) {
lt = time(NULL);
ptr = localtime(<);
int n = read (fd, buf, sizeof(buf));
strftime(str, 100, "%c", ptr);
int temp = sprintf(tempCommand, "UPDATE roomtemp SET Temperature='%s' WHERE Date='Today'", buf);
temp = sprintf(dateCommand, "UPDATE roomtemp SET Date='%s' WHERE Type='DisplayTemp'", str);
printf("%s", buf);
mysql_query(conn, tempCommand);
mysql_query(conn, dateCommand);
}
読み取り関数は、実際にはシリアル ポートから入ってくるデータを読み取ります。それはうまく機能しますが、私が経験している(私が思うに)問題は、ループの実行にかかる時間です。毎秒シリアルポートにデータが送信されています。データが毎秒「22」であるとします。このループが何をするかは、「2222」または場合によっては「222222」で読み取られます。私が考えているのは、ループの繰り返しに時間がかかりすぎて、データがシリアル バッファに蓄積されることです。read ステートメントはバッファ内のすべてを読み取るため、値が繰り返されます。
これを回避する方法はありますか?おそらくループの最後で、バッファをフラッシュできます。しかし、これを行う方法を知っているかどうかはわかりません。または、ループ内のコードを削減して、最初に各反復にかかる全体の時間を短縮する方法があるかもしれません。私の推測では、とにかく MySQL クエリが最も時間がかかるものです。