Enas , perdón por el retraso pero el curro es mu malo
Pongo mi código a ver que os parece:
int conv_caracter (int * index_pixel,u8 res_intermedio,u8 res_intermedio2, int * acumulador, int * voy ,int ancho,int num_linea,u8 * linea_procesada )
{
for ( *index_pixel=0; *index_pixel<ancho && *index_pixel<8 ; *index_pixel+=1){
if ( (0x80 >> *index_pixel ) & res_intermedio ){
linea_procesada[*acumulador] |= (0x80 >> *voy );
}
else
linea_procesada[*acumulador] &= ~(0x80 >> *voy );
if ( *voy== 7 ){
*voy =0;
*acumulador+=1;
}
else{
*voy+=1;
}
}
for ( ; *index_pixel<ancho; *index_pixel+=1){
if ( (0x80 >> (*index_pixel-8) ) & res_intermedio2 ){
linea_procesada[*acumulador] |= (0x80 >> *voy );
}
else
linea_procesada[*acumulador] &= ~(0x80 >> *voy );
if ( *voy== 7 ){
*voy =0;
*acumulador+=1;
}
else{
*voy+=1;
}
}
return 0;
}
A la función le paso res_intermedio y resintermedio2 , donde están los datos de entrada a enviar ( del caracter que se procesa, pero eso es lo de menos).
ancho dice el número de bits a procesar del caracter (y num_linea lo paso para otros menesteres que no cuento por no liarlo más ).
También uso un array (linea_procesada) donde voy guardando de byte en byte los datos del buffer de salida.
Acumulador es el índice de linea_procesada.
*voy es el número de bit del buffer de salida (de 0 a 7) actual.
¿ Sickboy, te refieres a usar campos de bit ? estoy pensando en ello, aunque no se, tengo que pensar si así reduzco el número de operaciones...
Por otro lado, por fín me han respondido en la web del fabricante cómo leches hacer para que cambie la configuración del puerto serie "on the fly", así que menos problemas todavía
Un Saludo