LPC1700系列芯片内存注意问题
2016-02-02 23:08
776 查看
原文链接:http://bbs.eeworld.com.cn/thread-313054-1-1.html
在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,是可以的,但是绝对不能初始化,否则会包错
如果把它们分别放到不同的文件中定义,并初始化是没有问题的。
在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,是可以的,但是绝对不能初始化,否则会包错
如果把它们分别放到不同的文件中定义,并初始化是没有问题的。
相关文章推荐
- Go 1.6 release party
- 线性规划与网络流24题 1.飞行员配对方案问题(nefu 475)
- maven nexus私服搭建(重点要耐心等候)
- 一款sublime很棒的代码格式化插件
- GitLab配置HTTPS
- ubuntu下操作目录,出现Permission denied的解决办法
- JAVA技术专题综述之线程篇(1)
- oracleXE默认的管理员登录用户
- 思考
- Jetty与Tomcat
- 搭建轻量级Java开发环境
- QT 5 初学2 QTreeView范例
- 彻底明白Java的IO系统
- 三通道图像转化为三通道,并将多通道图像混合
- 【行业秘密公开】所谓的QQ刷钻业务
- redis在windows_64位环境下使用
- [BZOJ3261] 最大异或和
- poj2115
- 【很棒】Postfix使用介绍
- Day12~13(2016/2/1~2/2)