8736|3

4996

帖子

19

TA的资源

裸片初长成(初级)

楼主
 

LPC1700系列芯片内存注意问题 [复制链接]

在AMR芯片中内存空间是越来越大了,而我们的使用需求也是水涨船高。而不同ARM芯片的内存分配也是截然不同。例如同样是64K的STM32,只要你的数组定义在64K内就可以操作的,而64K的LPC芯片则不能定义64K的数组。这个问题恐怕困扰了不少网友。产生这一问题的主要原因是不同芯片内存架构是不一样的。下面我们主要探讨一下LPC1768的内存空间是使用情况。

 

下图是LPC1768的内部结构框图:

 

 

从上图我们可以看出LPC1768的64K SRAM被分为了3大块:1块是内部32K,另外两块16K是外挂在AHB总线上的。这样分配的原因是一块16K被分配给USB,一块16K被分配给以太网。所以,真正给用户的只要32K。然而,我们往往不使用USB或以太网,那么这32K内存空间既不是浪费了。

 

下面我们在看看,MDK对内存空间的定义:

 

 

有图我们可以看出,MDK中同样把内存空间分成了两大块,一块是默认的内部32K,一块是AHB总线上的32K。而默认只够选了前面的32K。使用如果我们没有使用USB或以太网也只能使用这32K SRAM。如果要想使用其他32K就必须勾选这部分空间。

 

但是需要注意一下问题:

 

1.单个数组的定义不能大于任何一块的最大空间,这是因为数组的存放是需要连续空间的,而这里的连续空间不会大于32K。

如:uint8 buf[30720];   // 32K,是可以定义的,但是绝对不能大于32K,否则报错。

 

2.单个文件理的数组定义不能大于任何一块的最大空间,这里需要注意,如果只是在一个文件里边定义,而没有初始化是可以的,如果在一个C文件的定义并初始化或使用了这些空间,那么这些空间也不能大于任意一块的最大空间,这应该编译器在分配内存时也是按照连续存放来分配同一个文件里的空间的。

 

如:uint8 buf[30720];   // 32K,是可以定义的,但是绝对不能大于32K,否则报错。

       uint8 buf1[20000]; // 20K,是可以的,但是绝对不能初始化,否则会包错

如果把它们分别放到不同的文件中定义,并初始化是没有问题的。

[ 本帖最后由 zhaojun_xf 于 2011-12-8 14:35 编辑 ]
此帖出自NXP MCU论坛

最新回复

你好,楼主,我们要是想用另外的32K内存,只需要勾上选项,并且确保单个数组不大于32K即可,是吗?  详情 回复 发表于 2011-12-9 10:12
点赞 关注(1)
个人签名我的博客
 

回复
举报

4996

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
此方法可以在其他LPC1000系列芯片中使用。需要注意本方法是在MDK4.22下验证的,对于其他版本没有试验
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
你好,楼主,我们要是想用另外的32K内存,只需要勾上选项,并且确保单个数组不大于32K即可,是吗?
此帖出自NXP MCU论坛
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

4
 
是的
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表