OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4891|回复: 4

H743 开启cache后,memcpy产生错误

[复制链接]

0

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2023-3-3
在线时间
3 小时
发表于 2023-3-3 14:07:21 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 cgyoung 于 2023-3-3 14:12 编辑

memcpy有时会产生错误,例如下图从names向ptr拷贝8个字节,"gender"变成了"geeder",总是第四个字符被它往后数第二个字符给覆盖,这里是e覆盖了n,如果拷贝123456,会得到123656 Snipaste_2023-03-03_13-59-05.png
这个和cache的配置有关吗?不开启cache的话没问题。或者和内存对齐有关?
cache配置:
  1. int mpu_init(void)
  2. {
  3.     MPU_Region_InitTypeDef MPU_InitStruct;

  4.     /* Disable the MPU */
  5.     HAL_MPU_Disable();

  6.     /* Configure the MPU attributes as WT for AXI SRAM */
  7.     MPU_InitStruct.Enable            = MPU_REGION_ENABLE;
  8.     MPU_InitStruct.BaseAddress       = 0x24000000;
  9.     MPU_InitStruct.Size              = MPU_REGION_SIZE_512KB;
  10.     MPU_InitStruct.AccessPermission  = MPU_REGION_FULL_ACCESS;
  11.     MPU_InitStruct.IsBufferable      = MPU_ACCESS_BUFFERABLE;
  12.     MPU_InitStruct.IsCacheable       = MPU_ACCESS_CACHEABLE;
  13.     MPU_InitStruct.IsShareable       = MPU_ACCESS_SHAREABLE;
  14.     MPU_InitStruct.Number            = MPU_REGION_NUMBER0;
  15.     MPU_InitStruct.TypeExtField      = MPU_TEX_LEVEL1;
  16.     MPU_InitStruct.SubRegionDisable  = 0X00;
  17.     MPU_InitStruct.DisableExec       = MPU_INSTRUCTION_ACCESS_ENABLE;

  18.     HAL_MPU_ConfigRegion(&MPU_InitStruct);

  19. #ifdef BSP_USING_SDRAM
  20.     /* Configure the MPU attributes as WT for SDRAM */
  21.     MPU_InitStruct.Enable            = MPU_REGION_ENABLE;
  22.     MPU_InitStruct.BaseAddress       = 0xC0000000;
  23.     MPU_InitStruct.Size              = MPU_REGION_SIZE_32MB;
  24.     MPU_InitStruct.AccessPermission  = MPU_REGION_FULL_ACCESS;
  25.     MPU_InitStruct.IsBufferable      = MPU_ACCESS_BUFFERABLE;
  26.     MPU_InitStruct.IsCacheable       = MPU_ACCESS_CACHEABLE;
  27.     MPU_InitStruct.IsShareable       = MPU_ACCESS_SHAREABLE;
  28.     MPU_InitStruct.Number            = MPU_REGION_NUMBER1;
  29.     MPU_InitStruct.TypeExtField      = MPU_TEX_LEVEL1;
  30.     MPU_InitStruct.SubRegionDisable  = 0x00;
  31.     MPU_InitStruct.DisableExec       = MPU_INSTRUCTION_ACCESS_ENABLE;

  32.     HAL_MPU_ConfigRegion(&MPU_InitStruct);
  33. #endif

  34.     /* Enable the MPU */
  35.     HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);

  36.     /* Enable CACHE */
  37.     SCB_EnableICache();
  38.     SCB_EnableDCache();
  39.    
  40.     return 0;

  41. }
复制代码




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

216

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5857
金钱
5857
注册时间
2016-12-19
在线时间
749 小时
发表于 2023-3-4 20:59:28 | 显示全部楼层
和cache有关系 ,经量保证cache写串
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2023-3-3
在线时间
3 小时
 楼主| 发表于 2023-3-6 09:31:17 | 显示全部楼层
你的蓝朋友 发表于 2023-3-4 20:59
和cache有关系 ,经量保证cache写串

cache写串?你的意思是配置成Wirte through?
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2023-3-6 09:45:47 | 显示全部楼层
没有了解过这个 帮顶一下
回复

使用道具 举报

10

主题

216

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5857
金钱
5857
注册时间
2016-12-19
在线时间
749 小时
发表于 2023-3-6 12:38:46 | 显示全部楼层
cgyoung 发表于 2023-3-6 09:31
cache写串?你的意思是配置成Wirte through?

嗯嗯,是的【字数问题】
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 17:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表