Buenas, hablando con azicuetano, me ha propuesto en vez de enviar un array de 500 posiciones definidas como int8 y en realidad en cada una de ellas los numeros que van a ver son 0 ó 1, sería definirse un vector de 500 posiciones de int1 y a la hora de mandarlo por el USB reconstruir el array binario y pasarlo a decimal. Me explico con un ejemplo:
int1 tiempos[]={1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0};
Los elementos del array tiempos (las posiciones del 0 al 7) que están en rojo, tendríamos que pasarlas a decimal así sucesivamente hasta finalizar el array. En el momento que creamos un nuevo array quedaría de la siguiente forma:
int8 tiemosDec[]={128,64};
Así nos evitamos enviar en vez de 16 elementos de int8 del array tiempos (como estaba definido en la primera propuesta), solamente enviamos 2 elementos. Hablo para este ejemplo.
Para ejemplo de 500 posiciones pues solamente enviariamos 500/8=63 bytes con lo que ahorramos mucha memoria RAM del microprocesador.
Me pongo manos a la obra para desarrollar la primera función para pasar un array de números int1 a decimal:
int1 tiempos[]={1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0};
La funión la declaro así:
void ArrayBinToDecimal (int1 *,int *);
Reservo memoria de un puntero a un entero de 1 bit y también reservo memoria de un puntero aun entero de 1 byte.
La función la creo así:
void ArrayBinToDecimal (int1 xbin,int8 xdec)
{
int i,j,temp;
for(i=0;i<p-1;i=i+8) //p es tamaño del array de xbin y es una variable global
{
temp=0;
for(j=0;j<=7;j++)
{
temp=t[i+j]*2**(7-j)+temp;
}
xdec[i/8]=temp;
}
Y la función la llamaría así:
ArrayBinToDecimal (int1 &xbin,int8 &xdec)
El problema de esto y he comprobado es que el compilador CCS no reserva memoria int1 sino para un int8. Lo he comprobado haciendo un printf y sacando el valor con la función sizeof.
Alguien me lo puede confirmar y ya de paso me diría como lo puedo hacer...
Gracias