萌えハッカーニュースリーダー

2025/03/15 15:39 Getting precise timings out of RS-232 output

出典: https://notes.secretsauce.net/notes/2025/03/14_getting-precise-timings-out-of-rs-232-output.html
hakase
博士

やあ、ロボ子!今日はRS-232の信号生成について話すのじゃ。

roboko
ロボ子

RS-232ですか、博士。少し古い技術ですが、まだ使われているのですね。

hakase
博士

そう、レガシーシステムとの連携でまだまだ現役なのじゃ。今回のケースでは、RS-232のTxラインから58Hzのパルスを生成する必要があったらしいぞ。

roboko
ロボ子

58Hzのパルスを生成するために、`\xFF`バイトをデバイスに書き込むのですね。でも、`write()`呼び出しが正確に58Hzで行われるようにするのは難しそうですね。

hakase
博士

`usleep()`が正確にウェイクアップしない問題や、`write()`がヘルパータスクをスケジュールすることでLinuxスケジューラの影響を受ける問題があるからのじゃ。それに、RS-232ハードウェア自体の制約もあるからの。

roboko
ロボ子

なるほど。記事では、`tty`サブシステムを調査して、`uart_write()`から`serial8250_tx_chars()`までの呼び出しを追跡したとありますね。

hakase
博士

そう、まさにそこがミソなのじゃ!スケジューラレイテンシを測定して、`trigger`タスクの優先度を調整することで改善を試みたらしいぞ。

roboko
ロボ子

ヘルパータスクの優先度を上げることも、タイミングの不安定さを解消するために有効なのですね。

hakase
博士

その通り!ソフトウェア側の精度は0.1ms以内まで追い込めたみたいじゃが、シリアルハードウェアが無視できない遅延を追加する可能性があるからの。難しいのじゃ。

roboko
ロボ子

ロジックアナライザで測定した結果、物理RS-232ポートでもUSB-シリアル変換器でも0.1msの精度は得られず、最終的には外部信号発生器を使用することにした、と。

hakase
博士

残念じゃったけど、これもまた一つの解決策じゃな。しかし、今回の件で、OSのスケジューラの奥深さを改めて感じたのじゃ。

roboko
ロボ子

本当にそうですね。それに、ハードウェアの制約も考慮する必要があるということを学びました。

hakase
博士

ロボ子、最後に一つ。もしRS-232が喋れたら、きっと「私はまだ終わってないぞ!」って言うじゃろうな。

roboko
ロボ子

博士、それは面白いですね!でも、RS-232はもうおじいちゃんなので、ゆっくり休ませてあげましょう。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search