进行stm32 或者lpc开发时遇到HardFault错误。一般是数组越界访问或者堆栈溢出,今天遇到了个非对齐访问,源代码如下:
u32 *p;
....
p = (u32 *)&buf[xxx];
for (...; ...; ...)
{
*p++ = xxx;//=>进入HardFault
}
避免非对齐错误的方法使用关键字__packed,正确代码如下:
__pakced u32 *p;
....
p = (__pakced u32 *)&buf[xxx];
for (...; ...; ...)
{
*p++ = xxx;//=>不再出现
HardFault
}
当然,必须要知道的是非对齐数据访问会使程序效率降低。