Problema en CCS con valor booleano

#1
Hola que tal, pues de nuevo por aqui con una dudilla, tengo una función en CCS a la cual le paso como argumento un valor tipo booleano de tamaño un bit (int1).
La variable que paso como argumento es el modulo de un numero dividido entre 2, es decir en mi programa descompongo un numero decimal de 8 bits (0-255) en sus componentes binarias las cuales almaceno en un arreglo de tipo int1 (p.e. 4 = 0,0,0,0,1,0,0,0), y despues paso cada componente a una función para ke los ponga uno por uno en un pin del PIC y así los manda a un registro de desplazamiento.:unsure:
Mi problema es que en la linea que descompone el numero decimal, la operación del módulo regresa un valor de 8 bits (supongo), en teoría ya que es el módulo entre 2 la operación que hago solo me regresa 1 o 0, pero en mi variable al ser de un bit (int1) al parecer no guarda correctamente dicho valor (o no lo acepta como un bit).:enfadado:
Mi duda es si existe alguna función predefinida que devuelva un valor tipo bit (int1) cuando le pase como argumento un valor (0 o 1 tipo int).:confused:
 
#2
asumiendo que "valor" es unsigned int8:

booleana = (int1)valor;

Proba eso a ver que pasa. Esto se llama "cast" y es convertir forzadamente entre tipos de datos.

Sino:

booleana = FALSE;
if (valor) booleana = TRUE;

Eso funcionaria seguro.

Por mi experiencia en CCS, es bastante delicado con los tipos de datos, hay veces que no da ni error ni warning pero el programa no anda como se espera, y es por conversiones o tipos.
 
#3
Prueba usando:
shift_left()
shift_right()

junto a
output_bit()

Ejemplo del CCS...
Código:
for(i=0;i<8;++i)
   output_bit(PIN_A0,shift_right(&data,1,0));
PD: Espera tranquilo por los bugs que el CCS los tiene varios :)

salu2.
 
#4
Muchas gracias por sus prontas respuestas, la solución temporal que utilizé fue una función a la cual le paso como argumento el resultado del módulo (0 o 1 tipo int) y me devuelve un valor bit (int1) después de evaluar el resultado con condicionales:

Código:
int1 int2bool(int value)
{
if(value>0)
return(1);
else
return(0);
}
de esa manera aseguro el retorno de un valor tipo int1 el problema por supuesto es la optimización de memoria :rolleyes:, probare con sus sugerencias y les comentaré cual me funciona mejor.

P.D. Y si aunque CCS es muy bueno los bugs son inevitables, afortunadamente la paciencia esta en mis virtudes. (y)
 
Última edición:

Temas similares

Arriba