Last active
June 13, 2022 16:51
-
-
Save hans-jorg/8732831120aef23063fc to your computer and use it in GitHub Desktop.
Bit manipulation macros
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #ifndef BITMANIP_H | |
| #define BITMANIP_H | |
| /** | |
| * @brief Macros for bit and bitfields manipulation | |
| */ | |
| ///@{ | |
| // Bit macro (LSB=0) | |
| #define BIT(N) (1UL<<(N)) | |
| // Bit manipulation using masks | |
| #define BITSET(V,M) (V)|=(M) | |
| #define BITCLEAR(V,M) (V)&=~(M) | |
| #define BITTOGGLE(V,M) (V)^=(M) | |
| // Bit manipulation using indexes | |
| #define BITSETN(V,N) (V)|=BIT(N) | |
| #define BITCLEARN(V,N) (V)&=~BIT(N) | |
| #define BITTOGGLEN(V,N) (V)^=BIT(N) | |
| // Bit fields | |
| #define BITVALUE(V,N) ((V)<<(N)) | |
| #define BITMASK(M,N) ((BIT((M)-(N)+1)-1)<<(N)) | |
| // Bit fields using masks | |
| #define BITFIELDGET(VAR,MASK) ((VAR)&(MASK)) | |
| #define BITFIELDSET(VAR,MASK,VAL) (VAR) = ((VAR)&~(MASK))|(VAL) | |
| // Bit fields using indexes (M > N) | |
| #define BITFIELDMNSET(VAR,M,N,VAL) (VAR)=((VAR)&~(BITMASK((M),(N)))|BITVALUE((VAL),(N))) | |
| #define BITFIELDMNGET(VAR,M,N) ((VAR)&(BITMASK((M),(N)))>>(N)) | |
| //@} | |
| /** | |
| * @brief Symbols for bits | |
| */ | |
| ///@{ | |
| #define BIT0 1UL | |
| #define BIT1 2UL | |
| #define BIT2 4UL | |
| #define BIT3 8UL | |
| #define BIT4 16UL | |
| #define BIT5 32UL | |
| #define BIT6 64UL | |
| #define BIT7 128UL | |
| #define BIT8 256UL | |
| #define BIT9 512UL | |
| #define BIT10 1024UL | |
| #define BIT11 2048UL | |
| #define BIT12 4096UL | |
| #define BIT13 8192UL | |
| #define BIT14 16384UL | |
| #define BIT15 32768UL | |
| #define BIT16 65536UL | |
| #define BIT17 131072UL | |
| #define BIT18 262144UL | |
| #define BIT19 524288UL | |
| #define BIT20 1048576UL | |
| #define BIT21 2097152UL | |
| #define BIT22 4194304UL | |
| #define BIT23 8388608UL | |
| #define BIT24 16777216UL | |
| #define BIT25 33554432UL | |
| #define BIT26 67108864UL | |
| #define BIT27 134217728UL | |
| #define BIT28 268435456UL | |
| #define BIT29 536870912UL | |
| #define BIT30 1073741824UL | |
| #define BIT31 2147483648UL | |
| #endif // BITMANIP_H |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment