硬汉嵌入式论坛

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

[RT1060] RT1062 如何搬移程序到SDRAM运行

[复制链接]

2

主题

9

回帖

15

积分

新手上路

积分
15
发表于 2019-5-5 18:00:22 | 显示全部楼层 |阅读模式
软件用的是IAR8.3。 目前我在使用RT1062,打算将所有程序搬移到SDRAM运行,目前已经使用DCD来对SDRAM进行了初始化,上电后就可以直接使用SDRAM了,目前的想法是通过通过修改IAR的ICF文件,将所有的代码在上电的时候搬移到外部的SDRAM运行,目前这个功能其实已经实现,但是出现一个问题,发现RW段(也就是有初值的全局变量)也会被分配到外部SDRAM去,我不知道如何将他们拆分开。应该怎么去修改ICF文件,简单的说就是我的程序想全部加载到SDRAM跑,所有变量放在内部的RAM区域。https://www.eefocus.com/constyu/blog/19-01/435767_5f1b0.htmlhttps://www.eefocus.com/constyu/blog/19-01/435768_ffdbe.html我查看过这个FAE的帖子,他将程序放在了ITCM,然后RW段的变量也跟着去了,不知道是不是我的想法是不能实现的。万分感谢大佬能帮我解惑或者指点一下。

MIMXRT1062xxxxx_flexspi_nor.icf

5.51 KB, 下载次数: 26

这是我的ICF文件

回复

使用道具 举报

4

主题

140

回帖

152

积分

初级会员

积分
152
发表于 2019-5-5 18:05:00 | 显示全部楼层
手动指定data段和bss段呀,place at一个CORAM的地址就行
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2019-5-5 18:23:25 | 显示全部楼层
zl1215 发表于 2019-5-5 18:05
手动指定data段和bss段呀,place at一个CORAM的地址就行

感谢回复。大佬能不能稍微详细点,因为我对ICF文件不是特别熟悉,真是麻烦您了,谢谢了
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2019-5-5 18:38:49 | 显示全部楼层
zl1215 发表于 2019-5-5 18:05
手动指定data段和bss段呀,place at一个CORAM的地址就行

大佬的意思是  在定义变量的时候手动指定?但是我就是想实现自动就放到DTCM,用户啥也不用管。
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2019-5-5 18:59:47 | 显示全部楼层
https://blog.csdn.net/leumber/article/details/53257072通过使用这个法子,我测试仅仅指定拷贝某一个输出文件,然后指定放到SDRAM去,这样可以实现程序在SDRAM,变量都在DTCM,但是与我想要的功能是否有点不一致。比如我想很简单的把所有的程序都放到SDRAM去,然后我place in TEXT_region   { readonly };加载程序,place in RAM_TEXT_region  { readonly }程序放到SDRAM去,这样是没法实现的。要报错Error[Lc037]: ambiguous section match: "ro data section .data_init in main.o" matches more than one pattern
回复

使用道具 举报

4

主题

140

回帖

152

积分

初级会员

积分
152
发表于 2019-5-6 08:57:04 | 显示全部楼层
凡人 发表于 2019-5-5 18:38
大佬的意思是  在定义变量的时候手动指定?但是我就是想实现自动就放到DTCM,用户啥也不用管。

如果是拷贝函数,就需要将textrw段定义到SDRAM,如果是要将变量拷贝,就在icf中把readwrite定义到DTCM就行。
回复

使用道具 举报

4

主题

140

回帖

152

积分

初级会员

积分
152
发表于 2019-5-6 08:58:47 | 显示全部楼层
凡人 发表于 2019-5-5 18:59
https://blog.csdn.net/leumber/article/details/53257072通过使用这个法子,我测试仅仅指定拷贝某一个输出 ...

你这样place两次肯定不行啊,如果要把所有程序都自动拷贝,要么函数前面加__ramfunc,要么用location把函数定义到某个固定段,上电自动拷贝,要么把所有.o文件都连接到SDRAM,推荐第一种
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2019-5-6 11:33:32 | 显示全部楼层
zl1215 发表于 2019-5-6 08:58
你这样place两次肯定不行啊,如果要把所有程序都自动拷贝,要么函数前面加__ramfunc,要么用location把函 ...

大佬您说的法子我都知道,也测试了。不过我是想能实现将全部搬移到SDRAM跑,又不用每次都指定section,或者使用ramfunc
回复

使用道具 举报

4

主题

140

回帖

152

积分

初级会员

积分
152
发表于 2019-5-6 13:58:23 | 显示全部楼层
凡人 发表于 2019-5-6 11:33
大佬您说的法子我都知道,也测试了。不过我是想能实现将全部搬移到SDRAM跑,又不用每次都指定section,或 ...

那只能全部.o放到RAM了
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2019-5-6 16:19:31 | 显示全部楼层
我问了NXP内部的一个高手,对于IAR的话,是没有办法的实现我想要的功能的,如果非要实现那么只有自己手动拷贝了。
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2019-5-6 16:19:55 | 显示全部楼层
我这个想法在MDK下其实是很容易实现的
回复

使用道具 举报

4

主题

140

回帖

152

积分

初级会员

积分
152
发表于 2019-5-6 16:41:31 | 显示全部楼层
凡人 发表于 2019-5-6 16:19
我这个想法在MDK下其实是很容易实现的

不管是IAR还是keil,机理肯定是一样的,把某些.c文件直接定义到RAM,由库函数自动完成拷贝
回复

使用道具 举报

11

主题

31

回帖

64

积分

初级会员

积分
64
发表于 2019-7-3 11:45:30 | 显示全部楼层
自己定义分散加载文件呗
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 22:04 , Processed in 0.195654 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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