Change Conveyor,Planner,Block to use HeapRing
biggish Block queue reshuffle, Planner::recalculate() still has off-by-one errors
Ensure Conveyor::on_block_end gets called last
Big Planner::recalculate rewrite
Merge branch 'edge' into feature/ActionQueue_redux
fix definition of __debugbreak() so if (1) __debugbreak(); else blah(); works as expected
StreamOutput: render to buffer on stack, only invoke new() if stack buffer is too small. Allows printf from ISR context in some cases
HeapRing: add some sanity checks
Conveyor: add some sanity checks
Block: only call Conveyor::on_blocK_end ONCE!
Block: don't update trapezoids, and return correct exit speed if block is currently executing
Conveyor: actually implement planner_queue_size config option
Conveyor: when we append_gcode with empty queue, don't skip the queue: push to block, then execute the block
Block: if no-one takes our block, release immediately
Conveyor: if someone appends gcode while the queue is empty, ensure it gets executed in a timely fashion
Block: handle both multiple takes and no takes properly
Block: return debug output to kernel streams instead of serial
SlowTicker: ensure G4s block subsequent gcodes
Conveyor: don't prematurely start the queue, ensure queue runs when there are blocks available
Extruder,TemperatureControl: minor comment changes