[Icc-avr] printf off by 1?

bobgardner at aol.com bobgardner at aol.com
Wed Jul 2 08:44:44 PDT 2008


Anyone see anything that would make this print out one byte off? The var sizes are mixed... 1 byte, 2 byte.... but the cprintf that prints em out
thinks they are all 2 byte? How does a %d know if it has a byte or an int for a param?? Sorry about losing the indent.... hope its not too wierd to read....


//---ram copy of eeprom vars with order reversed size 40------------
unsigned int ad4vraw; //823->0x33f?????? <---2 bytes
unsigned char dispF; //?????????????????????? <---1 byte

signed int nunitsmax; //needle units max
signed int nunitsmin; // min

signed int ev2unitsmax; //extv1 units max
signed int ev2unitsmin; // min

signed int ev1unitsmax; //extv1 units max
signed int ev1unitsmin; // min

signed int emv2max; //extv1 mv max
signed int emv2min; //extv1 mv min

signed int emv1max; //extv1 mv max
signed int emv1min; //extv1 mv min

unsigned char voltsonbdisp; //
unsigned char voltsontdisp; //
unsigned char voltsonneedle; //

unsigned char thermonbdisp; //
unsigned char thermontdisp; //
unsigned char thermonneedle; //
unsigned char readtherm; //

unsigned char extv2onbdisp; //
unsigned char extv2ontdisp; //
unsigned char extv2onneedle; //
unsigned char readextv2; //

unsigned char extv1onbdisp; //
unsigned char extv1ontdisp; //
unsigned char extv1onneedle; //
unsigned char readextv1; //
int needleoffset; //

//---eeprom init 40 bytes-------
#pragma data:eeprom //default config params set up for combo egt/boost deg F
int eeneedleoffset=0; //???????????????????????? <---2 bytes
unsigned char eereadextv1=1; //???????? <----1 byte
unsigned char eeextv1onneedle=0; //
unsigned char eeextv1ontdisp=1; //
unsigned char eeextv1onbdisp=0; //

unsigned char eereadextv2=1; //
unsigned char eeextv2onneedle=0; //
unsigned char eeextv2ontdisp=0; //
unsigned char eeextv2onbdisp=1; //

unsigned char eereadtherm=1; //
unsigned char eethermonneedle=1; //
unsigned char eethermontdisp=0; //
unsigned char eethermonbdisp=0; //

unsigned char eevoltsonneedle=0; //
unsigned char eevoltsontdisp=0; //
unsigned char eevoltsonbdisp=0; //

signed int eemv1min=0; //extv1 mv min 0-5V sensor
signed int eemv1max=5000; //extv1 mv max sensata 75psig sensor for 30 psi boost

signed int eemv2min=0; //extv2 mv min
signed int eemv2max=5000; //extv2 mv max sensata 75psig sensor for 30 psi boost

signed int eev1unitsmin=0; // min
signed int eev1unitsmax=5000; //extv1 units max

signed int eev2unitsmin=0; // min
signed int eev2unitsmax=5000; //extv2 units max

signed int eenunitsmin=0; // min
signed int eenunitsmax=240; //needle units max

unsigned int eead4vraw=823; //ad reading for 4.00V 823->0x33f
unsigned char eedispF=1; //

char eenamestr[]="DAVE TEICHMAN";
#pragma data:data

//--------------------------
void readeeprom(void){
//read eeprom params to ram

INTR_OFF();
EEPROMReadBytes((int)&eeneedleoffset, (void *)&needleoffset,40);? //<---I think there's 40 bytes in the eeprom
INTR_ON();
}

//--------------------------
void readnameeeprom(void){
//read name from eeprom to ram

INTR_OFF();
EEPROMReadBytes((int)&eenamestr, (void *)&namestr[0],sizeof(eenamestr)); 
INTR_ON();
}

//--------------------------
void saveeeprom(void){
//save ram to eeprom

INTR_OFF();
EEPROMWriteBytes((int)&eeneedleoffset, (void *)&needleoffset,40); 
INTR_ON();
}


