From f8e170a44bca32500c6c809b8a61f2721a4a13bf Mon Sep 17 00:00:00 2001 From: Bernhard Date: Sun, 27 Nov 2011 14:57:12 +0100 Subject: [PATCH] planner optimization by inline functions --- Marlin/planner.cpp | 23 +++++++---------------- Marlin/planner.h | 29 ++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index bb2e2a672a..2367e313a0 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -93,13 +93,17 @@ static float previous_nominal_speed; // Nominal speed of previous path line segm bool autotemp_enabled=false; #endif + +//=========================================================================== +//=================semi-private variables, used in inline functions ===== +//=========================================================================== +block_t block_buffer[BLOCK_BUFFER_SIZE]; // A ring buffer for motion instfructions +volatile unsigned char block_buffer_head; // Index of the next block to be pushed +volatile unsigned char block_buffer_tail; // Index of the block to process now //=========================================================================== //=============================private variables ============================ //=========================================================================== -static block_t block_buffer[BLOCK_BUFFER_SIZE]; // A ring buffer for motion instfructions -static volatile unsigned char block_buffer_head; // Index of the next block to be pushed -static volatile unsigned char block_buffer_tail; // Index of the block to process now // Used for the frequency limit static unsigned char old_direction_bits = 0; // Old direction bits. Used for speed calculations @@ -364,20 +368,7 @@ void plan_init() { } -void plan_discard_current_block() { - if (block_buffer_head != block_buffer_tail) { - block_buffer_tail = (block_buffer_tail + 1) & (BLOCK_BUFFER_SIZE - 1); - } -} -block_t *plan_get_current_block() { - if (block_buffer_head == block_buffer_tail) { - return(NULL); - } - block_t *block = &block_buffer[block_buffer_tail]; - block->busy = true; - return(block); -} #ifdef AUTOTEMP void getHighESpeed() diff --git a/Marlin/planner.h b/Marlin/planner.h index 9aa121acae..7bae9a1c92 100644 --- a/Marlin/planner.h +++ b/Marlin/planner.h @@ -72,12 +72,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa void plan_set_position(const float &x, const float &y, const float &z, const float &e); void plan_set_e_position(const float &e); -// Called when the current block is no longer needed. Discards the block and makes the memory -// availible for new blocks. -void plan_discard_current_block(); -// Gets the current block. Returns NULL if buffer empty -block_t *plan_get_current_block(); void check_axes_activity(); uint8_t movesplanned(); //return the nr of buffered moves @@ -102,4 +97,28 @@ extern unsigned long axis_steps_per_sqr_second[NUM_AXIS]; extern float autotemp_factor; #endif + +/////semi-private stuff +#include + +extern block_t block_buffer[BLOCK_BUFFER_SIZE]; // A ring buffer for motion instfructions +extern volatile unsigned char block_buffer_head; // Index of the next block to be pushed +extern volatile unsigned char block_buffer_tail; +// Called when the current block is no longer needed. Discards the block and makes the memory +// availible for new blocks. +inline void plan_discard_current_block() { + if (block_buffer_head != block_buffer_tail) { + block_buffer_tail = (block_buffer_tail + 1) & (BLOCK_BUFFER_SIZE - 1); + } +} + +// Gets the current block. Returns NULL if buffer empty +inline block_t *plan_get_current_block() { + if (block_buffer_head == block_buffer_tail) { + return(NULL); + } + block_t *block = &block_buffer[block_buffer_tail]; + block->busy = true; + return(block); +} #endif