Tenes algun codigo simple como para verlo?
Parece como si descompone la cifra en dos para sacar una mantisa y ahorrarse un float , a saber, luego le preguntaré.Estas trabajando con enteros, lo unico que hace ahi es tratar de separar el numero para guardarlo (mostrarlo,etc), pero lo hace mal. Es como si tratara de separar las unidades de las decenas, pero un numero de 16 bits tiene muchos mas digitos.
Si claramente ahi deberia estar el error... Ademas espero que todas las variables sean con signo.Código: C
variable = make16(read_eeprom(27),read_eeprom(28));
El make16 hace esto (segun manual de CCS):Código: C
i16 = (int16)(varhigh&0xff)*0x100+(varlow&0xff)
Lo que me preocupa es ese cast a int16, que sin nada se asume unsigned, segun el manual de CCS)CitarParece como si descompone la cifra en dos para sacar una mantisa y ahorrarse un float , a saber, luego le preguntaré.Estas trabajando con enteros, lo unico que hace ahi es tratar de separar el numero para guardarlo (mostrarlo,etc), pero lo hace mal. Es como si tratara de separar las unidades de las decenas, pero un numero de 16 bits tiene muchos mas digitos.
Para mi lo mas simple va a ser crearle una union (para que no trabaje con punteros). Para que tu compañero lo pueda entender y manejarse, el tema es que luego va a necesitar cambiar donde lo use, pero con un Replace All, se ahorra el tema. Si tu compañero se maneja bien con punteros entonces todo lo que va a continuacion se simplifica mas.Código: C
struct myStruct { int8 b1; int8 b2; } union myUnion { signed int16 w struct myStruct separado; } union myUnion variable;
Entonces:Código: C
// Previo inicializamos variable antes de leer por cualquier cosa: variable.w = 0; write_eeprom(27,variable.separado.b1); write_eeprom(28,variable.separado.b2); variable.separado.b1 = read_eeprom(27); variable.separado.b2 = read_eeprom(28);
Y de usarlo completo los 16 bits, entonces usar variable.w
La pregunta ahora es.... Si planteo algo como separar la decena y la unidad, no creo que plantee mas de 99 y -99, Por lo tanto, ¿por que irse a un numero de 16 bits?