Cómo evitar la representación de bits en la implementación CAN [cerrado]

-1

Estoy un poco confundido con el siguiente problema, estoy implementando el controlador CAN pero en el sentido de que hay algunas señales de menos de 1 byte y algunas son incluso de bit único que se definen como parte del archivo dbc. Pero el estándar C, como Misra, dice que no se pueden usar variables de tamaño de bit ya que no son portátiles. ¿Cómo puedo superar este problema?

    
pregunta rajesh

1 respuesta

2

Antes de comenzar, considera que estás escribiendo código para una pieza de hardware específica . Su código no será 100% portátil casi por definición.

Más sobre el tema, la forma estándar de acceso al campo de bits portátil es mediante el uso de máscaras y desplazamientos de bits:

// not portable
struct bit_field {
  unsigned int x : 1;
  unsigned int y : 3;
  unsigned int z : 4;
} bits;
bits.y = 2;

// portable
#define X_MASK 0x1U
#define X_SHIFT 0U
#define Y_MASK 0xEU
#define Y_SHIFT 1U
#define Z_MASK 0xF0U
#define Z_SHIFT 4U
unsigned int bits;
bits = (bits & ~Y_MASK) | (2U << Y_SHIFT);
    
respondido por el Dmitry Grigoryev

Lea otras preguntas en las etiquetas