新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2023-3-3
- 在线时间
- 3 小时
|
2金钱
本帖最后由 cgyoung 于 2023-3-3 14:12 编辑
memcpy有时会产生错误,例如下图从names向ptr拷贝8个字节,"gender"变成了"geeder",总是第四个字符被它往后数第二个字符给覆盖,这里是e覆盖了n,如果拷贝123456,会得到123656
这个和cache的配置有关吗?不开启cache的话没问题。或者和内存对齐有关?
cache配置:
- int mpu_init(void)
- {
- MPU_Region_InitTypeDef MPU_InitStruct;
- /* Disable the MPU */
- HAL_MPU_Disable();
- /* Configure the MPU attributes as WT for AXI SRAM */
- MPU_InitStruct.Enable = MPU_REGION_ENABLE;
- MPU_InitStruct.BaseAddress = 0x24000000;
- MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
- MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
- MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
- MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
- MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
- MPU_InitStruct.Number = MPU_REGION_NUMBER0;
- MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
- MPU_InitStruct.SubRegionDisable = 0X00;
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
- #ifdef BSP_USING_SDRAM
- /* Configure the MPU attributes as WT for SDRAM */
- MPU_InitStruct.Enable = MPU_REGION_ENABLE;
- MPU_InitStruct.BaseAddress = 0xC0000000;
- MPU_InitStruct.Size = MPU_REGION_SIZE_32MB;
- MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
- MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
- MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
- MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
- MPU_InitStruct.Number = MPU_REGION_NUMBER1;
- MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
- MPU_InitStruct.SubRegionDisable = 0x00;
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
- #endif
- /* Enable the MPU */
- HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
- /* Enable CACHE */
- SCB_EnableICache();
- SCB_EnableDCache();
-
- return 0;
- }
复制代码
|
|