This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28075: 关于存储和CMD文件之间的联系

Part Number: TMS320F28075


关于CMD与存储空间之间的联系,有几个疑问想请教一下:

1.DSP手册上写着RAM的入口地址是0x0000_0000,Flash的入口地址是0x0008_0000。这是否意味着从0x0000_0000~0x0000_7FFFF这部分空间都划归到RAM了(当然了不一定会占满这部分空间,这部分空间的大小是512K),而从0x0008_0000后面的地址就划归Flash了?

如果是这样理解的话,那为何在提供的Generic_Flash_Lnk文件中,又出现大量在0x0000_0000~0x0000_7FFFF之间的地址?

此外,由于0x0000_0000~0x0000_7FFFF这部分空间的长度是512K,这是否意味着RAM最大只能到512K?

2 在设置部分,Flash好像是默认分配好了Sector(如下图),那这部分和CMD文件是什么关系呢?这部分Sector并不会随着CMD文件的改变而改变

3 想比较全面的了解Flash到底有哪些区间可以使用,就根据官方提供的手册上的地址部分,绘制了下分布图

可以看到,RAM部分被系统很零散的占据了一小部分空间,那该如何充分利用好剩余的其他空间呢?直接使用除去系统占用部分吗?担心和系统占用的部分空间产生冲突

官方手册上是否有这种对于内存空间标注比较详细的图呢?

4 官方提供的CMD文件里,Flash的CMD文件取名为RAMGSx,RAMLSx,RAMMx,为啥是RAM呢?这些名称有什么含义吗?PAGE0和PAGE1的使用是必须严格按照程序区和数据区来区分吗?程序段必须要严格按照属性分配到PAGE0或者PAGE1吗?最重要的一点是,这些不同的段都是可以任意使用的吗?在使用的时候发现用不同的快有的程序会运行着结果就突然报错,如下

5.CMD里会把存储空间分成很多的存储段,比如RAMLS等,然后将不同的程序段分配到不同的存储段。为啥不把所有的程序段作为一个整体来使用呢?我看在实际分配的时候也会出现将一个程序段分配到多个存储段的情况,如下:

谢谢专家!

  • 1. 不是。具体要看每个器件对应的datasheet中的memory map,比如zhcse98j_TMS320F2807x 微控制器 datasheet (Rev. J)1558.3.1 C28x 存储器映射8.3.2 闪存映射

    2. FLASH的擦除最小只能以sector为单位进行;而cmd中的分配仅仅是逻辑上的;

    3. 剩余的部分是保留区域,不供用户使用;其它器件会有类似的内存映射图,比如F28335,但是F28075没有,只有如 回复1 中给出的表格;

    4. 存储有两种,FLASH(非易失)和RAM(易失),区别在于掉电后数据是否会丢失。代码和已经初始化的数据(比如常量)被存储在FLASH中,未被初始化的数据(比如堆、栈)被存储在RAM中;代码也可以从FLASH搬移到RAM运行,以提高运行速度;

    RAMGSx,RAMLSx,RAMMx

    每一个名称有自己对应的含义,具体可以看下datasheet;

    如我之前所说,必须强调一点的是,cmd中的分配仅仅是逻辑上的,固定为一种格式是为了增强代码的可读性,只要语法正确、符合逻辑与设计,想怎么分配都可以,包括memory的名称,sector中页的分配等等。

    这些不同的段都是可以任意使用的吗?

    使用当然是要在符合器件设计的情况下使用。请先看一下这个链接,是linker command file(.cmd文件)的入门:

    TI Linker Command File Primer

    导致这个错误的原因很多且范围很广,请先看一下上面的链接;

    5. 当然可以,原因如上。

    但是我上面也说过,FLASH擦除的最小单位是sector,按照例程这样分配会避免很多问题。

  • 感谢回复!

    不是。具体要看每个器件对应的datasheet中的memory map,比如zhcse98j_TMS320F2807x 微控制器 datasheet (Rev. J)1558.3.1 C28x 存储器映射8.3.2 闪存映射

    在查看手册的时候,我看的是全英文的两千多页的各单元详细介绍的文档,里面关于存储的介绍反而没有这个图描述的详细

    另外,既然PAGE0和PAGE1的区分只是逻辑上的,那为何要进行区分呢?既不影响存储也不影响物理擦除

  • 我看的是全英文的两千多页的各单元详细介绍的文档

    你看的这个是TRM;

    里面关于存储的介绍反而没有这个图描述的详细

    excel的这个?是你自己总结的吗?上面链接的datasheet中有存储映射的表格;

    既然PAGE0和PAGE1的区分只是逻辑上的,那为何要进行区分呢?既不影响存储也不影响物理擦除

    原因是约定俗成、惯例;好处是方便代码的阅读,能很直观的看出来哪些段是被初始化了的,哪些段是未被初始化的;哪些段存放在FLASH,哪些段存放在RAM。