编译时验证
c
运行
// 静态断言检查对齐(C11及以上)
#include <assert.h>
static_assert(((uint32_t)&ws2812_buffer % 4) == 0, "Buffer not 32-bit aligned!");
运行时检查
c
运行
// 启动时检查并报告对齐状态
void check_alignment() {
uint32_t addr = (uint32_t)ws2812_buffer;
if((addr % 4) != 0) {
// 记录错误日志或触发调试中断
printf("DMA buffer misaligned! Address: 0x%08X\n", addr);
#ifdef DEBUG
while(1); // 调试模式下停在这里
#endif
}
}
硬件级验证
使用逻辑分析仪捕捉首帧数据,对比发送数据与预期值
检查 DMA 控制器状态寄存器,确认是否有对齐错误标志
对于 STM32,可观察 DMA_SxCR 寄存器的 PINC 和 MINC 位配置
|
|