I am trying to implement an UART protocol to make communication between two boards. data are ascii encoded and messages length's are variables. I've chosen to implement a packet in order to "encapsulate" information.  

Packet: {STX, DATA, ETX}.  

STX is "Start of text" in ASCII table. Its Hex code is `0x02`, ETX is "End of text". Its Hex code `0x03`. Every byte in DATA field can take any value from `0x00` to `0x7F` except `0x02` and `0x03`.

Problem 1: Data length  
How to send variable data lengths over uart?  
Example: {STX, Hello\0, RTX} and {STX, This is a long text\0, RTX}  

I've been digging in the internet and I found that the best approach is to use a FIFO circular buffer. The problem is how to fix `BUFFER_SIZE` in this case? Let's say that I've done some maths and I figured out that the longest message I am going to transmit over UART is 90 Bytes and the shortest one is 4 Bytes. should I `#define BUFFER_SIZE 90` or I need to take a larger buffer?

In both cases how does FIFO works in these cases:  
Case 1: DATA length < BUFFER_SIZE.  
Example: {STX, ABCD, ETX} and BUFFER_SIZE = 90 Bytes.  

Case 2: Buffer is full but data are still coming in.  
Example: BUFFER_SIZE = 13  

Packet: {STX, READ_X, ETX}{STX, REMOVE_Y,ETX}.  

In HEX, these messages are  
**0x02** 0x52 0x45 0x41 0x44 0x5f 0x58 0x00 **0x03 0X02** 0x52 0x45 *0x4d* 0x4f 0x56 0x45 0x5f 0x59  0x00 **0x03**  

Buffer is full when we reach `0x04` (in Italic). How does it deal with this situation?