瀏覽代碼

make tracePort assignment after opening the port

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7660 8c9fc860-2736-0410-a75d-ab315db34111
eth.morozova 7 年之前
父節點
當前提交
82ddd25094
共有 1 個文件被更改,包括 15 次插入9 次删除
  1. 15 9
      source/Serials.Mod

+ 15 - 9
source/Serials.Mod

@@ -223,30 +223,36 @@ VAR
 	isOpen0: BOOLEAN;
 	bps0, data0, parity0, stop0 : LONGINT;
 	res1: LONGINT;
+	port: Port;
 BEGIN{EXCLUSIVE}
 	IF (portNumber >= 1) & (portNumber <= LEN(ports)) & (ports[portNumber-1] # NIL) THEN
 
-		tracePort := ports[portNumber-1];
+		port := ports[portNumber-1];
 
-		tracePort.GetPortState(isOpen0, bps0, data0, parity0, stop0);
+		port.GetPortState(isOpen0, bps0, data0, parity0, stop0);
 
+		(* do not close the port if the current port settings match *)
 		IF ~isOpen0 OR (bps0 # bps) OR (data0 # data) OR (parity0 # parity) OR (stop0 # stop) THEN
-			tracePort.Close;
-		END;
-
-		tracePort.Open(bps, data, parity, stop, res);
-		IF res # 0 THEN
-			IF isOpen0 THEN tracePort.Open(bps0, data0, parity0, stop0, res1); END;
-			RETURN;
+			port.Close;
+			port.Open(bps, data, parity, stop, res);
+			IF res # 0 THEN
+				IF isOpen0 THEN port.Open(bps0, data0, parity0, stop0, res1); END;
+				RETURN;
+			END;
 		END;
 
 		IF traceChar0 # TraceChar THEN
 			traceChar0 := Trace.Char;
 		END;
 
+		TRACE(traceChar0);
+
 		Machine.Acquire(Machine.TraceOutput);
+		tracePort := port;
 		Trace.Char := TraceChar;
 		Machine.Release(Machine.TraceOutput);
+
+		TRACE(Trace.Char);
 	ELSIF portNumber < 0 THEN
 		IF tracePort # NIL THEN