/** ************************************************************************** * @file mylibs_defs.h * @brief Заголочный файл для дефайнов библиотеки MyLibsGeneral. ************************************************************************** * @defgroup BIT_ACCESS_DEFINES Bit access defines * @ingroup MYLIBS_DEFINES * @brief Всякое для доступа к битам в unsigned *************************************************************************/ #ifndef __BIT_ACCESS_H_ #define __BIT_ACCESS_H_ #include "mylibs_defs.h" /** * @addtogroup BIT_ACCESS_TYPEDEF Byte access typedefs * @ingroup BIT_ACCESS_DEFINES * @brief Дефайны юнионов для обращения к битам. @{ */ typedef union { uint8_t all; struct { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned reserved:4; }bit; }uint4_BitTypeDef; typedef union { uint8_t all; struct { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned reserved:3; }bit; }uint5_BitTypeDef; typedef union { uint8_t all; struct { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned reserved:2; }bit; }uint6_BitTypeDef; typedef union { uint8_t all; struct { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned reserved:1; }bit; }uint7_BitTypeDef; typedef union { uint8_t all; struct { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; }bit; }uint8_BitTypeDef; typedef union { uint16_t all; struct { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; unsigned bit8:1; unsigned bit9:1; unsigned bit10:1; unsigned bit11:1; unsigned bit12:1; unsigned bit13:1; unsigned bit14:1; unsigned bit15:1; }bit; }uint16_BitTypeDef; typedef union { uint32_t all; struct { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; unsigned bit8:1; unsigned bit9:1; unsigned bit10:1; unsigned bit11:1; unsigned bit12:1; unsigned bit13:1; unsigned bit14:1; unsigned bit15:1; unsigned bit16:1; unsigned bit17:1; unsigned bit18:1; unsigned bit19:1; unsigned bit20:1; unsigned bit21:1; unsigned bit22:1; unsigned bit23:1; unsigned bit24:1; unsigned bit25:1; unsigned bit26:1; unsigned bit27:1; unsigned bit28:1; unsigned bit29:1; unsigned bit30:1; unsigned bit31:1; }bit; }uint32_BitTypeDef; typedef union { uint64_t all; struct { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; unsigned bit8:1; unsigned bit9:1; unsigned bit10:1; unsigned bit11:1; unsigned bit12:1; unsigned bit13:1; unsigned bit14:1; unsigned bit15:1; unsigned bit16:1; unsigned bit17:1; unsigned bit18:1; unsigned bit19:1; unsigned bit20:1; unsigned bit21:1; unsigned bit22:1; unsigned bit23:1; unsigned bit24:1; unsigned bit25:1; unsigned bit26:1; unsigned bit27:1; unsigned bit28:1; unsigned bit29:1; unsigned bit30:1; unsigned bit31:1; unsigned bit32:1; unsigned bit33:1; unsigned bit34:1; unsigned bit35:1; unsigned bit36:1; unsigned bit37:1; unsigned bit38:1; unsigned bit39:1; unsigned bit40:1; unsigned bit41:1; unsigned bit42:1; unsigned bit43:1; unsigned bit44:1; unsigned bit45:1; unsigned bit46:1; unsigned bit47:1; unsigned bit48:1; unsigned bit49:1; unsigned bit50:1; unsigned bit51:1; unsigned bit52:1; unsigned bit53:1; unsigned bit54:1; unsigned bit55:1; unsigned bit56:1; unsigned bit57:1; unsigned bit58:1; unsigned bit59:1; unsigned bit60:1; unsigned bit61:1; unsigned bit62:1; unsigned bit63:1; }bit; }uint64_BitTypeDef; /** BIT_ACCESS_TYPEDEF * @} */ /** * @addtogroup BIT_ACCESS_FUNCTIONS Byte access functions * @ingroup BIT_ACCESS_DEFINES * @brief Дефайны для обращения к битам в unsigned. @{ */ #define uint8_bit(_uint8_, _bit_) (*(uint8_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_ #define uint16_bit(_uint8_, _bit_) (*(uint16_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_ #define uint32_bit(_uint8_, _bit_) (*(uint32_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_ #define uint64_bit(_uint8_, _bit_) (*(uint64_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_ /** BIT_ACCESS_FUNCTIONS * @} */ #endif //__BIT_ACCESS_H_