He escrito un código para el microcontrolador 8051, donde utilicé el tipo de bit, algo como esto:
%pre%
Ahora estoy portando esto al controlador AVR ATmega16. Encontré que no hay soporte para
tipo de bit en AVR.
El manual de usuario de
AVR-lib C dice:
Tipos de datos: char es de 8 bits, int es de 16 bits, largo es de 32 bits, largo
largo es de 64 bits, flotante y doble de 32 bits (este es el único
formato de punto flotante admitido), los punteros son 16 bits (función
los punteros son direcciones de palabras, para permitir direccionar hasta 128K programas
espacio de memoria). Hay una opción -mint8 (ver Opciones para la C
compilador avr-gcc) para hacer int 8 bits, pero eso no es compatible con
avr-libc y viola los estándares C (int debe ser de al menos 16 bits). Eso
puede ser eliminado en una versión futura.
Entonces, ¿qué debo hacer ahora?
______ answer80616 ___
Puedes usar una estructura como esta:
%pre%
Y para acceder a un bit a la vez solo tienes que
%pre%
______ answer80632 ___
Como PeterJ ya mencionó en su comentario, sugeriría usar %code% .
Es necesario incluir la biblioteca stdbool.
%pre%
Como ya se señaló, en AVRGCC, %code% es de 8 bits y solo una abstracción de %code% . Si no puedes vivir con eso y necesitas guardar cada bit o tener toneladas de banderas globales de "sí / no" (lo que podría indicar una mala práctica de codificación), puedes considerar lo que Naeriel publicó en su respuesta.
Sin embargo, el uso de bool y la denominación de variable adecuada (usando el prefijo "es") produce un código mucho más limpio. Por ejemplo usar
%pre%
en lugar de "done_flag". De esa manera es más obvio para alguien que no conoce el código lo que exactamente indica el estado.
______ answer80615 ___
Utilice unsigned char en su lugar. Sin embargo, esto usará un byte completo en lugar de un poco.
______ answer151021 ___
Puedes usar algo como esto:
%code%
Ejemplo de uso:
%code%
establece PB4 como pin de salida.
Fuente: enlace
___