Found a couple of unused variables, that I commented.
Tried to solve the program memory warning message, and failed.
#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: "<<x<<endl;
//#define SERIAL_PROTOCOL(x) Serial << x;
//#define SERIAL_PROTOCOLLN(x) Serial << x<<endl;
+//this is a unfinsihed attemp to removes a lot of warning messages, see:
+// http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=57011
+//typedef char prog_char PROGMEM;
+// //#define PSTR (s ) ((const PROGMEM char *)(s))
+// //# define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];}))
+// //#define MYPGM(s) ((const prog_char *g PROGMEM=s))
+// //#define MYPGM(s) PSTR(s)
+#define MYPGM(s) (__extension__({static char __c[] __attribute__((__progmem__)) = (s); &__c[0];})) //This is the normal behaviour
+//#define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];})) //this does not work but hides the warnings
#define SERIAL_PROTOCOL(x) MSerial.print(x);
-#define SERIAL_PROTOCOLPGM(x) serialprintPGM(PSTR(x));
+#define SERIAL_PROTOCOLPGM(x) serialprintPGM(MYPGM(x));
#define SERIAL_PROTOCOLLN(x) {MSerial.print(x);MSerial.write('\n');}
-#define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(PSTR(x));MSerial.write('\n');}
+#define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MSerial.write('\n');}
+
-const char errormagic[] PROGMEM ="Error:";
-const char echomagic[] PROGMEM ="echo:";
+const prog_char errormagic[] PROGMEM ="Error:";
+const prog_char echomagic[] PROGMEM ="echo:";
#define SERIAL_ERROR_START serialprintPGM(errormagic);
#define SERIAL_ERROR(x) SERIAL_PROTOCOL(x)
#define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(x)
//things to write to serial from Programmemory. saves 400 to 2k of RAM.
-#define SerialprintPGM(x) serialprintPGM(PSTR(x))
+#define SerialprintPGM(x) serialprintPGM(MYPGM(x))
FORCE_INLINE void serialprintPGM(const char *str)
{
char ch=pgm_read_byte(str);
const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42
-static float tt = 0, bt = 0;
+//static float tt = 0;
+//static float bt = 0;
//Inactivity shutdown variables
static unsigned long previous_millis_cmd = 0;
Modified 28 September 2010 by Mark Sproul
*/
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
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]);
}
}
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);
};
}
-void CardReader::lsDive(char *prepend,SdFile parent)
+void CardReader::lsDive(const char *prepend,SdFile parent)
{
dir_t p;
uint8_t cnt=0;
//=============================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.
// 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 };
// 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) {
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;
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++;
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) {
#endif
/*
+ // segment time im micro seconds
+ long segment_time = lround(1000000.0/inverse_second);
if ((blockcount>0) && (blockcount < (BLOCK_BUFFER_SIZE - 4))) {
if (segment_time<minsegmenttime) { // buffer is draining, add extra time. The amount of time added increases if the buffer is still emptied more.
segment_time=segment_time+lround(2*(minsegmenttime-segment_time)/blockcount);
/* The timer calculations of this module informed by the 'RepRap cartesian firmware' by Zack Smith
and Philipp Tiefenbacher. */
+
#include "stepper.h"
#include "Configuration.h"
#include "Marlin.h"
// Calculare new timer value
unsigned short timer;
unsigned short step_rate;
- if (step_events_completed <= current_block->accelerate_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;
}
#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
CRITICAL_SECTION_END;
}
-long st_get_position(char axis)
+long st_get_position(uint8_t axis)
{
long count_pos;
CRITICAL_SECTION_START;
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.
//===========================================================================
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:
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
// 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;
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()
return celsius;
#elif defined HEATER_0_USES_AD595
return raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR;
+ #else
+ #error PLEASE DEFINE HEATER TYPE
#endif
}
#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()
#endif //PIDTEMP\r
};\r
FORCE_INLINE void setTargetHotend1(const float &celsius) { target_raw[TEMPSENSOR_HOTEND_1]=temp2analog(celsius);};\r
-FORCE_INLINE float setTargetHotend(const float &celcius, uint8_t extruder){ \r
+FORCE_INLINE void setTargetHotend(const float &celcius, uint8_t extruder){ \r
if(extruder == 0) setTargetHotend0(celcius);\r
if(extruder == 1) setTargetHotend1(celcius);\r
};\r
\r
FORCE_INLINE bool isHeatingHotend0() {return heatingtarget_raw[TEMPSENSOR_HOTEND_0] > current_raw[TEMPSENSOR_HOTEND_0];};\r
FORCE_INLINE bool isHeatingHotend1() {return target_raw[TEMPSENSOR_HOTEND_1] > current_raw[TEMPSENSOR_HOTEND_1];};\r
-FORCE_INLINE float isHeatingHotend(uint8_t extruder){ \r
+FORCE_INLINE bool isHeatingHotend(uint8_t extruder){ \r
if(extruder == 0) return heatingtarget_raw[TEMPSENSOR_HOTEND_0] > current_raw[TEMPSENSOR_HOTEND_0];\r
if(extruder == 1) return target_raw[TEMPSENSOR_HOTEND_1] > current_raw[TEMPSENSOR_HOTEND_1];\r
+ return false; \r
};\r
FORCE_INLINE bool isHeatingBed() {return target_raw[TEMPSENSOR_BED] > current_raw[TEMPSENSOR_BED];};\r
\r
FORCE_INLINE bool isCoolingHotend0() {return target_raw[TEMPSENSOR_HOTEND_0] < current_raw[TEMPSENSOR_HOTEND_0];};\r
FORCE_INLINE bool isCoolingHotend1() {return target_raw[TEMPSENSOR_HOTEND_1] < current_raw[TEMPSENSOR_HOTEND_1];};\r
-FORCE_INLINE float isCoolingHotend(uint8_t extruder){ \r
+FORCE_INLINE bool isCoolingHotend(uint8_t extruder){ \r
if(extruder == 0) return target_raw[TEMPSENSOR_HOTEND_0] < current_raw[TEMPSENSOR_HOTEND_0];\r
if(extruder == 1) return target_raw[TEMPSENSOR_HOTEND_1] < current_raw[TEMPSENSOR_HOTEND_1];\r
+ return false; \r
};\r
FORCE_INLINE bool isCoolingBed() {return target_raw[TEMPSENSOR_BED] < current_raw[TEMPSENSOR_BED];};\r
\r
#ifndef __ULTRALCDH
#define __ULTRALCDH
#include "Configuration.h"
-
+#include "Marlin.h"
#ifdef ULTRA_LCD
void lcd_status();
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;
#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
ch=pgm_read_byte(++str);\r
}\r
}\r
-#define lcdprintPGM(x) lcdProgMemprint(PSTR(x))\r
+#define lcdprintPGM(x) lcdProgMemprint(MYPGM(x))\r
\r
\r
//===========================================================================\r
{\r
#ifdef ULTIPANEL\r
static uint8_t oldbuttons=0;\r
- static long previous_millis_buttons=0;\r
- static long previous_lcdinit=0;\r
+ //static long previous_millis_buttons=0;\r
+ //static long previous_lcdinit=0;\r
// buttons_check(); // Done in temperature interrupt\r
//previous_millis_buttons=millis();\r
\r