The modules ConsoleX simple text output interfaces to the Astrobe console. Both use the same buffered serial RS232 device. They differ in their way that interface is operated, and thus in their use cases. The modules can be used concurrently by different client modules.
All three modules export:
RS232dev.Device is physically the same for all three modules.
ConsoleB.C: using the transmit buffer of the RS232 device, with busy-waiting upon buffer full
ConsoleC.C: not using the transmit buffer, with busy-waiting for each character
ConsoleS.C: using the transmit buffer, with yielding control upon buffer full, and awaiting the buffer empty device signal to continue
Clients can easily change the output method used by
IMPORT Console := ConsoleX.
ConsoleB.C, the writing process holds control over the output device until it yields explicitly, while with
ConsoleS.C the writing process will yield on the driver level during the duration of the output in case the transmit buffer cannot hold the complete output text. For example, module
ConsoleB.C can disrupt the timing of other processes. They should only be used within error handling and for the related error messages, where the error processing does not want to allow other processes to run until the situation is resolved.
For normal output, say from commands,
ConsoleS.C is the better choice, as there is less, or no, negative impact on the timing of other processes. For example, module
Obviously, the output via
ConsoleS.C could be interfered with by output from other processes, which is not possible with
ConsoleB.C. This mixup is “benign”, though. The process using
ConsoleS.C will await the buffer empty signal, so any other process writing during this awaiting period will simply add more output to the buffer, delaying the buffer empty signal accordingly.