通用宏
2026/4/26大约 2 分钟宏定义通用工具
通用宏
📚 本节导读
用途: 内核常用工具宏
来源: kernel/include/os_stddef.h:125
一、布尔值
| 宏 | 值 | 说明 |
|---|---|---|
OS_TRUE | 1 | 真 |
OS_FALSE | 0 | 假 |
二、空指针
| 宏 | 说明 |
|---|---|
OS_NULL | 空指针(C++ 中为 0,C 中为 (void *)0) |
三、对齐操作
3.1 OS_ALIGN_UP
#define OS_ALIGN_UP(size, align) (((size) + (align)-1) & ~((align)-1))说明: 返回向上对齐后的大小
示例:
OS_ALIGN_UP(13, 4); // 返回 16
OS_ALIGN_UP(17, 8); // 返回 243.2 OS_ALIGN_DOWN
#define OS_ALIGN_DOWN(size, align) ((size) & ~((align)-1))说明: 返回向下对齐后的大小
示例:
OS_ALIGN_DOWN(13, 4); // 返回 12
OS_ALIGN_DOWN(17, 8); // 返回 16四、位操作
4.1 OS_BIT_SET
#define OS_BIT_SET(value, bit) ((value) |= (1 << (bit)))说明: 设置指定位
4.2 OS_BIT_CLR
#define OS_BIT_CLR(value, bit) ((value) &= ~(1 << (bit)))说明: 清除指定位
4.3 OS_BIT_GET
#define OS_BIT_GET(value, bit) (((value) & (1 << (bit))) >> (bit))说明: 获取指定位的值
示例:
uint32_t val = 0;
OS_BIT_SET(val, 3); // val = 0b1000
OS_BIT_GET(val, 3); // 返回 1
OS_BIT_CLR(val, 3); // val = 0五、容器操作
5.1 os_container_of
#define os_container_of(ptr, type, member) ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))说明: 从结构体成员指针获取包含它的结构体指针
参数:
ptr: 成员指针type: 结构体类型member: 成员名称
示例:
typedef struct {
int a;
int b;
} my_struct_t;
my_struct_t s;
int *p = &s.b;
my_struct_t *sp = os_container_of(p, my_struct_t, b); // sp == &s5.2 os_offsetof
#define os_offsetof(type, member) ((os_size_t) & ((type *)0)->member)说明: 获取结构体成员相对于结构体起始位置的偏移量
六、等待时间
| 宏 | 说明 |
|---|---|
OS_WAIT_FOREVER | 永久等待(等于 OS_TICK_MAX) |
OS_NO_WAIT | 不等待(立即返回) |
七、数组操作
7.1 OS_ARRAY_SIZE
#define OS_ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))说明: 获取数组元素个数
示例:
int arr[10];
OS_ARRAY_SIZE(arr); // 返回 10八、其他
8.1 OS_UNREFERENCE
#define OS_UNREFERENCE(x) ((void)(x))说明: 避免未使用变量的编译器警告
示例:
void func(int arg)
{
OS_UNREFERENCE(arg); // 告诉编译器 arg 是有意未使用的
}