STM32G4芯片 u64类型指针非对齐访问时报错
先看以下我简化的触发问题的代码
uint64_t u64_data = 0;
uint32_t u32_data = 0;
uint8_t array_test[32];
void pointer_test(void)
{
uint64_t *pu64 = (uint64_t *)(&array_test[0]);
uint32_t *pu32 = (uint32_t *)(&array_test[0]);
uint8_t i = 0;
for(i = 0;i < 16;i++)
{
array_test[i] = i;
pu32 = (uint32_t *)(&array_test[i]);
u32_data = *pu32;
}
for(i = 0;i < 16;i++)
{
array_test[i] = i;
pu64 = (uint64_t *)(&data_buff[i]);
u64_data = (*pu64);
}
}
目前的情况是,我经过网上搜索,已经了解了与对齐相关的知识点,并且对于M4内核来说是支持非对齐访问,所以在代码u32_data = *pu32;处,不管i为几,都能正常从该地址处连续读出4个字节的数据并赋值给u32_data,这里如果是不支持非对齐访问的话,我理解的应该会报错。但是当我使用u64类型进行同样的操作时,发现在i为0时,能正常读出8个字节数据,但是当i为1时,会进入HardFault_Handler,并且查看Fault Reports时,发现报了UNALIGNED,应该是触发了非对齐访问报错。我的疑问就是为什么使用U64类型的时候,无法进行非对齐访问?与使用U32类型进行操作时,区别在哪?