将4个8位的数转成float型,进到HardFault_Handler?

2019-07-20 20:16发布

uint8_t buf[6]={0x00,0x00,0x00,0x00,0x00,0x00};float aa;
float bb;
aa = * (float *) buf;
bb = * (float*)(buf+2);  //就是这句进入到HardFault_Handler,不知为什么,求解释。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
yyx112358
1楼-- · 2019-07-21 01:48
可能是因为访问未对齐。buf[]应当是4字节对齐的,在buf+2上进行4字节(float)访问就成了不对齐访问。
你试试bb = * (float*)(buf+4);  看看还有问题没
qianyuyu
2楼-- · 2019-07-21 06:27
 精彩回答 2  元偷偷看……
qianyuyu
3楼-- · 2019-07-21 06:46
yyx112358 发表于 2016-9-6 21:06
可能是因为访问未对齐。buf[]应当是4字节对齐的,在buf+2上进行4字节(float)访问就成了不对齐访问。
你 ...

大哥,还真可能是你说的这个,因为刚开始buf的地址是0x20007AFF。这时我如果
bb = *(float *) (buf+4); 有问题,但如果我改成bb = *(float *) (buf+5); 就没有问题啦。 谢谢大哥。
yyx112358
4楼-- · 2019-07-21 11:48
 精彩回答 2  元偷偷看……

一周热门 更多>