硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1463|回复: 9
收起左侧

[SRAM] 部分函数在ram中执行

[复制链接]

3

主题

11

回帖

20

积分

新手上路

积分
20
发表于 2022-1-14 12:44:33 | 显示全部楼层 |阅读模式
请教一下,为什么要把中断向量也搬移到内存中去?中断向量还放在flash中,关键函数放在ram中,可以正常运行程序吗?
回复

使用道具 举报

28

主题

130

回帖

214

积分

高级会员

积分
214
发表于 2022-1-14 14:53:37 | 显示全部楼层
因为中断服务函数在flash中,所以中断向量地址就应该是在flash,关键函数又不是中断函数放在ram中可以运行。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-1-14 15:53:12 | 显示全部楼层
中断向量表里面仅仅是记录了中断服务程序的入坑地址。
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2022-1-14 16:03:33 | 显示全部楼层
明白了。我测试了一下,是可以的。
在请教一下,程序放到axi sram执行不了,放到dtcm是可以运行的,
在axi sram中执行程序,有啥要设置的地方吗?
LR_IROM1 0x08020000 0x001E0000  {    ; load region size_region
  ER_IROM1 0x08020000 0x001E0000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  ; RW data - 128KB DTCM
  RW_IRAM1 0x20000000 0x00020000  {  
   .ANY (+RW +ZI)
  }
  ; RW data - 512KB AXI SRAM  
  RW_IRAM2 0x24000000 0x00080000  {
   *.o(RAMCODE)
   *(.RAM_D1)   
  }  
  ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)
  RW_IRAM3 0x30000000 0x00048000  {   
   *(.RAM_D2)  
  }  
  ; RW data - 64KB SRAM4(0x38000000)
  RW_IRAM4 0x38000000 0x00010000  {   
   *(.RAM_D3)  
  }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-1-14 18:34:45 | 显示全部楼层
suchangqing 发表于 2022-1-14 16:03
明白了。我测试了一下,是可以的。
在请教一下,程序放到axi sram执行不了,放到dtcm是可以运行的,
在ax ...

这种情况的话,多试试。
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2022-1-14 21:41:48 | 显示全部楼层
MPU的配置如下,这个有影响吗?       
/* 配置AXI SRAM的MPU属性为Write through, Read allocate,no Write allocate */
        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_NOT_BUFFERABLE;
        MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;
        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_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);
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-1-15 09:05:12 | 显示全部楼层
suchangqing 发表于 2022-1-14 21:41
MPU的配置如下,这个有影响吗?        
/* 配置AXI SRAM的MPU属性为Write through, Read allocate,no Write all ...

可以的。
MPU_TEX_LEVEL1设置为 MPU_TEX_LEVEL0
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2022-1-15 16:08:33 | 显示全部楼层
eric2013 发表于 2022-1-15 09:05
可以的。
MPU_TEX_LEVEL1设置为 MPU_TEX_LEVEL0

大佬,有没有可以在axi sram中运行函数,测试通过的例程啊?
发一个来参考一下看看,哪里有问题。
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2022-1-15 16:39:12 | 显示全部楼层
增加了ITCM,把测试函数放在这里面运行,也运行不了。晕~~~

; RW data -  64KB ITCM
  RW_IRAM0 0x00000000 0x00010000  {
   *(.RAM_ITCM)
   *.o(RAMCODE)
  }
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2022-1-15 16:59:49 | 显示全部楼层
调试的时候发现,执行这个函数的跳转时,会出现故障卡死!
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 06:39 , Processed in 0.286239 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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