Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2020-12-24T14:42:31+08:00
====== 宏 ======
创建日期 星期四 24 十二月 2020
#define U16_MAX_VALUE 0xFFFF
=>十六进制表示16位机器最大内存地址
#define U32_MAX_VALUE 0xFFFFFFFF
十六进制表示32位机器最大内存地址
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a)))
=>计算数组a中有多少个元素
#define ALIGN_SIZE(x, size) (((x)+(size)-1)&~((size)-1))
=>获取一个最小且足够大的内存空间
#define IS_GROUP32_BIT_ONE(BIT_MAP, x) (((((uint32_t*)BIT_MAP)[(x)>>5]) >> ((x)&0x1F)) & (0x1))
=>判断数值BIT_MAP的bit位上第x位(起始位0)是0还是1,它是1则宏的结果是1,否则宏的结果是0。
=>如BIT_MAP = 1073741826(230+21), 当x = 30或x = 1,则宏的结果是1,否则宏的结果是0。
#define SET_GROUP32_BIT(BIT_MAP, x) ((((uint32_t*)BIT_MAP)[(x)>>5]) |= (1ul<< ((x)&0x1F)))
=>将数值BIT_MAP的bit位上第x位(起始位0, x < 32)上置1(原是0或1)。
=>如BIT_MAP = 2(2^1),x =30,经过宏运算后,BIT_MAP = 1073741826(230+21),IS_GROUP32_BIT_ONE(BIT_MAP, x)的结果是1,RESET_GROUP32_BIT(BIT_MAP, x)后,BIT_MAP = 2(2^1),IS_GROUP32_BIT_ONE(BIT_MAP, x)的结果0。
=>当BIT_MAP = 0,x = 40,经过宏运算后,BIT_MAP = 0,但IS_GROUP32_BIT_ONE(BIT_MAP, x)的结果是1,RESET_GROUP32_BIT(BIT_MAP, x)后,IS_GROUP32_BIT_ONE(BIT_MAP, x)的结果是0。
#define RESET_GROUP32_BIT(BIT_MAP, x) ((((uint32_t*)BIT_MAP)[(x)>>5]) &=(~ (1ul<< ((x)&0x1F))))
=>将数值BIT_MAP的bit位上第x位(起始位0)上置0(原是0或1)。
#define GROUP_BIT_SET(bit) (1ul<<(bit))
=>2的bit倍
#define GROUP_BIT_DEFAULT ((1<<group_state_max)-1)
=>…|00011111
#define GROUP_BIT_NO_IGOFF ((1<<GeneralMode) | (1<<MapMode) | (1<<SelfCheck))
=>…|00011100
#define GROUP_BIT_ONLY_IGOFF (1<<IGNOffMode)
=>…|00000010
#define GROUP_BIT_NO_SEIF ((1<<GeneralMode) | (1<<MapMode))
=>…|00011000
#define GROUP_BIT_ON_OFF ((1<<GeneralMode) | (1<<MapMode) | (1<<SelfCheck) | (1<<IGNOffMode))
=>…|00011110