닷넷의 SerialPort 클래스를 이용해 통신을 하다보니 문제가 발생하였다.

 

Read 메서드를 이용해 특정 바이트 수만큼 읽는 로직을 작성하였는데,

 

예를들어 4바이트를 Read하면 4바이트 이하여도 Read 메서드의 Blocking이 풀리는 현상이다.

 

사실 버그는 아니고......msdn을 살펴보니 수신 버퍼가 비어있지 않다면 해당  Read 메서드의 인자인  count 이하만큼

 

읽어버리는 것을 알았다.

 

아래와 같이 처리해주면 count만큼 수신할 수 있다.

 

/// <summary>

/// 데이터를 수신한다.

/// </summary>

/// <param name="buf">수신할 버퍼</param>

/// <param name="offset">데이터를 저장할 위치</param>

/// <param name="count">데이터 저장 바이트 수</param>

/// <returns></returns>

public int Receive(byte[] buf, int offset, int count)

{

    if (this.serialPort != null)

    {

        int bytesExpected = count, bytesRead = 0;

        while (bytesExpected > 0 && (bytesRead = serialPort.Read(buf, offset, bytesExpected)) > 0)

        {

            offset += bytesRead;

            bytesExpected -= bytesRead;

        }

        return count;

    }

    else

        return 0;

} 

 

닷넷프레임워크 4.5의 라이브러리 xml이 영어로 변경되버린 버그가 있었다.

 

아래의 경로의 xml파일들이 모두 영문으로 구성되어 VS의 인텔리센스에서 영문으로 표시되었다.

 

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\ko

 

임시방편으로 닷넷프레임워크 4.5.1의 한글 xml파일을 덮어씌워서 해결하였다.

 

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\ko

 

 

 

 

 

 

'VisualStudio' 카테고리의 다른 글

Visual Studio 2010 C#, C++ 단축키  (0) 2013.04.15

RockMargin 확장툴은 테스트해보니 적용되었습니다.

 

RockMargin 테스트

 

1. VS2013 확장파일을 다운로드 받습니다.

2. Lardite.RefAssistant.11.0.vxix 파일의 확장자를 *.ZIP 으로 변경합니다.

3. 압축을 풀어서 extension.vsixmanifest 파일을 에디트창으로 엽니다.

4. SupportedProducts 노드에 아래의 VS2015 내용을 추가합니다.

<VisualStudio Version="14.0">
    <Edition>IntegratedShell</Edition>
   </VisualStudio>

5. 저장하고 다시 압축을 하고 확장자를 *.vsix로 변경하고 더블클릭하여 설치합니다

 

+ Recent posts