¿Qué es __bit en el compilador XC8 C?

Tomemos un ejemplo:

extern volatile __bit TRISB0 @ (((unsigned) &TRISB)*8) + 0;

Creo que esto apunta TRISB0a la dirección de bit apropiada. Pero no entiendo por qué __bitse usa en lugar de bit, el tipo de datos XC8.

Traté de encontrar una explicación __biten la Guía del usuario de XC8 y en otros lugares, pero fue en vano.

Creo que el doble __ se usa para variables/nombres reservados, creo

Respuestas (2)

Está justo ahí en la guía del usuario en blanco y negro...

bity __bitson exactamente iguales, excepto por el nivel de compatibilidad:

Si se usa el indicador xc8 --STRICT, la palabra clave bit deja de estar disponible, pero puede usar la palabra clave __bit.

Por lo tanto, puede usar bitpara su propio tipo de datos, nombre de variable, nombre de función, lo que quiera, si especifica --STRICT en la línea de comando, y todavía lo usa __bitpara especificar un poco.

La opción --STRICT se utiliza para habilitar la conformidad estricta con ANSI C de todas las palabras clave especiales no estándar. El compilador MPLAB XC8 C admite varias palabras clave especiales (por ejemplo, el calificador de tipo persistente). Si se usa la opción --STRICT, estas palabras clave se cambian para incluir dos guiones bajos al principio de la palabra clave (por ejemplo, __persistente) para cumplir estrictamente con el estándar ANSI. Por lo tanto, si usa esta opción, deberá usar el calificador __persistente en su código, no persistente.

¿Puedes decirme dónde conseguiste la Guía del usuario? Mi versión dice "... deja de estar disponible". Sin mención de __bit. Lo primero que hice fue buscar en el documento __bit.
Se lo pedí a Google y me dio el sitio web de Microchip: ww1.microchip.com/downloads/en/DeviceDoc/…
Muy bueno (no sé cómo obtuve una versión anterior).

Esta es probablemente más una pregunta de programación general que una pregunta de electrónica, pero dado que este grupo abarca hasta cierto punto la programación de sistemas integrados, la responderé aquí.

El estándar C promete que el código puede usar cualquier identificador sintácticamente válido sin riesgo de conflicto con cualquier identificador definido por la implementación, siempre que:

  1. El código de usuario no usa #include <name>sintaxis para ningún encabezado no definido por el estándar.
  2. El identificador no entra en conflicto con ninguno de los que se mencionan en el estándar como asociados con encabezados incluidos usando la sintaxis mencionada anteriormente.
  3. El identificador no comienza con dos guiones bajos.

Un compilador que cumpla con los estándares debe permitir que un programa C declare una variable, función o tipo llamado bit. Si un compilador mismo fuera a definir un bittipo, pero el código de usuario intentara asignar algún otro significado a ese nombre, los dos usos entrarían en conflicto; los compiladores que cumplen con los estándares no pueden tener tales conflictos con el código que cumple con los estándares.

Al usar __biten lugar de como bitel nombre de su propio tipo de bit, el compilador se asegura de que el nombre no genere ningún conflicto no permitido. Si bien dicho nombre aún podría entrar en conflicto con un identificador definido por el usuario del mismo nombre, el estándar permitiría que una implementación haga lo que quiera en caso de conflicto que involucre dicho nombre. La mayoría de los compiladores se abstendrán de hacer algo totalmente malo (por ejemplo, pretender compilar normalmente, pero generar un código que no haría más que generar "REGLAS DE FRINK" sin fin a todos los UART adjuntos), pero el estándar permite a los autores del compilador hacer lo que quieran , con sin restricción alguna , en caso de tales conflictos de nombres).

Está todo tan claro ahora.