如题,在一个数据解析函数中使用了*(float *)&data[offset]
,其中data为uint8类型指针,指向的value地址为
可以看到地址0x20013A31非对齐,最终在执行VLDR指令时导致跑飞
VLDR需要使用对齐访问
跑飞后查看SCB寄存器发现确实是非对齐访问导致跑飞,
有两种解决方式,一种是关闭浮点运算,如iar
或者强转时使用中间变量,如
u32temp = data[offset]; \
if(*(float *)&u32temp < ((min)-FOLOAT_PRECI)) \
{ \
data[0] = reg; \
ftemp = min; \
data[1] = *(uint32*)&ftemp; \
ftemp = max; \
data[2] = *(uint32*)&ftemp; \
return 0x81; \
} \