硬汉嵌入式论坛

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

[RT1050] 【原创】成功将程序放在ITCM运行,中断向量表和所有变量放在DTCM,方法很简单,不过基于H7,需要的拿去用RT1052

  [复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2018-4-14 17:17:17 | 显示全部楼层 |阅读模式
    昨天有网友问了这个问题,今天就花了点时间研究了下,现在将其分享出来。实现方法比较简单,基于MDK的Option选项设置下即可,无需操作分散加载。使用分散加载的好处是灵活,在设置复杂工程的内存映射方面比较方便。

    实现这个功能的关键是要把所有程序都下载到Flash,系统上电后让MDK中的库函数去将所需的程序加载到RAM里面,用户不要自己去加载,太麻烦。如果用户自己去加载就得搞个bootloader加载应用程序到ITCM。这里所说的库函数是MDK里面的__main封装起来了。

知识点普及:
    TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理,以RT1052带的OCRAM为例,速度只有133MHz。很多时候我们希望将需要实时性的程序和变量分别放在ITCM和DTCM里面执行。本帖就是解决这个问题。

例程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86207


1、添加ITCM空间
1.png

2、设置DTCM空间,前0x400大小的空间用于中断向量表,所以这里从0x20000400开始
QQ截图20180414170448.png

3、右击所有MDK分组,选择使用ITCM,而进入main函数之前的所有代码,含main函数所在的文件main.c切不要设置,这个之前的代码我们都需要在flash里面执行。这些代码仅执行一次以后不会执行,所以不用管他们,之后的所有代码全部放在ITCM里面。
QQ截图20180414171814.png

特别注意,直接右击分组选择设置
QQ截图20180414172010.png


4、前面三步设置完毕后,将中断向量表从flash中复制到DTCM,主要存储的DTCM地址要0x200对齐。
QQ截图20180414171404.png



通过上面四步就完成了此功能,是不是超级简单。


如果查看程序是否在ITCM里面执行,直接看MDK生成的MAP文件即可


QQ截图20180414173710.png



回复

使用道具 举报

18

主题

261

回帖

315

积分

高级会员

积分
315
发表于 2018-4-14 17:30:23 | 显示全部楼层
简单便捷
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
 楼主| 发表于 2018-4-14 17:39:49 | 显示全部楼层
如果查看程序是否在ITCM里面执行,直接看MDK生成的MAP文件即可


QQ截图20180414173710.png
回复

使用道具 举报

57

主题

908

回帖

1079

积分

至尊会员

积分
1079
发表于 2018-4-14 18:22:55 | 显示全部楼层
支持硬汉科普! F7行不行?  就等你们的H7了。。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
 楼主| 发表于 2018-4-14 18:25:26 | 显示全部楼层
roguebear 发表于 2018-4-14 18:22
支持硬汉科普! F7行不行?  就等你们的H7了。。

F7有TCM的话,也可以的。
回复

使用道具 举报

5

主题

189

回帖

204

积分

高级会员

积分
204
发表于 2018-4-14 22:51:36 | 显示全部楼层
安富莱 IMX RT会出偏工业控制的开发板么
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
 楼主| 发表于 2018-4-15 02:20:13 | 显示全部楼层
soga238 发表于 2018-4-14 22:51
安富莱 IMX RT会出偏工业控制的开发板么

后面有合适的项目了试试,先实战演练下
回复

使用道具 举报

32

主题

297

回帖

393

积分

高级会员

积分
393
发表于 2018-4-16 09:23:06 | 显示全部楼层
多谢硬汉,F4上外扩SRAM也是这么用的
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
QQ
发表于 2018-6-15 14:21:00 | 显示全部楼层
学习到了
回复

使用道具 举报

0

主题

22

回帖

188

积分

初级会员

积分
188
发表于 2018-6-18 00:12:50 | 显示全部楼层
学习了, 等下弄个程序对比下到底能快多少.
回复

使用道具 举报

2

主题

23

回帖

29

积分

新手上路

积分
29
发表于 2018-9-18 16:48:12 | 显示全部楼层
学习了,谢谢
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2024-10-18 15:13:26 | 显示全部楼层
你好就是想请教个问题,就是我们现在用stm32H7系列的,然后我们将程序通过QSPI下载到外部flash中,但是下载外部flash和内部flash中程序运行之后有点不一样,就是定时器进入中断次数在一段时间进入不一样,就是不稳想通过分散加载,修改这个link.lds来将这个中断这部分代码放到内部RAM中运行,该怎么样实现
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
 楼主| 发表于 2024-10-25 09:41:39 | 显示全部楼层
zxx123 发表于 2024-10-18 15:13
你好就是想请教个问题,就是我们现在用stm32H7系列的,然后我们将程序通过QSPI下载到外部flash中,但是下载 ...

H7的有专门做过一个放到ITCM RAM的方案。

【STM32H743实验例程】实验11:程序在ITCM执行,中断向量表和所有变量全部放在DTCM,方法很简单--原创
https://www.armbbs.cn/forum.php? ... 6207&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 13:41 , Processed in 0.423138 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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