¿Por qué los campos de bits en el registro no son secuenciales?

0

¿Por qué los campos de bits en el registro no son secuenciales? Por ejemplo, considere un registro de 8 bits X. X tendrá los bits 0-2 con banderas y 3-6 puede estar reservado y el bit 7 puede representar otra bandera. ¿Por qué no usar los bits 0-3 y dejar 4-7 como reservado?

Para ver un ejemplo práctico, consulte la hoja de datos LSM303DLHC. El registro CTRL_REG6_A tiene la siguiente asignación:

Registro CTRL_REG6_A:

  • 7 : I2_CLICKen
  • 6 : I2_INT1
  • 5 : I2_INT2
  • 4 : BOOT_I1
  • 3 : P2_ACT
  • 2 : -
  • 1 : H_LACTIVE
  • 0 : -

Los bits 0 y 2 no se utilizan.

    
pregunta kartik

2 respuestas

8

El diseño del registro generalmente está determinado por el diseñador de hardware. Generalmente hay una razón para los bits que no se usan, lo más probable es que primero:

  • Se eliminó la funcionalidad de un diseño anterior, las marcas de bit ahora están reservadas para evitar confusiones de revisiones antiguas de software (compatibilidad con versiones anteriores).
  • Para dejar espacio para implementar el comportamiento en futuras revisiones. O, de hecho, los bits pueden ocultar características implementadas (quizás parcialmente) que solo se documentarán en la próxima revisión.
  • Los bits no documentados pueden ser controlados por señales que solo son útiles para la prueba / depuración, por lo que no se pueden documentar públicamente sin exponer los detalles de la implementación. Por ejemplo, pueden leer codificaciones internas de la máquina de estado o indicadores de condición inesperados.
  • Los bits no utilizados pueden estar simplemente allí para la alineación de los datos. Algunas CPU pueden ser campos de procesamiento más rápidos donde los bits relacionados se empaquetan para alineación de bytes.
respondido por el shuckc
0

En muchos casos, puede ser útil tener bits con ciertos tipos de funcionalidad organizados de forma consecutiva o regular. Supongamos que un microcontrolador de 32 bits tiene tres widgets A, B y C, cada uno de los cuales tiene cinco bits de control asociados V, W, X, Y y Z. Si los cinco bits inferiores controlaban las funciones para A, los siguientes cinco para B, y así sucesivamente, entonces, si una futura versión mejorada del chip agregara otra función U a cada widget, los bits de control de esas funciones se habrían colocado en algún lugar "impar" en relación con los primeros cinco. Si los tres bits inferiores representan la función V para cada widget, los siguientes tres bits funcionan con W, etc., uno podría continuar el patrón con una nueva función U, pero agregar un nuevo widget requeriría que sus bits de control vayan en una "impar" lugar relativo a los tres primeros.

Supongamos que, en cambio, uno usa los bits 0-4 para el widget A, 8-12 para el widget B, y 16-20 para el widget C. Uno podría agregar fácilmente hasta tres bits más para cada widget mientras mantiene los bits para cada widget juntos, y fácilmente podría agregar otro widget mientras continúa el mismo patrón. Incluso si uno agrega un quinto widget, uno podría derramarlo en la siguiente dirección de palabra. El código que desea acceder a varios widgets a la vez tendría que lidiar con el hecho de que ahora hay más de un grupo, pero el código que solo quiere usar un widget puede usar direccionamiento de bytes.

    
respondido por el supercat

Lea otras preguntas en las etiquetas