:lol:lol潜水很长一阵子了,最近在玩F4,所以就顺便提一些开放性的课题,与各位同学共同学习,分数不多;P,只有5分,我会选出5个同学每人发1分作为感谢,呵呵~~:P:)
如题,希望各位看官能根据自己的经验,谈谈STM32F4上几块RAM区(地址不连续)的用法,当然,不应该局限于F4,包括其他的如STM32F1xx或者ARM9等构成的平台上不止使用一块RAM时。
呵呵,我先带个头,简略讲一下之前项目中的一些做法:
1. 纯裸机
(1)STM32F1xx接有外扩的SRAM,一共有两片SRAM---内部SRAM与外部SRAM,它们的用法分别是: 内部SRAM--用作基础平台的全局或静态变量、栈、堆空间,速度较快;外部SRAM--用作存放一些大型的数据块,速度较慢。
(2)STM32F4接有外扩的SDRAM,共有SRAM1(112KB)、SRAM2(16KB)、SRAM3(64KB)、CCMRAM(64KB)、SDRAM(xxMB),它们的用法分别是:CCMRAM作为基础平台的全局或静态变量、堆、栈空间;SRAM1、SRAM2、SRAM3以及SDRAM分别是专用数据块使用。
(3)关于基础平台,这里再提出一个小问题:基础平台中没有内存管理接口,所以应该是不存在堆吧?? 翻看过IAR编译链接后生成的*.map文件,确实没见有哪里引用HEAP的,只有全局或静态变量、栈。因此,在编写链接器的配置文件时,是不是可以不定义HEAP空间或者把HEAP空间设为0?
2. 带OS
(1)STM32F4接有外扩的SDRAM,共有SRAM1(112KB)、SRAM2(16KB)、SRAM3(64KB)、CCMRAM(64KB)、SDRAM(xxMB),它们的用法分别是:CCMRAM作为基础平台的全局或静态变量、堆、栈空间(该基础平台包含了OS必须用的一些资源,这里等于是把OS本身耗费的内存与所管理任务使用的内存分离开了);SRAM1作为OS的内存单元,即OS的任务堆、栈空间;SRAM2、SRAM3以及SDRAM分别是专用数据块使用,比如SRAM2分成几份给串口用,SRAM3分成几份给USB或者以太网用,SDRAM用于其他一些大的数据块或者是直接与文件系统对接起来;
(2)带OS的基础平台,这其中的堆空间是不是也不需要? 我的理解是,一般OS自身耗费的资源,跟其他基础程序一样,都没有第三方的东西来管理,所以引出一个同样的问题,在编写链接器的配置文件时,是不是可以不定义HEAP空间或者把HEAP空间设为0?
PS:IAR的icf链接器配置文件太博大精深了,看了多次IAR的开发指南,仍然处在菜鸟边缘,惭愧啊,希望大牛们能发一些这方面的帖子,供我等菜鸟膜拜学习,呵呵。。。
|