编译时条件处理

[复制链接]
629|0
逢dududu必shu 发表于 2025-9-28 20:18 | 显示全部楼层 |阅读模式
针对不同平台特性采用条件编译:
c
运行
// 跨平台对齐解决方案
#ifdef STM32F103xx
// STM32允许非对齐,直接使用8位数组
uint8_t ws2812_buffer[WS2812_BUF_SIZE];
#define WS2812_BUF_ADDR (uint32_t)ws2812_buffer

#elif defined(GD32F130xx)
// GD32需要32位对齐,使用对齐数组
uint32_t ws2812_buffer[(WS2812_BUF_SIZE + 3) / 4];
#define WS2812_BUF_ADDR (uint32_t)ws2812_buffer
#define WS2812_BUF_8BIT ((uint8_t *)ws2812_buffer)

#elif defined(LPC1768)
// LPC系列使用特殊对齐属性
__attribute__((aligned(4))) uint8_t ws2812_buffer[WS2812_BUF_SIZE + 3];
#define WS2812_BUF_ADDR (uint32_t)ws2812_buffer
#endif

// 统一的数据填充接口
void ws2812_set_led(uint32_t index, uint8_t r, uint8_t g, uint8_t b) {
#ifdef GD32F130xx
    // 使用8位指针访问32位数组
    uint32_t pos = index * 3;
    WS2812_BUF_8BIT[pos] = g;    // WS2812通常是GRB顺序
    WS2812_BUF_8BIT[pos+1] = r;
    WS2812_BUF_8BIT[pos+2] = b;
#else
    // 其他平台的实现...
#endif
}
优势:针对不同平台优化,兼顾兼容性与效率缺点:增加了代码量,需要维护多平台适配代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

502

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部