2014-04-11 48 views
0

我試圖讀取的串行通信「COM1」數據,使用基於RS 422, ,如下ADA。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個字節。我以爲我可以使用「最後」標記的消息, 的結束,但事實並非如此呢? 此外,我似乎無法有一個無限緩衝區使用讀功能,而且必須 定義一定的規模?

在此先感謝。

回答

2

我還沒有與這個工作,但事實證明,最後被改變的值表明,數據實際上是在被讀入。

假設發生的事情,因爲你讀入一個固定大小的緩衝區,有除非你首先初始化整個事物,否則它會成爲垃圾。在指數1..Last的元素將被覆蓋,而其餘部分將保留爲原來的垃圾值。

所以這是在讀取緩衝區中數據可用(1 ..最後)。

+0

謝謝你,我以爲,在默認情況下阿達設置初始化之前的所有元素爲null。儘管我的陣列確實包含了一些垃圾。 – Iman