MyLibs
1.0
Расширенные библиотеки для STM32
Loading...
Searching...
No Matches
bit_access.h
Go to the documentation of this file.
1
/**
2
**************************************************************************
3
* @file bit_access.h
4
* @brief Заголочный файл для дефайнов битового доступа.
5
**************************************************************************
6
* @defgroup BIT_ACCESS_DEFINES Bit access defines
7
* @ingroup MYLIBS_DEFINES
8
* @brief Макросы и typedef'ы для работы с битами в unsigned типах.
9
* @details
10
В этом файле определены макросы для получения значения конкретного бита^
11
- @ref uint8_bit
12
- @ref uint16_bit
13
- @ref uint32_bit
14
- @ref uint64_bit
15
16
Особенности использования:
17
- Индекс бита должен быть **константой на этапе компиляции**.
18
Пример верного использования:
19
@code
20
uint8_t val = 0x05;
21
uint8_t b2 = uint8_bit(val, 2); // Получить бит 2
22
uint8_bit(val, 6) = 1; // Записать бит 6
23
@endcode
24
- Нельзя использовать переменные в качестве индекса:
25
@code
26
uint8_t i = 2;
27
uint8_bit(val, i); // Не сработает!
28
@endcode
29
- Макросы возвращают 0 или 1.
30
- Доступ реализован через приведение к `union` с битовыми полями, поэтому это
31
безопасный способ работы с отдельными битами без ручного сдвига и маскирования.
32
* @{
33
*************************************************************************/
34
#ifndef __BIT_ACCESS_H_
35
#define __BIT_ACCESS_H_
36
#include "
mylibs_defs.h
"
37
38
39
typedef
union
40
{
41
uint8_t all;
42
struct
43
{
44
unsigned
bit0:1;
45
unsigned
bit1:1;
46
unsigned
bit2:1;
47
unsigned
bit3:1;
48
unsigned
bit4:1;
49
unsigned
bit5:1;
50
unsigned
bit6:1;
51
unsigned
bit7:1;
52
}bit;
53
}
uint8_BitTypeDef
;
54
55
typedef
union
56
{
57
uint16_t all;
58
struct
59
{
60
unsigned
bit0:1;
61
unsigned
bit1:1;
62
unsigned
bit2:1;
63
unsigned
bit3:1;
64
unsigned
bit4:1;
65
unsigned
bit5:1;
66
unsigned
bit6:1;
67
unsigned
bit7:1;
68
unsigned
bit8:1;
69
unsigned
bit9:1;
70
unsigned
bit10:1;
71
unsigned
bit11:1;
72
unsigned
bit12:1;
73
unsigned
bit13:1;
74
unsigned
bit14:1;
75
unsigned
bit15:1;
76
}bit;
77
}
uint16_BitTypeDef
;
78
79
80
typedef
union
81
{
82
uint32_t all;
83
struct
84
{
85
unsigned
bit0:1;
unsigned
bit1:1;
unsigned
bit2:1;
unsigned
bit3:1;
86
unsigned
bit4:1;
unsigned
bit5:1;
unsigned
bit6:1;
unsigned
bit7:1;
87
unsigned
bit8:1;
unsigned
bit9:1;
unsigned
bit10:1;
unsigned
bit11:1;
88
unsigned
bit12:1;
unsigned
bit13:1;
unsigned
bit14:1;
unsigned
bit15:1;
89
unsigned
bit16:1;
unsigned
bit17:1;
unsigned
bit18:1;
unsigned
bit19:1;
90
unsigned
bit20:1;
unsigned
bit21:1;
unsigned
bit22:1;
unsigned
bit23:1;
91
unsigned
bit24:1;
unsigned
bit25:1;
unsigned
bit26:1;
unsigned
bit27:1;
92
unsigned
bit28:1;
unsigned
bit29:1;
unsigned
bit30:1;
unsigned
bit31:1;
93
}bit;
94
}
uint32_BitTypeDef
;
95
96
97
typedef
union
98
{
99
uint64_t all;
100
struct
101
{
102
unsigned
bit0:1;
unsigned
bit1:1;
unsigned
bit2:1;
unsigned
bit3:1;
103
unsigned
bit4:1;
unsigned
bit5:1;
unsigned
bit6:1;
unsigned
bit7:1;
104
unsigned
bit8:1;
unsigned
bit9:1;
unsigned
bit10:1;
unsigned
bit11:1;
105
unsigned
bit12:1;
unsigned
bit13:1;
unsigned
bit14:1;
unsigned
bit15:1;
106
unsigned
bit16:1;
unsigned
bit17:1;
unsigned
bit18:1;
unsigned
bit19:1;
107
unsigned
bit20:1;
unsigned
bit21:1;
unsigned
bit22:1;
unsigned
bit23:1;
108
unsigned
bit24:1;
unsigned
bit25:1;
unsigned
bit26:1;
unsigned
bit27:1;
109
unsigned
bit28:1;
unsigned
bit29:1;
unsigned
bit30:1;
unsigned
bit31:1;
110
unsigned
bit32:1;
unsigned
bit33:1;
unsigned
bit34:1;
unsigned
bit35:1;
111
unsigned
bit36:1;
unsigned
bit37:1;
unsigned
bit38:1;
unsigned
bit39:1;
112
unsigned
bit40:1;
unsigned
bit41:1;
unsigned
bit42:1;
unsigned
bit43:1;
113
unsigned
bit44:1;
unsigned
bit45:1;
unsigned
bit46:1;
unsigned
bit47:1;
114
unsigned
bit48:1;
unsigned
bit49:1;
unsigned
bit50:1;
unsigned
bit51:1;
115
unsigned
bit52:1;
unsigned
bit53:1;
unsigned
bit54:1;
unsigned
bit55:1;
116
unsigned
bit56:1;
unsigned
bit57:1;
unsigned
bit58:1;
unsigned
bit59:1;
117
unsigned
bit60:1;
unsigned
bit61:1;
unsigned
bit62:1;
unsigned
bit63:1;
118
}bit;
119
}
uint64_BitTypeDef
;
120
121
122
/**
123
* @brief Получить n-й бит из uint8_t
124
* @param _uint8_ Переменная типа uint8_t
125
* @param _bit_ Константный номер бита (0..7)
126
* @return Значение выбранного бита (0 или 1)
127
* @note Индекс бита должен быть известен на этапе компиляции!
128
*/
129
#define uint8_bit(_uint8_, _bit_) (*(uint8_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_
130
/**
131
* @brief Получить n-й бит из uint16_t
132
* @param _uint16_ Переменная типа uint16_t
133
* @param _bit_ Константный номер бита (0..15)
134
* @return Значение выбранного бита (0 или 1)
135
* @note Индекс бита должен быть известен на этапе компиляции!
136
*/
137
#define uint16_bit(_uint8_, _bit_) (*(uint16_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_
138
/**
139
* @brief Получить n-й бит из uint32_t
140
* @param _uint32_ Переменная типа uint32_t
141
* @param _bit_ Константный номер бита (0..31)
142
* @return Значение выбранного бита (0 или 1)
143
* @note Индекс бита должен быть известен на этапе компиляции!
144
*/
145
#define uint32_bit(_uint8_, _bit_) (*(uint32_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_
146
/**
147
* @brief Получить n-й бит из uint64_t
148
* @param _uint64_ Переменная типа uint64_t
149
* @param _bit_ Константный номер бита (0..63)
150
* @return Значение выбранного бита (0 или 1)
151
* @note Индекс бита должен быть известен на этапе компиляции!
152
*/
153
#define uint64_bit(_uint8_, _bit_) (*(uint64_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_
154
155
#endif
//__BIT_ACCESS_H_
156
157
/** BIT_ACCESS_DEFINES
158
* @}
159
*/
mylibs_defs.h
Заголочный файл для дефайнов библиотеки MyLibsGeneral.
uint16_BitTypeDef
Definition
bit_access.h:56
uint32_BitTypeDef
Definition
bit_access.h:81
uint64_BitTypeDef
Definition
bit_access.h:98
uint8_BitTypeDef
Definition
bit_access.h:40
MyLibsGeneral
Inc
bit_access.h
Generated by
1.14.0