From ed592f941642a2bf6da145dedce5498c23542945 Mon Sep 17 00:00:00 2001 From: Josh Stewart Date: Fri, 6 Jun 2014 11:29:43 +1000 Subject: [PATCH] Clean ups to remove some of the compiler warnings --- comms.ino | 12 ++++++------ corrections.ino | 2 +- math.h | 2 +- speeduino.ino | 19 +++++++++++-------- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/comms.ino b/comms.ino index 9ed1167..a08dd3f 100644 --- a/comms.ino +++ b/comms.ino @@ -52,17 +52,17 @@ void command() receiveValue(offset, Serial.read()); break; - case 't': // receive new Calibration info. Command structure: "t", . This is an MS2/Extra command, NOT part of MS1 spec + case 't': // receive new Calibration info. Command structure: "t", . This is an MS2/Extra command, NOT part of MS1 spec byte tableID; - byte canID; + //byte canID; //The first 2 bytes sent represent the canID and tableID while (Serial.available() == 0) { } - canID = Serial.read(); //Not currently used for anything + tableID = Serial.read(); //Not currently used for anything //while (Serial.available() == 0) { } // tableID = Serial.read(); - receiveCalibration(canID); //Receive new values and store in memory + receiveCalibration(tableID); //Receive new values and store in memory writeCalibration(); //Store received values in EEPROM break; @@ -316,8 +316,8 @@ void receiveCalibration(byte tableID) //break; } - //1024 value pairs are sent. We have to receive them all, but only pick out the ones we want to keep - //Currently we are only picking out 3 values + //1024 value pairs are sent. We have to receive them all, but only pick out the 3 we want to keep + //Currently we are only picking out 3 values, we could switch to 5 or 7, but 3 seems to be working OK //Each of the tables has a threshold at which valid values start and end int newValues[1024]; //The first and last valid values diff --git a/corrections.ino b/corrections.ino index 5fdf9e1..2cef223 100644 --- a/corrections.ino +++ b/corrections.ino @@ -38,7 +38,7 @@ Calculates the % change of the throttle over time (%/second) and performs a look byte correctionAccel() { - int rateOfChange = div(1000000, (currentLoopTime - previousLoopTime)).quot * (currentStatus.TPS - currentStatus.TPSlast); //This is the % per second that the TPS has moved + int rateOfChange = ldiv(1000000, (currentLoopTime - previousLoopTime)).quot * (currentStatus.TPS - currentStatus.TPSlast); //This is the % per second that the TPS has moved //int rateOfChange = div( (1000000 * (currentStatus.TPS - currentStatus.TPSlast)), (currentLoopTime - previousLoopTime)).quot; //This is the % per second that the TPS has moved currentStatus.tpsDOT = div(rateOfChange, 10).quot; diff --git a/math.h b/math.h index e6601e0..e081b30 100644 --- a/math.h +++ b/math.h @@ -1,6 +1,6 @@ //Replace the standard arduino map() function to use the div function instead -long fastMap(long x, long in_min, long in_max, long out_min, long out_max) +long fastMap(int x, int in_min, int in_max, int out_min, int out_max) { return div( ((x - in_min) * (out_max - out_min)) , ((in_max - in_min) + out_min) ).quot; } diff --git a/speeduino.ino b/speeduino.ino index 6c00a5c..8926d48 100644 --- a/speeduino.ino +++ b/speeduino.ino @@ -44,7 +44,7 @@ struct config2 configPage2; int req_fuel_uS, triggerToothAngle; volatile int triggerActualTeeth; -int triggerFilterTime = 500; // The shortest time (in uS) that pulses will be accepted (Used for debounce filtering) +unsigned int triggerFilterTime = 500; // The shortest time (in uS) that pulses will be accepted (Used for debounce filtering) volatile int toothCurrentCount = 0; //The current number of teeth (Onec sync has been achieved, this can never actually be 0 volatile unsigned long toothLastToothTime = 0; //The time (micros()) that the last tooth was registered @@ -72,7 +72,7 @@ byte coilLOW = LOW; struct statuses currentStatus; volatile int mainLoopCount; unsigned long secCounter; //The next time to increment 'runSecs' counter. -byte crankDegreesPerCylinder; //The number of crank degrees between cylinders (180 in a 4 cylinder, usually 120 in a 6 cylinder etc) +int crankDegreesPerCylinder; //The number of crank degrees between cylinders (180 in a 4 cylinder, usually 120 in a 6 cylinder etc) void setup() { @@ -225,7 +225,7 @@ void loop() noInterrupts(); unsigned long revolutionTime = (toothOneTime - toothOneMinusOneTime); //The time in uS that one revolution would take at current speed (The time tooth 1 was last seen, minus the time it was seen prior to that) interrupts(); - currentStatus.RPM = US_IN_MINUTE / revolutionTime; //Calc RPM based on last full revolution time (Can't use div() here as US_IN_MINUTE is larger than an unsigned int) + currentStatus.RPM = ldiv(US_IN_MINUTE, revolutionTime).quot; //Calc RPM based on last full revolution time (uses ldiv rather than div as US_IN_MINUTE is a long) } else { @@ -324,10 +324,13 @@ void loop() if (configPage1.nCylinders == 2) { injector2StartAngle = (355 + crankDegreesPerCylinder - ( div(currentStatus.PW, timePerDegree).quot )) % 360; } if (configPage1.nCylinders == 4) { injector2StartAngle = (355 + crankDegreesPerCylinder - ( div(currentStatus.PW, timePerDegree).quot )) % 360; } - if (currentStatus.RPM > ((int)(configPage2.SoftRevLim * 100)) ) { currentStatus.advance -= configPage2.SoftLimRetard; } //Softcut RPM limit (If we're above softcut limit, delay timing by configured number of degrees) + if (currentStatus.RPM > ((unsigned int)(configPage2.SoftRevLim * 100)) ) { currentStatus.advance -= configPage2.SoftLimRetard; } //Softcut RPM limit (If we're above softcut limit, delay timing by configured number of degrees) + //Calculate start angle for each channel + //1 ignition1StartAngle = 360 - currentStatus.advance - (div((configPage2.dwellRun*100), timePerDegree).quot ); // 360 - desired advance angle - number of degrees the dwell will take - if (configPage1.nCylinders == 2) { (ignition1StartAngle = 360 + crankDegreesPerCylinder - currentStatus.advance - (div((configPage2.dwellRun*100), timePerDegree).quot )) % 360; } - if (configPage1.nCylinders == 4) { (ignition1StartAngle = 360 + crankDegreesPerCylinder - currentStatus.advance - (div((configPage2.dwellRun*100), timePerDegree).quot )) % 360; } + //2 + if (configPage1.nCylinders == 2) { (ignition2StartAngle = crankDegreesPerCylinder + 360 - currentStatus.advance - (div((configPage2.dwellRun*100), timePerDegree).quot )) % 360; } + if (configPage1.nCylinders == 4) { (ignition2StartAngle = crankDegreesPerCylinder + 360 - currentStatus.advance - (div((configPage2.dwellRun*100), timePerDegree).quot )) % 360; } //Finally calculate the time (uS) until we reach the firing angles and set the schedules @@ -353,7 +356,7 @@ void loop() int dwell = (configPage2.dwellRun * 100); //Dwell is stored as ms * 10. ie Dwell of 4.3ms would be 43 in configPage2. This number therefore needs to be multiplied by 100 to get dwell in uS if ( ignition1StartAngle > crankAngle) { - if (currentStatus.RPM < ((int)(configPage2.HardRevLim) * 100) ) //Check for hard cut rev limit (If we're above the hardcut limit, we simply don't set a spark schedule) + if (currentStatus.RPM < ((unsigned int)(configPage2.HardRevLim) * 100) ) //Check for hard cut rev limit (If we're above the hardcut limit, we simply don't set a spark schedule) { setIgnitionSchedule1(beginCoil1Charge, (ignition1StartAngle - crankAngle) * timePerDegree, @@ -364,7 +367,7 @@ void loop() } if ( ignition2StartAngle > crankAngle) { - if (currentStatus.RPM < ((int)(configPage2.HardRevLim) * 100) ) //Check for hard cut rev limit (If we're above the hardcut limit, we simply don't set a spark schedule) + if (currentStatus.RPM < ((unsigned int)(configPage2.HardRevLim) * 100) ) //Check for hard cut rev limit (If we're above the hardcut limit, we simply don't set a spark schedule) { setIgnitionSchedule2(beginCoil2Charge, (ignition2StartAngle - crankAngle) * timePerDegree,