2014-04-11 5 views
0

RS 422 기반의 ADA를 사용하여 다음과 같이 을 직렬 통신 "COM1"에서 읽으려고합니다.GNAT 직렬 통신 (ADA)

S_Port : Serial_Port; 
Buffer : Ada.Streams.Stream_Element_Array(1..150); 
GNAT.Serial_Communications.Open(Port => S_Port,Name => "COM1"); 
GNAT.Serial_Communications.Set(
           Port => S_Port, Parity => Even, Block => False, 
       TimeOut => 4.0 
      ); 


GNAT.Serial_Communications.Read(S_Port,Buffer,Last); 

문제는 그 9에서 27 '최종'의 값이 변경은 버퍼 보다 훨씬 9 또는 27 바이트가 있지만. 나는 메시지의 끝을 표시하기 위해 'Last'를 사용할 수 있다고 생각했는데, 하지만 그럴 수 있습니까? 또한 읽기 기능을 사용할 수있는 버퍼가없는 것처럼 보일 수 있으며 특정 크기를 정의해야합니까?

미리 감사드립니다.

답변

2

나는이 함께 일하지했지만, 최근 값을 변경된다는 사실은 데이터가 실제로 읽어되고 있음을 시사한다. 당신은 고정 된 크기의 버퍼로 읽는 이후

, 즉 무슨 일이 일어나고 가정하면, 거기에 당신이 먼저 모든 것을 초기화하지 않으면 그것 안에서 쓰레기가 될 것입니다. 인덱스 1..Last의 요소는 덮어 쓰여지고 나머지는 원래 쓰레기 값으로 남게됩니다.

따라서 읽은 데이터는 버퍼 (1 .. 마지막)에서 사용할 수 있습니다.

+0

고맙습니다. 기본적으로 Ada는 초기화 전에 모든 요소를 ​​null로 설정합니다. 내 배열 실제로 쓰레기가 포함되어 있지만. – Iman