저는 우분투 기반 임베디드 프로세서를 머신 비전 시스템으로 사용하고 있습니다. 2개의 직렬 포트를 통해 관련 비행 컨트롤러와 통신합니다.
내 문제는 Vision<->비행 컨트롤러 통신을 지원하는 일반적인 open(), close() 호출로 인해 stdin 호출(fgets(), scanf() 등)이 특이한 방식으로 실패하게 된다는 것입니다. 호출이 거기에 있다고 생각합니다. 입력은 있지만 입력이 없습니다. 반환된 버퍼는 가비지입니다.
나는 처음에 이것이 커널의 기본 텍스트 콘솔과 내가 사용하고 있던 직렬 장치 사이의 충돌 때문이라고 생각했습니다. 우회적으로 검색한 후 이것이 틀렸다는 것을 깨달았습니다. 어떤 경우에는 장치 파일 설명자가 stdin과 동일하게 0으로 설정되는 미묘한 버그를 발견했습니다.
나는 아래의 탐사선 스레드를 따라가서 이 버그를 발견했습니다. 나는 그의 대답이 나를 진짜 질문으로 이끌었기 때문에 받아들였다.
아래 설명은 장치, stdin 및 기본 텍스트 콘솔에 관심이 있는 다른 사람들에게 유용한 정보를 제공합니다.
감사해요
답변1
터미널 라인 기능을 설정하고 고정시키려면 다음을 시도하십시오.
# Serial line
tty=/dev/ttyS1
# Open the serial port and hold it open
sleep 300 <$tty &
slpid=$!
# Set the characteristics and run the serial port code
stty 19200... <$tty
/run/your/program
# Clean up
kill $slpid 2>/dev/null