2011-10-24 3 views
3

UNIX 직렬 포트에는 큰 출력 버퍼가 있습니다. 쓰기 호출은 버퍼에 공간이있는 한 즉시 반환됩니다. 충분한 공간이 없으면 버퍼 쓰기는 버퍼가 약간 낮은 레벨로 비울 때까지 대기합니다.Windows 7의 직렬 포트 출력 버퍼 크기

Windows 7 SP1에서 기본 제공되는 16550 직렬 포트는 출력 버퍼가없는 것처럼 동작합니다. 데이터가 포트에서 출력 될 때까지 쓰기 블록이되는 것 같습니다. 버퍼가있는 경우 장치 관리자 (COM1의 고급 설정)에 설정된 16 바이트보다 작습니다. SetupComm 함수를 사용하면 입출력 버퍼의 권장 크기를 지정할 수 있습니다. 그러나 출력 버퍼 크기는 어떤 동작도 변경하지 않는 것 같으며 GetCommProperties은 항상 dwCurrentTxQueue 필드를 0으로 설정합니다. SetupComm이 할 수있는 유일한 일은 입력 버퍼의 크기를 늘리는 것입니다.

+0

기계에 직렬 포트가 장시간 장착되지 않았습니다. 이 포트가 실제 포트입니까 아니면 실제로 에뮬레이터입니까? 장치 관리자에서 드라이버를 확인하십시오. –

+0

예, PC 마더 보드의 실제 직렬 포트입니다. 이것이 내가 "16550 직렬 포트 내장"이라는 것을 의미합니다. 16550은 내장 포트가 일반적으로 호환되는 UART 칩 유형입니다. – dreamlayers

답변

1

SetupComm의 설명서에서는 장치 드라이버가 요청 된 값을 무시할 수 있도록 허용합니다.

가장 좋은 방법은 중복 된 I/O를 사용하고 버퍼링을 직접 처리하는 것입니다.

+0

설명서에 "예를 들어 시스템의 다른 부분이 동등한 기능을 제공하는 한 드라이버가 버퍼를 할당하지 않아도 함수가 성공할 수 있습니다." 나는 그것이 단지 예시 일 뿐이라는 것을 보증하지 않습니다. 중첩 된 I/O 아이디어에 감사드립니다. – dreamlayers

+0

Windows 7에는 주어진 Com 포트의 버퍼 크기를 표시하는 다양한 아이콘에 일련의 마우스 클릭이 있습니다. 나는이 순간을 기억할 수 없다. 나는 한번 전에 그것을 한 것을 알고있다. 나는 이것에 대해 수퍼 유저에게 물었고 응답이 없었다. 이 사이트에서 물었을 때 41,000 명이 넘는 평판을 가진 사용자가 즉시 나를 꾸짖어 버렸기 때문에 질문을 철회했습니다. 우리는 오해의 소지가있는 응용 프로그램을 가지고 있으며, Win'7 자체의이 지식 (즉, COM 포트 버퍼 크기)은 우리 자신의 응용 프로그램이 아니라 우리에게 많은 도움이 될 것입니다. 누구든지이 메시지를 받으면 고마워요. –

+0

@ User.1 : 전송 버퍼의 실제 크기를 결정하는 일반적인 방법이 없을 수도 있습니다. 사용중인 특정 장치 드라이버에 대한 설명서가있는 경우 해당 설명서를 확인해야합니다. –