|
CPU是STM32H723,cubeide version 1.14.0,gcc工具链为10.3
前提条件:外挂PSram在OSPI2,地址0x70000000,MPU已经把这个区设置为device,避免cache影响
两个缓冲区的地址:
uint8_t * p = 0x24000702;
uint8_t * pCmd_gs = 0x70000000;
对比了几种情况:
情况1:debug模式,gcc优化选项为O0
memcpy(p, pCmd_gs+3, 8); // =》可以正常工作
p += 8;
情况2:debug模式,gcc优化选项为Og
memcpy(p, pCmd_gs+3, 8); // =》 进入HardFault
p += 8;
情况3:debug模式,gcc优化选项为Og
uint8_t *pgs = pCmd_gs + 3;
for(int i=0;i<8;i++)
{
*p++ = *pgs++; // =》可以正常工作
}
情况4:debug模式,gcc优化选项为Og
*p++ = pCmd_gs[3];
memcpy(p, pCmd_gs+4, 7); // =》可以正常工作
p += 7;
总结下来,好像是开优化后(无论Oz,Os,O1-3,Og,只要不是O0),用memcpy的时候pCmd_gs需要4字节对齐。
照理说memcpy不应该有这种限制,不知道是什么问题导致了这种情况。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|