//--------------------------
void calmenu(void){
//user config params

cprintf("cfg cmds: q=quit\n\n"
" a read extv1 %d\n"???????????????????????? //<----1 byte
" 1 extv1 on ndl %d\n"
" 2 extv1 on tdisp %d\n"
" 3 extv1 on bdisp %d\n\n"
" b read extv2 %d\n"
" 4 extv2 on ndl %d\n"
" 5 extv2 on tdisp %d\n"
" 6 extv2 on bdisp %d\n\n"
" c read thermo %d\n"
" 7 therm on ndl %d\n"
" 8 therm on tdisp %d\n"
" 9 therm on bdisp %d\n\n"
" d extv1 min mv %d\n"
" e extv1 max mv %d\n"
" f extv2 min mv %d\n"
" g extv2 max mv %d\n"
" h ndl units min %d\n"
" i ndl units max %d\n"
" j extv1 units min %d\n"
" k extv1 units max %d\n"
" l extv2 units min %d\n"
" m extv2 units max %d\n"
" n volts on ndl %d\n"
" o volts on tdisp %d\n"
" p volts on bdisp %d\n"
" r temp deg F %d\n"????????????????? //<----1 byte
" s a/d cal %d\n",??????????????????????? //<----2 bytes
" t user name %s\n",
readextv1,extv1onneedle,extv1ontdisp,extv1onbdisp,
readextv2,extv2onneedle,extv2ontdisp,extv2onbdisp,
readtherm,thermonneedle,thermontdisp,thermonbdisp,
emv1min,emv1max,emv2min,emv2max,nunitsmin,nunitsmax,
ev1unitsmin,ev1unitsmax,ev2unitsmin,ev2unitsmax,
voltsonneedle,voltsontdisp,voltsonbdisp,dispF,ad4vraw,namestr); 
}

//-------------------
void calloop(void){
//called from mainloop
char c;

while(c != 'q'){ //
calmenu();
crlf();
putc('>'); //prompt for input
c=getche();
crlf();
switch(c){
case 'a': readextv1 = !readextv1; break;
case '1': extv1onneedle = !extv1onneedle; break;
case '2': extv1ontdisp = !extv1ontdisp; break;
case '3': extv1onbdisp = !extv1onbdisp; break;
case 'b': readextv2 = !readextv2; break;
case '4': extv2onneedle = !extv2onneedle; break;
case '5': extv2ontdisp = !extv2ontdisp; break;
case '6': extv2onbdisp = !extv2onbdisp; break;
case 'c': readtherm = !readtherm; break;
case '7': thermonneedle= !thermonneedle; break;
case '8': thermontdisp = !thermontdisp; break;
case '9': thermonbdisp = !thermonbdisp; break;
case 'd': adjemv1min(); break;
case 'e': adjemv1max(); break;
case 'f': adjemv2min(); break;
case 'g': adjemv2max(); break;
case 'h': adjnunitsmin(); break;
case 'i': adjnunitsmax(); break;
case 'j': adjev1unitsmin(); break;
case 'k': adjev1unitsmax(); break;
case 'l': adjev2unitsmin(); break;
case 'm': adjev2unitsmax(); break;
case 'n': voltsonneedle = !voltsonneedle; break;
case 'o': voltsontdisp = !voltsontdisp; break;
case 'p': voltsonbdisp = !voltsonbdisp; break;
case 'r': dispF = !dispF; break;
case 's': adcal(); break;
case 't': getname(); break;
default: calmenu();
}
cfgchk();
calcparams();
saveeeprom();
_StackCheck();
}
}




unsigned int ad4vraw; //823->0x33f?????? <---2 bytes
unsigned char dispF; //?????????????????????? <---1 byte

signed int nunitsmax; //needle units max
signed int nunitsmin; // min

signed int ev2unitsmax; //extv1 units max
signed int ev2unitsmin; // min

signed int ev1unitsmax; //extv1 units max
signed int ev1unitsmin; // min

signed int emv2max; //extv1 mv max
signed int emv2min; //extv1 mv min

signed int emv1max; //extv1 mv max
signed int emv1min; //extv1 mv min

unsigned char voltsonbdisp; //
unsigned char voltsontdisp; //
unsigned char voltsonneedle; //

unsigned char thermonbdisp; //
unsigned char thermontdisp; //
unsigned char thermonneedle; //
unsigned char readtherm; //

unsigned char extv2onbdisp; //
unsigned char extv2ontdisp; //
unsigned char extv2onneedle; //
unsigned char readextv2; //

unsigned char extv1onbdisp; //
unsigned char extv1ontdisp; //
unsigned char extv1onneedle; //
unsigned char readextv1; //
int needleoffset; //

//---eeprom init 40 bytes-------
#pragma data:eeprom //default config params set up for combo egt/boost deg F
int eeneedleoffset=0; //???????????????????????? <---2 bytes
unsigned char eereadextv1=1; //???????? <----1 byte
unsigned char eeextv1onneedle=0; //
unsigned char eeextv1ontdisp=1; //
unsigned char eeextv1onbdisp=0; //

