硬汉嵌入式论坛

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

[STM32H7] 有关ITCM执行代码与MPU配置策略的提问

[复制链接]

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2025-5-13 16:48:26 | 显示全部楼层 |阅读模式
我使用CubeMX + Keil5 + AC6进行开发,正在学习V7用户手册(V3.5)。第28章关键代码在ITCM执行的方法提及,我们希望将需要实时性的程序和变量放在TCM中执行。对此有以下问题:

1. ITCM的空间有限(64KB),如何评估哪些代码属于时间/安全关键代码?
(1) 教程中将APP、BSP配置至ITCM区域(含stm32h7_it.c),而其中也包含许多初始化代码。个人习惯使用CubeMX,其生成的分组Application/User/Core是否也不必要置于ITCM?
(2) 程序中将大量调用HAL库函数,是否将其一并置于ITCM区域更为妥当?

2. 用户手册采用将Vector Table配置至DTCM的方法,如果想将其配置至ITCM:
(1) 除使用memcpy将FLASH_BANK1_BASE复制至D1_ITCMRAM_BASE,并配置SCB->VTOR外,还有其他需要注意的吗?
(2) 编程手册(PM0253 Rev5)的4.3节指出,SCB->VTOR的复位值为Unknown,那对于未调整Vector Table地址的程序,是由何文件配置该值为D1_ITCMRAM_BASE的?

3. 用户手册采用将工程分组的Code/Const分配至ITCM,但这依赖于工程的Target配置,需要勾选Use Memory Layout from Target Dialog。而这与第26章DTCM、SRAM使用方法中,由自定义的sct文件管理不兼容,应当如何解决呢?根据硬汉哥的stm32-v7.sct与坛友指导,目前已实现第26章功能,适配AC6的sct文件如下。

[C] 纯文本查看 复制代码
; **************************************************************
; *** Scatter-Loading Description File generated by Penguins ***
; **************************************************************

LR_IROM1 0x08000000 0x00200000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data - 128KB DTCM
   .ANY (+RW +ZI)
  }
  
  RW_IRAM2 0x24000000 0x00080000  {  ; RW data - 512KB AXI SRAM
   *(.bss.RAM_D1)
   *(.data.RAM_D1)
  }
  
  RW_IRAM3 0x30000000 0x00048000  {  ; RW data - 128KB SRAM1 + 128KB SRAM2 + 32KB SRAM3
   *(.bss.RAM_D2)
   *(.data.RAM_D2)
  }
  
  RW_IRAM4 0x38000000 0x00010000  {  ; RW data - 64KB SRAM4
   *(.bss.RAM_D3)
   *(.data.RAM_D3)
  }
}


4. 硬汉哥曾指出因TCM已与CPU紧密耦合,不应对其配置MPU,但应用笔记(AN4839 Rev2)的3.1节指出,含ITCM在内的0x00000000~0x1FFFFFFF段的Cache缺省策略为WT,含DTCM在内的0x20000000~0x3FFFFFFF段的Cache缺省策略为WBWA,是否意味其与CPU间同样经过Cache?

5. 我目前的主要应用包括UART、ADC、DAC,均使用DMA进行数据交换,已知通用DMA无法访问DTCM:
(1) 仅对ADC,是否推荐升级至MDMA,并继续将数据存于DTCM?若是,应如何解决数据一致性问题,是否遵循问题4不配置MPU;若否,MDMA还有何应用场景?
(2) 若继续使用通用DMA,并将数据存于SRAM,对UART低速外设、DAC赋全局常量仅输出不计算、ADC高速采样且需后续数据处理,分别推荐使用何种MPU策略?

回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2025-5-14 10:16:11 | 显示全部楼层
捞捞,有劳各位大神赐教
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-5-14 10:43:11 | 显示全部楼层
1 中断服务程序,中断向量表是典型的需要快去执行的。
2 配置中断向量表到其它地址要手动设置。并将向量表复制过去。程序上电刘配置好。
3 二选一。
4 tcm和cpu主屏一样,无需做任何配置即可。
5  mdma不支持adc
6 关闭这个地址cache
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 03:45 , Processed in 0.234316 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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