Después de romperme la cabeza hasta la desesperación con un firmware que estoy haciendo he logrado recudir el problema a su mínima expresión y cuál no es mi sorpresa al detectar una multiplicación errónea
Atecedentes: CCS C v.4.140
He realizado esta simple prueba con una más simple aún función:
void special_function(void){
int8 a = 80;
int16 b = 0;
b = a * 3;
fprintf(DEBUG,"< a=%u b=%Lu>\r\n",a,b);
}
y el resultado que obtengo es ...
< a=80 b=65520>La verdad es que alucino en colores y no doy crédito a lo que mis ojos están viendo ... he intentado cualificar las variables pero el resultado sigue igual ...
(int16) b = (int8) a * (int8) 3;
¿donde está mi esperado
240 (80*3)?
EDITO: SOLUCIONADO ... he cualifcado las variables de nuevo pero esta vez he metido una de 16 bits en el lado derecho de la operación ...
(int16) b = (int8) a * (int16) 3;
Y ahora si obtengo:
< a=80 b=240>La verdad es que CCS C cada vez se está poniendo mas "delicado" ...