The general structure of Grbl
=============================

The main processing stack:

'protocol'        : Accepts command lines from the serial port and passes them to 'gcode' for execution.
                    Provides status responses for each command. Also manages run-time commands set by
                    the serial interrupt.
                  
'gcode'           : Recieves gcode from 'protocol', parses it according to the current state
                    of the parser and issues commands via '..._control' modules
                  
'spindle_control' : Commands for controlling the spindle.
                 
'motion_control'  : Accepts motion commands from 'gcode' and passes them to the 'planner'. This module
                    represents the public interface of the planner/stepper duo.

'planner'         : Receives linear motion commands from 'motion_control' and adds them to the plan of 
                    prepared motions. It takes care of continuously optimizing the acceleration profile
                    as motions are added.

'stepper'         : Executes the motions by stepping the steppers according to the plan.




Supporting files:

'config.h'        : Compile time user settings

'settings'        : Maintains the run time settings record in eeprom and makes it available
                    to all modules.

'eeprom'          : A library from Atmel that provides methods for reading and writing the eeprom with 
                    a small addition from us that read and write binary streams with check sums used 
                    to verify validity of the settings record.
                    
'nuts_bolts.h'    : A collection of global variable definitions, useful constants, and macros used everywhere

'serial'          : Low level serial communications and picks off run-time commands real-time for asynchronous 
                    control.

'print'           : Functions to print strings of different formats (using serial)