USART/USB 포트를 사용하여 사용자 제어 인터페이스를 구현하는 stm32f1 제어 장치가 있습니다. 표준 터미널 소프트웨어(putty/minicom)를 사용하여 사용자는 장치 쉘에 간단한 명령을 입력할 수 있습니다.
질문이 있습니다. 들어오는 패킷이 많으면 쉘 프롬프트를 통해 인쇄되므로 새 명령을 입력하기가 어렵습니다.
나는 터미널 화면을 두 개의 영역, 즉 단일 라인 프롬프트와 수신 패킷을 위한 스크롤 가능한 영역으로 나눌 계획입니다.
다음 이스케이프 시퀀스를 사용해 보았습니다.
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을 사용하는 데 필요한 단계는 다음과 같습니다.
- 터미널 설명 가져오기(커서 이동, 스크롤 영역, 줄 지우기, 색인 포함)
- 프롬프트가 보존되도록 터미널을 "cbreak"(세미 원시) 모드로 초기화합니다.존재하다한 줄.
- 프롬프트가 나타날 줄로 커서를 이동하세요.
- 줄을 지우세요
- 프롬프트 쓰기
- 입력 명령 받기
동시에(패킷에 대한 참조는 OP가 입력을 읽는 동안 입력을 표시하려고 함을 나타냅니다)
- 스크롤 영역의 맨 아래 행으로 커서를 이동합니다.
- 스크롤 영역 설정
- 한 줄짜리 패키지를 작성하세요(개행 문자로 끝나거나 다음을 사용하세요)색인이스케이프 시퀀스)
- 스크롤 영역을 기본값으로 재설정(전체 화면)
- 커서를 다시 명령줄로 이동하고 명령을 계속 읽으세요.
모범 사례에서는 스크롤 영역 외부의 커서 주소 지정을 사용하지 않으므로 프로그램이 화면의 두 부분 사이를 전환할 때마다 스크롤 영역에서 많은 설정/재설정을 수행합니다.
추가 자료:
- 분할 화면의 부드러운 스크롤 배열(1986년 12월)
- VT100 이스케이프 코드 사용(1996)
- 분할 화면 모드에서는 얼마나 많은 트래픽이 발생합니까?(2004)
답변2
(프롬프트를 맨 아래에 두고 창 높이를 25줄로 설정한다고 가정합니다.)
기본 사항은 다음과 같습니다. 사용자의 명령을 수락한 후 스크롤 영역(동등한)을 설정 printf "\033[1,24r"
하고 완료되면 재설정 하도록 장치의 셸을 구성합니다 printf "\033[r"
.