硬汉嵌入式论坛

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

[STM32H7] [STM32H7] 程序在ITCM中为什么还没有在外部FLASH快?如何正确使用ITCM_RAM?

[复制链接]

2

主题

9

回帖

15

积分

新手上路

积分
15
发表于 2024-12-3 11:57:14 | 显示全部楼层 |阅读模式
本帖最后由 lorelia 于 2024-12-3 12:02 编辑

目前在做高速数据采集有关的项目,通过DMA方式接收数据并执行相应的中断处理。为了提升代码运行效率,想到将中断服务程序放置到ITCM_RAM中。
代码是通过STM32CubeIDE生成和调试的,在网上参考了各种文档后,我修改STM32H743IITX_FLASH.ld文件来指定ITCM_RAM区,将在中断服务程序里要调用的函数指定到ITCM_RAM对应地址,并在startup_stm32h743iitx.s文件里实现了代码从flash拷贝到RAM的操作。通过.map文件确认,我已经将该函数放到了ITCM_RAM中。
但是在代码运行时,通过示波器查看调试波形,实际处理速度比修改之前还要慢,同时,这样修改后的程序会触发开门狗启动复位,无法正常运行下去。debug模式下调试,中断调用的函数运行正常, 但在数据接收满时通过xEventGroupSetBitsFromISR传递事件消息,接收消息的线程收不到消息。
特提出几个疑问:
1.硬汉的链接里提到ITCM_RAM不能用于DMA,我的理解是DMA收发使用的RAM不能分配在DTCM_RAM上,那DMA中断服务程序里调用的函数放入ITCM_RAM中是可行的吗?
2.放入ITCM_RAM的函数有什么应用限制吗?支持xEventGroupSetBitsFromISR这种传递消息的事件吗?
3.要提高运行效率,是否需要将所有要调用的函数都放入ITCM_RAM?
4.使用ITCM_RAM在MPU配置时是不是需要做相应配置调整呢?

请各位大虾不吝赐教



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115488
QQ
发表于 2024-12-4 09:14:53 | 显示全部楼层
MPU不用配置,需要将所有函数放在ITCM里面才可以,注意子函数,子函数的子函数,所有的一切代码都要逐一放在ITCM里面才可以。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-28 16:35 , Processed in 0.266139 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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