湘雪龙 发表于 2014-3-21 15:34:53

LPC1766的AHB SRAM如何作普通RAM使用

现在用LPC1766做项目,lwip就占用27K RAM,本地32K SRAM已基本用完,还有很多功能未加进来,请问如何将另外的32K AHB SRAM做为普通RAM使用?

menglogic 发表于 2014-3-21 16:56:21


简单的就是在 编译器里的“目标标工程配置”里勾上IRAM2 ,如图。

湘雪龙 发表于 2014-3-21 16:58:12

hameyou 发表于 2014-3-21 16:37
另外的32K AHB SRAM,是外挂的SRAM chip 吗?

内部的,不知道怎样做普通RAM使用

0x1000 0000- 0x1000 7FFF片上SRAM 本地SRAM-Bank0(32KB)

0x2007 C000- 0x2007 FFFF片上SRAM,通常用于存储外设数据AHB SRAM-Bank0(16KB)

0x2008 0000 - 0x2008 3FFF片上SRAM,通常用于存储外设数据AHB SRAM-Bank1(16KB)

湘雪龙 发表于 2014-3-21 16:59:10

menglogic 发表于 2014-3-21 16:56
简单的就是在 编译器里的“目标标工程配置”里勾上IRAM2 ,如图。

我用的IAR,如何操作?

lusson 发表于 2014-3-21 17:09:51

湘雪龙 发表于 2014-3-21 16:59
我用的IAR,如何操作?

参照icf加入内部RAM段定义就好了。

Excellence 发表于 2014-3-21 17:14:25

KEIL是编译器打钩,定义变量时,
变量要指定地址。

湘雪龙 发表于 2014-3-21 17:18:22

lusson 发表于 2014-3-21 17:09
参照icf加入内部RAM段定义就好了。

能说一下具体怎么定义吗?谢谢

湘雪龙 发表于 2014-3-21 17:23:27

Excellence 发表于 2014-3-21 17:14
KEIL是编译器打钩,定义变量时,
变量要指定地址。

如何指定地址?加什么样的关键字来指定呢?

Excellence 发表于 2014-3-21 17:27:23

uint32                 SystemRamTest __attribute__((at(0x2007C100)));
uint32                 WakeupRamTest __attribute__((at(0x2007C104)));

试试。。。

Excellence 发表于 2014-3-21 17:28:30

if ((SystemRamTest == 0x5555aaaa) &&(WakeupRamTest==0xa5a5a5a5))

Excellence 发表于 2014-3-21 17:29:03

我用的,监控开机状态。
你试试吧。

lusson 发表于 2014-3-21 17:32:34

湘雪龙 发表于 2014-3-21 17:18
能说一下具体怎么定义吗?谢谢

icf其实就是定义不同段的地址,然后再定义把哪些数据放到哪些段中,比如你图中的region_RAM_...
对应的就是你现在用的RAM,下面依次定义了起始地址和结束地址
最后再有把哪个段放到这个RAM中:place in....

你参照这个再定义一个region_RAM1....
再设置哪些放到这里就可以了。

你可以参考我这个STM32F4的CCRAM的用法:
http://www.amobbs.com/thread-5570707-1-1.html

湘雪龙 发表于 2014-3-21 17:38:41

Excellence 发表于 2014-3-21 17:27
uint32                 SystemRamTest __attribute__((at(0x2007C100)));
uint32                 WakeupRamTest __attribute__((at(0x2 ...

编译报错
Error: expected a ";"

jxcylxh 发表于 2014-3-23 21:45:47

分散加载就可以了。

湘雪龙 发表于 2014-3-24 10:46:39

参考了lusson在13楼提供的方法在变量前加入#pragma location = ".sram"就可以了,谢谢各位

笑笑我笑了 发表于 2014-3-24 11:00:46

Excellence 发表于 2014-3-21 17:27
uint32                 SystemRamTest __attribute__((at(0x2007C100)));
uint32                 WakeupRamTest __attribute__((at(0x2 ...

__attribute__是GCC的关键字吧。觉得GCC实现这个问题要修改ldscript。

Excellence 发表于 2014-3-24 11:19:11

在KEIL MDK 中加--GNU就可以了。

cdtlzhou 发表于 2014-3-26 16:11:14

mark下!

size327948964 发表于 2014-3-26 16:20:59

IAR中更简单的方法
define region RAM_region   = mem:
                                       | mem:; 直接或RAM的范围。
页: [1]
查看完整版本: LPC1766的AHB SRAM如何作普通RAM使用