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 :shock: :shock: :shock:
Atecedentes: CCS C v.4.140
He realizado esta simple prueba con una más simple aún función:Código: CSS
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 ...Código: CSS
(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 ...Código: CSS
(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" ... :?
Una preguntita RedPic y si b es un int el resultado te daria 240?