??? 03/31/10 13:03 Read: times |
#174672 - google academy Responding to: ???'s previous message |
You let the main application process lines one at a time.
It really should not be hard for the main application to keep track of the state - is it processing a line that is an echo of the transmitted command, or is it processing a line representing a result. When having interrupt handler, you don't want to move data in your buffer unless you are using dual-buffering. The concept of a round-robin ring buffer is that one side (the interrupt) owns one side of the buffer (either read or write) and the main loop owns the other side. That means that the interrupt routine updates the insert position when it receives data, and the main loop updates the read-out position as it consumes data. For outgoing, the main loop updates the insert position, and the interrupt handler updates the read-out position. Why is this important? It makes sure that two "threads" can play nicely without need for synchronization. So either let your main loop pick up characters one-by-one to drive your state machine. Or pick up characters one-by-one and move to a "line" buffer. But no move of data within the ring buffer, for situations where two different "threads" handles produce and consume. |