시리얼 버퍼가 꽉찬거 같은데요...
글쓴이: leo~~~~ / 작성시간: 월, 2006/01/23 - 5:55오후
임베디드 보드에 리눅스를 포팅하구요
시리얼 프로그램을 만들어서 보드로 보내고
PC와 보드를 연결해서 PC에서 데이터를
보내면 보드에서 데이터를 받아서
그래프를 그리는데요....
시리얼을 통해서 데이터를 보내는데
약 1000개 정도 보내면 시리얼 버퍼가 꽉차서 그런지
더이상 받지를 못하네요....
그렇다고 프로그램이 죽는 것도 아니고....
버퍼가 꽉차서 그런건가요??아니면 다른 문제인가요??
만약 그렇다면 시리얼 버퍼를 어떻게 비우나요??
Forums:
질문하시는 것을 보면 좀 오랫동안 이 문제에 걸려서 고민하고 계신듯합니다
질문하시는 것을 보면 좀 오랫동안 이 문제에 걸려서 고민하고 계신듯합니다.
* "시리얼버퍼가 꽉찬다"
일단 시리얼 장치(물리적)는 버퍼가 1바이트입니다. 심지어 송수신버퍼가 동일한 기억장소를 사용합니다. 소위, 송신하는 와중에 수신하면 데이터가 깨질 수도 있다는 얘기입니다. 이러한 것들을 적절히 피하기위해서, 시리얼 디바이스드라이버가 잘~ 만들어져 있어야 합니다. 당연히, 시리얼 디바이스 제작자는 이러한 경우를 고려해서 만들게 됩니다. ==> 여기까지는 보통 운영체제의 디바이스 제작자가 담당하게 됩니다.
앞서 얘기했듯이 물리적인 장치버퍼는 1바이트인관계로 이를 실제 응용프로그램에게 주거나/받기에 앞서 디바이스 드라이버 수준에서 버퍼를 사용합니다. 이를 디바이스 드라이버 버퍼라고 합시다.
위의 디바이스 드라이버 버퍼로 부터, 응용프로그램은 데이터를 받아서 처리를 하게 됩니다. 당연... 그리고, 응용프로그램은 송신디바이스드라이버의 버퍼로 데이터를 보냅니다. 당연. 이러한 디바이스 드라이버의 버퍼는 사용자가 제어하지 않으며, 디바이스 드라이버 내에서 그 버퍼에 대한 조작을 수행하게 됩니다.
보통, 디바이스 드라이버의 버퍼에서 읽거나, 쓰면, 해당 버퍼는 비어지게 되는 것입니다.
- 참고로, 사용자는 , 디바이스 드라이버 버퍼크기를 시리얼장치를 오픈하면서(초기에) 보통 그 크기를 지정하는 루틴을 수행합니다.
* 제가 보기에 응용프로그램의 오류가 아닌가 생각이 됩니다.하여간, 버퍼가 꽉찬것은 아닌듯합니다. 응용프로그램 수준의 버퍼링이 있다면 혹시 모를까......
아니면, 디바이스 드라이버가 잘못되었을 가능성도 배제할 수 없군요.(거의 드문 경우)
질문하면서 제시하신 정도의 정보로는 뭐라 해드릴 말이 없군요. 좋은 해결이 있기를 기대합니다.
답변 감사드립니다....근데 혹시 메모리 문제는 아니겠지요??제가
답변 감사드립니다....
근데 혹시 메모리 문제는 아니겠지요??
제가 메모리 문제가 아닌가 해서 데이터가 들어오면
모두다 배열에 넣어서 했다가
배열로 안하고 하나의 변수에 데이터가 들어올때마다
같은 변수 안에다 넣는 걸로도 바꿔봤는데
똑같이 1000개 쯤에서 데이터를 더이상 못받더라구요
그러면 메모리 문제는 아니죠??
프로그램이 죽지도 않는걸 보니.......
댓글 달기