Communication Buffers

Buffers can be useful in solving various types of communication or data transfer problems.  For example, a printer typically includes a buffer of at least a few thousand characters.  Since the computer can send material to the printer faster than it is capable of putting the material on paper, the buffer serves three purposes:

1.        To even the workload for the printer

2.        To allow the computer to finish sending material sooner

3.        To handle occasions when the printer cannot accept more material

If the printer did not have a buffer, the computer would be forced to send data one character at a time.  Until each character is received and printed, the computer should not send more.  To prevent this, the printer sends a busy signal back to the computer.  When it gets this signal, the computer stops until the printer sends a "ready" signal.  This "ready/busy" signaling is called handshaking.

Visualize what is taking place.  The printer sends a ready signal; the computer sends a character; the printer sends a busy signal, forcing the computer to wait while it prints the character; and then the whole process repeats.  That is a lot of signaling for just one transmitted character!

Further, there is a possibility of error.  If the computer is fast or the printer is slow (or both), it's possible for the computer to send the next character before the printer is able to signal that it's busy - something called buffer overflow.  This can also happen if there is something wrong with the handshaking signals.  When this happens, the printer fails to print one or more characters.  Those characters have been sent by the computer, but cannot be received by the printer because there is no place to put them.

With a buffer, the printer sends a busy signal only when the buffer is full (or nearly so).  That way, even if additional characters have already been sent, there will be room to store them before they are printed.  Most of the time, the computer sends and the printer receives.  As a result, far less signaling is necessary, and more actual data is transmitted.  Therefore, a buffer makes communications between computers and printers more efficient.  Since there is room to store characters transmitted, there is less chance that a character will be missed; so a buffer makes transmissions more error free, too.

In general, all communications are affected by buffering in the same way.  For that reason, PowerBASIC allows you to set aside one communications buffer for received data and a separate buffer for transmitted data.  In your programs, you have two responsibilities: to make sure that the buffer you use is large enough, and to empty the buffer as often as needed to prevent a buffer overflow.

How large a buffer will you need?  It depends on the sort of program you are writing, and is often a matter of trial and error.  At low baud rates (up to 300 baud), 256 bytes is probably adequate.  Under some circumstances, 256 bytes may well be adequate at 1200 baud or higher; it all depends on how often your program checks the buffer and empties it.  It's probably a good idea to use a buffer of 1024 bytes or more for 1200 baud, and it's not at all uncommon to use buffers of 4 Kilobytes or more.  With the large amount of data memory available to your applications with PowerBASIC, you could specify a receive buffer of 1 MB (or even more) and have little impact on system memory.


See Also

Serial Communications