Convertir el valor de 10 bits (2: 8) en un resultado de 14 bits (6: 8)

0

Mis habilidades con C son deficientes, y no he encontrado una buena manera de hacer esto en la arquitectura de 8 bits. He intentado cambiar a 4, pero luego pierdo dígitos, sé que puedo multiplicar mi resultado de 10 bits por 16, pero ¿cómo obtengo el int sin signo en registros de 2-8 bits?

    
pregunta alxcpa01101

2 respuestas

1

Suponiendo que no necesita tener el signo de resultado extendido Y que su objetivo es simplemente normalizar la entrada de 10 bits a un resultado de 14 bits, aquí está el código que debe hacer lo que necesita.

// these two byte variables have the 2:8 input values
unsigned char val10_2;
unsigned char val10_8;

// this variable will be used as a working unsigned integer (guessing as 16-bit)
unsigned int temp16;

// these two byte variables will have the 6:8 result values
unsigned char reg14_6;
unsigned char reg14_8;

// combine inputs into an unsigned integer
temp16 = ((val10_2 & 0x03) << 8) | val10_8;

// normalize 10-bit value to 14-bit
temp16 = temp16 << 4;

// extract the final result out to the two 8-bit register values
reg14_6 = (temp16 >> 8) & 0xFF;
reg14_8 = temp16 & 0xFF;

He incluido un enmascaramiento adicional de los valores en las dos últimas asignaciones que puede que no sea estrictamente necesario y cualquier compilador de optimización decente eliminará pasos adicionales para ti.

    
respondido por el Michael Karas
0

Digamos que int es de 16 bits y char es de 8 bits.

Puede dividir el valor de 16 bits en sus dos bytes componentes con un código como este:

unsigned int val;
unsigned char lsb, msb;

lsb = val & 0x00FF;
msb = (val >> 8) & 0x00FF;

Acabo de arrancar esto de la parte superior de mi cabeza. Probablemente pueda reducir este código aún más con un estudio cuidadoso de lo que C garantiza sobre las conversiones de tipos y las peculiaridades específicas de su compilador. Para ser sincero, no he vuelto a comprobar las especificaciones de C, pero las dos máscaras ( x & 0x00FF ) podrían no ser necesarias, pero aun así, podría mantenerlas en el código para dejar clara la intención.

    
respondido por el The Photon

Lea otras preguntas en las etiquetas