USART/USBポートを使用してユーザー制御インターフェースを実装するstm32f1制御デバイスがあります。標準の端末ソフトウェア(PuTTY/minicom)を使用すると、ユーザーはデバイスシェルに簡単なコマンドを入力できます。
問題がある。着信情報パケットが多い場合は、シェルプロンプトに出力されるため、新しいコマンドの入力が困難になります。
ターミナル画面を2つの領域に分割する予定です。1行のプロンプトと着信パケット用のスクロール可能な領域です。
次のエスケープシーケンスを使用しようとしました。
162 72 r * DECSTBM - Set top and bottom margins (scroll region on VT100)
[4;20r = Set top margin at line 4 and bottom at line 20
しかし、それでも私の問題を解決するのに役立つ正しい方法で説明されている良いチュートリアルを見つけることができません。
ソースコードを読むことは役に立ちますが、提案された例は複雑です。 1つのOPのような最も有用なプログラムは、termcapまたはcursesインターフェイスを介したエスケープシーケンスの使用について質問しています。呪いでそれをすることははるかに簡単でしょう。 termcapで必要な手順は次のとおりです。
一方(パケットへの参照により、OPは入力の読み取りと同時にパケットを表示したいように見えます)
ベストプラクティスでは、スクロール領域の外側でカーソルアドレス指定を使用しようとしないため、プログラムが画面の2つのセクションを切り替えるたびに、スクロール領域の設定/リセットが多くなります。
参考文献:
(下部にプロンプトが必要で、ウィンドウの高さが25行であると仮定します。)
基本は次のとおりです。ユーザーからコマンドが受け入れられたらスクロール領域を設定するようにデバイスのシェルを構成し(printf "\033[1,24r"
に相当)-完了したらリセットします--printf "\033[r"
。