• TMS320F2812的CMD文件配置详解


    DSP存储器分为三个独立选择的空间-程序空间数据空间I/O空间:
    1.程序存储器存放待执行的指令执行中所用的系数(常数),
      可使用片内或片外的RAM、ROM或EPROM等来构成;
    2.数据存储器存放指令执行中产生的数据,
      可使用片内或片外 的RAM和ROM来构成;
    3.I/O存储器存放与映象外围接口相关的数据,也可以作为附加的数据存储空间使用。
    表1是TMS320F2812的存储空间分布。

    MEMORY:目标存储结构
    使用PAGE分配地址空间,链接器把每一页当作独立的存储空间
    PAGE0 程序存储器:存放程序
    PAGE1 数据存储器:存放数据
    SECTIONS:控制段的构成与地址分配

    被初始化的sections(数据表和可执行代码)
    .text      可执行代码、常数                                   程序页
    .cinit     初始化的变量和常量表                               程序页
    .pinit     全局构造器(C++)初始化的变量和常量表              程序页
    .const     字符串、声明、被初始化过的全局变量和静态变量                           低数据位的数据页
    .econst   (在大存储器模式时使用)字符串、声明、被初始化过的全局变量和静态变量    数据页任何地方
    .switch    转换声明设置的表格         可以是程序页也可以是低地址的数据页

    未被初始化的sections(为程序运行中创建和存放的变量 在存储器中保留空间)
    .bss    为全局变量和静态变量保留的空间       
            程序开始运行的时候,C导入路径把数据从.cinit节复制出去后存在.bss节         低地址数据页
    .ebss  【在远(far)访问(只用于C)和大存储模式下】
            为全局变量和静态变量保留的空间
            程序开始运行的时候,C导入路径把数据从.cinit节复制出去后存在.bss节         数据页的任何地方
    .stack  为C系统堆栈保留的空间
            用来将声明传给函数及为局部变量保留                                        低地址数据页
    .system 为动态存储器保留
            用于malloc函数,如果不用malloc函数,此section为0                          低地址数据页
    .esystem【外部malloc函数】
            用于外部malloc函数,如果不用外部malloc函数,此section为0                  数据页任何地方

    MEMORY
    {
    PAGE0:
    /*ProgramMemory*/
    RAMH0:   origin=0x3F8000,length=0x001000
    RAML0:   origin=0x008000,length=0x001000
    RAML1:   origin=0x009000,length=0x001000
    ROM:     origin=0x3FF000,length=0x000FC0
    RESET:   origin=0x3FFFC0,length=0x00002M
    VECTORS: origin=0x3FFFC2,length=0x0003EM

    PAGE1:
    /*DataMemory*/
    RAMM0:   origin=0x000000,length=0x000400
    RAMM1:   origin=0x000400,length=0x000400
    RAMH0:   origin=0x3F9000,length=0x001000
    }

    SECTIONS
    {
    /*AllocateProgramAreas*/
    .cinit   : > RAMH0 PAGE=0
    .pinit   : > RAMH0 PAGE=0
    .text    : > RAMH0 PAGE=0
    .reset   :> RESET, PAGE=0,TYPE=DSECT
    Vectors  :> VECTORS, PAGE=0,TYPE=DSEC

    /*Allocateuninitalizeddatasections:*/
    .stack   :>RAMM0 PAGE=1
    .ebss    :>RAMH0 PAGE=1
    .esysmem :>RAMH0 PAGE=1
    .econst  :>RAMM1 PAGE=1
    .switch  :>RAMM1 PAGE=1
    }

    为充分利用18k×16位的SARAM,本例将高地址的8k×16位的H0 SARAM区分成两部分,
    一部分用做存放程序放在PAGE0里,一部分用做存放数据放在PAGE1中以达到合理的分配;    

    在cmd文件中包括各种各样的链接器选项,每种选项代表不同的含义。
    其中,使用-m选项可以创建一个扩展名为.map的链接器(存储器)分配映射文件,
    其语法为:-m filename(文件名)。
    链接器的map文件描述以下内容:
        存储器结构
        输入和输出段的定位
        在重新定位后外部符号的地址
    通过map文件可以查看各段的分配情况,
    包括段的起始地址,使用的字节数等配合cmd文件的使用,
    可确定各个段的使用情况,从而保证程序的正常运行和最小的空间使用。

  • 相关阅读:
    我的第一次面试 —— 腾讯 AI安全 一面总结
    从零开始openGL——五、光线追踪
    从零开始openGL——四、纹理贴图与n次B样条曲线
    从零开始openGL——三、模型加载及鼠标交互实现
    从零开始openGL—— 二、 基本图形绘制
    NN入门,手把手教你用Numpy手撕NN(三)
    2020计算机保研经验分享
    TCP实战二(半连接队列、全连接队列)
    TCP实战一(三握四挥、流量控制)
    tcpdump抓包工具的基本使用
  • 原文地址:https://www.cnblogs.com/lao-wan/p/5136580.html
Copyright © 2020-2023  润新知