diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 8afc87bc99..910cf46ad3 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -16,7 +16,6 @@ #include "Configuration.h" #include "MarlinSerial.h" - #define FORCE_INLINE __attribute__((always_inline)) inline //#define SERIAL_ECHO(x) Serial << "echo: " << x; //#define SERIAL_ECHOLN(x) Serial << "echo: "< #include #include diff --git a/Marlin/MarlinSerial.h b/Marlin/MarlinSerial.h index 76d5a35a1f..0fe0c52274 100644 --- a/Marlin/MarlinSerial.h +++ b/Marlin/MarlinSerial.h @@ -120,7 +120,7 @@ class MarlinSerial //: public Stream FORCE_INLINE void print(const String &s) { - for (int i = 0; i < s.length(); i++) { + for (int i = 0; i < (int)s.length(); i++) { write(s[i]); } } diff --git a/Marlin/cardreader.h b/Marlin/cardreader.h index c8ef9dbb43..70244a8774 100644 --- a/Marlin/cardreader.h +++ b/Marlin/cardreader.h @@ -59,7 +59,7 @@ private: LsAction lsAction; //stored for recursion. int16_t nrFiles; //counter for the files in the current directory and recycled as position counter for getting the nrFiles'th name in the directory. char* diveDirName; - void lsDive(char *prepend,SdFile parent); + void lsDive(const char *prepend,SdFile parent); }; diff --git a/Marlin/cardreader.pde b/Marlin/cardreader.pde index d355ea3ef3..1eb19ba00c 100644 --- a/Marlin/cardreader.pde +++ b/Marlin/cardreader.pde @@ -40,7 +40,7 @@ char *createFilename(char *buffer,const dir_t &p) //buffer>12characters } -void CardReader::lsDive(char *prepend,SdFile parent) +void CardReader::lsDive(const char *prepend,SdFile parent) { dir_t p; uint8_t cnt=0; diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index bef74a2e89..61f27fc228 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -107,10 +107,12 @@ volatile unsigned char block_buffer_tail; // Index of the block to pro //=============================private variables ============================ //=========================================================================== -// Used for the frequency limit -static unsigned char old_direction_bits = 0; // Old direction bits. Used for speed calculations -static long x_segment_time[3]={0,0,0}; // Segment times (in us). Used for speed calculations -static long y_segment_time[3]={0,0,0}; +#ifdef XY_FREQUENCY_LIMIT + // Used for the frequency limit + static unsigned char old_direction_bits = 0; // Old direction bits. Used for speed calculations + static long x_segment_time[3]={0,0,0}; // Segment times (in us). Used for speed calculations + static long y_segment_time[3]={0,0,0}; +#endif // Returns the index of the next block in the ring buffer // NOTE: Removed modulo (%) operator, which uses an expensive divide and multiplication. @@ -255,7 +257,7 @@ void planner_reverse_pass_kernel(block_t *previous, block_t *current, block_t *n // planner_recalculate() needs to go over the current plan twice. Once in reverse and once forward. This // implements the reverse pass. void planner_reverse_pass() { - char block_index = block_buffer_head; + uint8_t block_index = block_buffer_head; if(((block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1)) > 3) { block_index = (block_buffer_head - 3) & (BLOCK_BUFFER_SIZE - 1); block_t *block[3] = { NULL, NULL, NULL }; @@ -294,7 +296,7 @@ void planner_forward_pass_kernel(block_t *previous, block_t *current, block_t *n // planner_recalculate() needs to go over the current plan twice. Once in reverse and once forward. This // implements the forward pass. void planner_forward_pass() { - char block_index = block_buffer_tail; + uint8_t block_index = block_buffer_tail; block_t *block[3] = { NULL, NULL, NULL }; while(block_index != block_buffer_head) { @@ -384,7 +386,7 @@ void getHighESpeed() return; //do nothing float high=0; - char block_index = block_buffer_tail; + uint8_t block_index = block_buffer_tail; while(block_index != block_buffer_head) { float se=block_buffer[block_index].steps_e/float(block_buffer[block_index].step_event_count)*block_buffer[block_index].nominal_rate; @@ -423,7 +425,7 @@ void check_axes_activity() { block_t *block; if(block_buffer_tail != block_buffer_head) { - char block_index = block_buffer_tail; + uint8_t block_index = block_buffer_tail; while(block_index != block_buffer_head) { block = &block_buffer[block_index]; if(block->steps_x != 0) x_active++; @@ -519,8 +521,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa block->nominal_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0 block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0 - // segment time im micro seconds - long segment_time = lround(1000000.0/inverse_second); + if (block->steps_e == 0) { @@ -538,6 +539,8 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa #endif /* + // segment time im micro seconds + long segment_time = lround(1000000.0/inverse_second); if ((blockcount>0) && (blockcount < (BLOCK_BUFFER_SIZE - 4))) { if (segment_timeaccelerate_until) { + if (step_events_completed <= (unsigned long int)current_block->accelerate_until) { MultiU24X24toH16(acc_step_rate, acceleration_time, current_block->acceleration_rate); acc_step_rate += current_block->initial_rate; @@ -463,7 +464,7 @@ ISR(TIMER1_COMPA_vect) } #endif } - else if (step_events_completed > current_block->decelerate_after) { + else if (step_events_completed > (unsigned long int)current_block->decelerate_after) { MultiU24X24toH16(step_rate, deceleration_time, current_block->acceleration_rate); if(step_rate > acc_step_rate) { // Check step_rate stays positive @@ -678,7 +679,7 @@ void st_set_e_position(const long &e) CRITICAL_SECTION_END; } -long st_get_position(char axis) +long st_get_position(uint8_t axis) { long count_pos; CRITICAL_SECTION_START; diff --git a/Marlin/stepper.h b/Marlin/stepper.h index 73b7efb1cd..e11f5e5a92 100644 --- a/Marlin/stepper.h +++ b/Marlin/stepper.h @@ -34,7 +34,7 @@ void st_set_position(const long &x, const long &y, const long &z, const long &e) void st_set_e_position(const long &e); // Get current position in steps -long st_get_position(char axis); +long st_get_position(uint8_t axis); // The stepper subsystem goes to sleep when it runs out of things to execute. Call this // to notify the subsystem that it is time to go to work. diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 93364f8cb0..ac5aeaa3e5 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -67,7 +67,8 @@ int heatingtarget_raw[3]= {0, 0, 0}; //=========================================================================== static bool temp_meas_ready = false; -static unsigned long previous_millis_heater, previous_millis_bed_heater; +static unsigned long previous_millis_bed_heater; +//static unsigned long previous_millis_heater; #ifdef PIDTEMP //static cannot be external: @@ -80,8 +81,8 @@ static unsigned long previous_millis_heater, previous_millis_bed_heater; static float pid_error; static float temp_iState_min; static float temp_iState_max; - static float pid_input; - static float pid_output; + // static float pid_input; + // static float pid_output; static bool pid_reset; #endif //PIDTEMP @@ -94,8 +95,8 @@ static unsigned long previous_millis_heater, previous_millis_bed_heater; // Init min and max temp with extreme values to prevent false errors during startup static int minttemp_0 = 0; static int maxttemp_0 = 16383; - static int minttemp_1 = 0; - static int maxttemp_1 = 16383; + //static int minttemp_1 = 0; + //static int maxttemp_1 = 16383; static int bed_minttemp = 0; static int bed_maxttemp = 16383; @@ -268,7 +269,10 @@ int temp2analogBed(int celsius) { return (1023 * OVERSAMPLENR) - raw; #elif defined BED_USES_AD595 return lround(celsius * (1024.0 * OVERSAMPLENR/ (5.0 * 100.0) ) ); + #else + #warning No heater-type defined for the bed. #endif + return 0; } // Derived from RepRap FiveD extruder::getTemperature() @@ -296,6 +300,8 @@ float analog2temp(int raw) { return celsius; #elif defined HEATER_0_USES_AD595 return raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR; + #else + #error PLEASE DEFINE HEATER TYPE #endif } @@ -328,7 +334,10 @@ float analog2tempBed(int raw) { #elif defined BED_USES_AD595 return raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR; + #else + #warning No heater-type defined for the bed. #endif + return 0; } void tp_init() diff --git a/Marlin/temperature.h b/Marlin/temperature.h index e9395e008c..623f890bb0 100644 --- a/Marlin/temperature.h +++ b/Marlin/temperature.h @@ -86,7 +86,7 @@ FORCE_INLINE void setTargetHotend0(const float &celsius) #endif //PIDTEMP }; FORCE_INLINE void setTargetHotend1(const float &celsius) { target_raw[TEMPSENSOR_HOTEND_1]=temp2analog(celsius);}; -FORCE_INLINE float setTargetHotend(const float &celcius, uint8_t extruder){ +FORCE_INLINE void setTargetHotend(const float &celcius, uint8_t extruder){ if(extruder == 0) setTargetHotend0(celcius); if(extruder == 1) setTargetHotend1(celcius); }; @@ -94,17 +94,19 @@ FORCE_INLINE void setTargetBed(const float &celsius) { target_raw[TEMPSENSO FORCE_INLINE bool isHeatingHotend0() {return heatingtarget_raw[TEMPSENSOR_HOTEND_0] > current_raw[TEMPSENSOR_HOTEND_0];}; FORCE_INLINE bool isHeatingHotend1() {return target_raw[TEMPSENSOR_HOTEND_1] > current_raw[TEMPSENSOR_HOTEND_1];}; -FORCE_INLINE float isHeatingHotend(uint8_t extruder){ +FORCE_INLINE bool isHeatingHotend(uint8_t extruder){ if(extruder == 0) return heatingtarget_raw[TEMPSENSOR_HOTEND_0] > current_raw[TEMPSENSOR_HOTEND_0]; if(extruder == 1) return target_raw[TEMPSENSOR_HOTEND_1] > current_raw[TEMPSENSOR_HOTEND_1]; + return false; }; FORCE_INLINE bool isHeatingBed() {return target_raw[TEMPSENSOR_BED] > current_raw[TEMPSENSOR_BED];}; FORCE_INLINE bool isCoolingHotend0() {return target_raw[TEMPSENSOR_HOTEND_0] < current_raw[TEMPSENSOR_HOTEND_0];}; FORCE_INLINE bool isCoolingHotend1() {return target_raw[TEMPSENSOR_HOTEND_1] < current_raw[TEMPSENSOR_HOTEND_1];}; -FORCE_INLINE float isCoolingHotend(uint8_t extruder){ +FORCE_INLINE bool isCoolingHotend(uint8_t extruder){ if(extruder == 0) return target_raw[TEMPSENSOR_HOTEND_0] < current_raw[TEMPSENSOR_HOTEND_0]; if(extruder == 1) return target_raw[TEMPSENSOR_HOTEND_1] < current_raw[TEMPSENSOR_HOTEND_1]; + return false; }; FORCE_INLINE bool isCoolingBed() {return target_raw[TEMPSENSOR_BED] < current_raw[TEMPSENSOR_BED];}; diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index 887dc04f25..93fa4895d7 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -1,7 +1,7 @@ #ifndef __ULTRALCDH #define __ULTRALCDH #include "Configuration.h" - +#include "Marlin.h" #ifdef ULTRA_LCD void lcd_status(); @@ -104,7 +104,6 @@ curencoderpos=maxlines*lcdslow; } lastencoderpos=encoderpos=curencoderpos; - int lastactiveline=activeline; activeline=curencoderpos/lcdslow; if(activeline<0) activeline=0; if(activeline>LCD_HEIGHT-1) activeline=LCD_HEIGHT-1; @@ -137,7 +136,7 @@ #define LCD_MESSAGE(x) lcd_status(x); - #define LCD_MESSAGEPGM(x) lcd_statuspgm(PSTR(x)); + #define LCD_MESSAGEPGM(x) lcd_statuspgm(MYPGM(x)); #define LCD_STATUS lcd_status() #else //no lcd #define LCD_STATUS diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 54ea809df5..65ba86f109 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -53,7 +53,7 @@ void lcdProgMemprint(const char *str) ch=pgm_read_byte(++str); } } -#define lcdprintPGM(x) lcdProgMemprint(PSTR(x)) +#define lcdprintPGM(x) lcdProgMemprint(MYPGM(x)) //=========================================================================== @@ -159,8 +159,8 @@ void lcd_status() { #ifdef ULTIPANEL static uint8_t oldbuttons=0; - static long previous_millis_buttons=0; - static long previous_lcdinit=0; + //static long previous_millis_buttons=0; + //static long previous_lcdinit=0; // buttons_check(); // Done in temperature interrupt //previous_millis_buttons=millis();