unsigned char eereadextv2=1; //
unsigned char eeextv2onneedle=0; //
unsigned char eeextv2ontdisp=0; //
unsigned char eeextv2onbdisp=1; //

unsigned char eereadtherm=1; //
unsigned char eethermonneedle=1; //
unsigned char eethermontdisp=0; //
unsigned char eethermonbdisp=0; //

unsigned char eevoltsonneedle=0; //
unsigned char eevoltsontdisp=0; //
unsigned char eevoltsonbdisp=0; //

signed int eemv1min=0; //extv1 mv min 0-5V sensor
signed int eemv1max=5000; //extv1 mv max sensata 75psig sensor for 30 psi boost

signed int eemv2min=0; //extv2 mv min
signed int eemv2max=5000; //extv2 mv max sensata 75psig sensor for 30 psi boost

signed int eev1unitsmin=0; // min
signed int eev1unitsmax=5000; //extv1 units max

signed int eev2unitsmin=0; // min
signed int eev2unitsmax=5000; //extv2 units max

signed int eenunitsmin=0; // min
signed int eenunitsmax=240; //needle units max

unsigned int eead4vraw=823; //ad reading for 4.00V 823->0x33f
unsigned char eedispF=1; //

char eenamestr[]="DAVE TEICHMAN";
#pragma data:data

//--------------------------
void readeeprom(void){
//read eeprom params to ram

INTR_OFF();
EEPROMReadBytes((int)&eeneedleoffset, (void *)&needleoffset,40);? //<---I think there's 40 bytes in the eeprom
INTR_ON();
}

//--------------------------
void readnameeeprom(void){
//read name from eeprom to ram

INTR_OFF();
EEPROMReadBytes((int)&eenamestr, (void *)&namestr[0],sizeof(eenamestr)); 
INTR_ON();
}

//--------------------------
void saveeeprom(void){
//save ram to eeprom

INTR_OFF();
EEPROMWriteBytes((int)&eeneedleoffset, (void *)&needleoffset,40); 
INTR_ON();
}


//--------------------------
void calmenu(void){
//user config params

cprintf("cfg cmds: q=quit\n\n"
" a read extv1 %d\n"???????????????????????? //<----1 byte
" 1 extv1 on ndl %d\n"
" 2 extv1 on tdisp %d\n"
" 3 extv1 on bdisp %d\n\n"
" b read extv2 %d\n"
" 4 extv2 on ndl %d\n"
" 5 extv2 on tdisp %d\n"
" 6 extv2 on bdisp %d\n\n"
" c read thermo %d\n"
" 7 therm on ndl %d\n"
" 8 therm on tdisp %d\n"
" 9 therm on bdisp %d\n\n"
" d extv1 min mv %d\n"
" e extv1 max mv %d\n"
" f extv2 min mv %d\n"
" g extv2 max mv %d\n"
" h ndl units min %d\n"
" i ndl units max %d\n"
" j extv1 units min %d\n"
" k extv1 units max %d\n"
" l extv2 units min %d\n"
" m extv2 units max %d\n"
" n volts on ndl %d\n"
" o volts on tdisp %d\n"
" p volts on bdisp %d\n"
" r temp deg F %d\n"????????????????? //<----1 byte
" s a/d cal %d\n",??????????????????????? //<----2 bytes
" t user name %s\n",
readextv1,extv1onneedle,extv1ontdisp,extv1onbdisp,
readextv2,extv2onneedle,extv2ontdisp,extv2onbdisp,
readtherm,thermonneedle,thermontdisp,thermonbdisp,
emv1min,emv1max,emv2min,emv2max,nunitsmin,nunitsmax,
ev1unitsmin,ev1unitsmax,ev2unitsmin,ev2unitsmax,
voltsonneedle,voltsontdisp,voltsonbdisp,dispF,ad4vraw,namestr); 
}

//-------------------
void calloop(void){
//called from mainloop
char c;

while(c != 'q'){ //
calmenu();
crlf();
putc('>'); //prompt for input
c=getche();
crlf();
switch(c){
case 'a': readextv1 = !readextv1; break;
case '1': extv1onneedle = !extv1onneedle; break;
case '2': extv1ontdisp = !extv1ontdisp; break;
case '3': extv1onbdisp = !extv1onbdisp; break;
case 'b': readextv2 = !readextv2; break;
case '4': extv2onneedle = !extv2onneedle; break;
case '5': extv2ontdisp = !extv2ontdisp; break;
case '6': extv2onbdisp = !extv2onbdisp; break;
case 'c': readtherm = !readtherm; break;
case '7': thermonneedle= !thermonneedle; break;
case '8': thermontdisp = !thermontdisp; break;
case '9': thermonbdisp = !thermonbdisp; break;
case 'd': adjemv1min(); break;
case 'e': adjemv1max(); break;
case 'f': adjemv2min(); break;
case 'g': adjemv2max(); break;
case 'h': adjnunitsmin(); break;
case 'i': adjnunitsmax(); break;
case 'j': adjev1unitsmin(); break;
case 'k': adjev1unitsmax(); break;
case 'l': adjev2unitsmin(); break;
case 'm': adjev2unitsmax(); break;
case 'n': voltsonneedle = !voltsonneedle; break;
case 'o': voltsontdisp = !voltsontdisp; break;
case 'p': voltsonbdisp = !voltsonbdisp; break;
case 'r': dispF = !dispF; break;
case 's': adcal(); break;
case 't': getname(); break;
default: calmenu();
}
cfgchk();
calcparams();
saveeeprom();
_StackCheck();
}
}


//--------------------------
void calmenu(void){
//user config params

cprintf("cfg cmds: q=quit\n\n"
" a read extv1 %d\n"???????????????????????? //<----1 byte
" 1 extv1 on ndl %d\n"
" 2 extv1 on tdisp %d\n"
" 3 extv1 on bdisp %d\n\n"
" b read extv2 %d\n"
" 4 extv2 on ndl %d\n"
" 5 extv2 on tdisp %d\n"
" 6 extv2 on bdisp %d\n\n"
" c read thermo %d\n"
" 7 therm on ndl %d\n"
" 8 therm on tdisp %d\n"
" 9 therm on bdisp %d\n\n"
" d extv1 min mv %d\n"
" e extv1 max mv %d\n"
" f extv2 min mv %d\n"
" g extv2 max mv %d\n"
" h ndl units min %d\n"
" i ndl units max %d\n"
" j extv1 units min %d\n"
" k extv1 units max %d\n"
" l extv2 units min %d\n"
" m extv2 units max %d\n"
" n volts on ndl %d\n"
" o volts on tdisp %d\n"
" p volts on bdisp %d\n"
" r temp deg F %d\n"????????????????? //<----1 byte
" s a/d cal %d\n",??????????????????????? //<----2 bytes
" t user name %s\n",
readextv1,extv1onneedle,extv1ontdisp,extv1onbdisp,
readextv2,extv2onneedle,extv2ontdisp,extv2onbdisp,
readtherm,thermonneedle,thermontdisp,thermonbdisp,
emv1min,emv1max,emv2min,emv2max,nunitsmin,nunitsmax,
ev1unitsmin,ev1unitsmax,ev2unitsmin,ev2unitsmax,
voltsonneedle,voltsontdisp,voltsonbdisp,dispF,ad4vraw,namestr); 
}

//-------------------
void calloop(void){
//called from mainloop
char c;

while(c != 'q'){ //
calmenu();
crlf();
putc('>'); //prompt for input
c=getche();
crlf();
switch(c){
case 'a': readextv1 = !readextv1; break;
case '1': extv1onneedle = !extv1onneedle; break;
case '2': extv1ontdisp = !extv1ontdisp; break;
case '3': extv1onbdisp = !extv1onbdisp; break;
case 'b': readextv2 = !readextv2; break;
case '4': extv2onneedle = !extv2onneedle; break;
case '5': extv2ontdisp = !extv2ontdisp; break;
case '6': extv2onbdisp = !extv2onbdisp; break;
case 'c': readtherm = !readtherm; break;
case '7': thermonneedle= !thermonneedle; break;
case '8': thermontdisp = !thermontdisp; break;
case '9': thermonbdisp = !thermonbdisp; break;
case 'd': adjemv1min(); break;
case 'e': adjemv1max(); break;
case 'f': adjemv2min(); break;
case 'g': adjemv2max(); break;
case 'h': adjnunitsmin(); break;
case 'i': adjnunitsmax(); break;
case 'j': adjev1unitsmin(); break;
case 'k': adjev1unitsmax(); break;
case 'l': adjev2unitsmin(); break;
case 'm': adjev2unitsmax(); break;
case 'n': voltsonneedle = !voltsonneedle; break;
case 'o': voltsontdisp = !voltsontdisp; break;
case 'p': voltsonbdisp = !voltsonbdisp; break;
case 'r': dispF = !dispF; break;
case 's': adcal(); break;
case 't': getname(); break;
default: calmenu();
}
cfgchk();
calcparams();
saveeeprom();
_StackCheck();
}
}

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://dragonsgate.net/pipermail/icc-avr/attachments/20080702/02861d73/attachment-0001.html


More information about the Icc-avr mailing list