1·什么是CMD文件,它有什么作用。
CMD文件是用来说明对应的对应的代码、数据、变量的存放空间。
它包括两个指令SECTOINS和MEMORY。
如果把RAM和ROM看成是两个仓库的话,那MEMORY指令就是把这两个仓库再分成不同的区域。如果把不同的代码段是看成一件件货物的话,那么SECTOINS指令则指出了这些货物对应的存放位置。

.cmd文件

由汇编器产生的COFF格式的OBJ文件中的段作为构造块,当有多个文件进行链接时,链接器会将输入段结全在一起产生可执行的COFF输出模块,然后链接器为各输出段选择存储器地址。

1.1          MEMORY指令说明
存储器(MEMORY)伪指令,用来定义目标系统的存储器空间。MEMORY可以定义存储器的区域,并指定起始地址和长度。
MEMORY伪指令的一般语法:
MEMORY
{
  PAGE 0: name1[(attr)]rigin=constant, length=constant;
  PAGE n: name1[(attr)]rigin=constant, length=constant;
}
PAGEn中的页号n最大为255。每个PAGE代表一个完全独立的地址空间。通常PAGE0为程序存储器,PAGE1为数据存储器。
Name1:存储器区间名。可包含8个字符。不同PAGE可以取同样的name1,但在同一个PAGE内区间名不可以相同。
Attr:可选项。规定存储器属性。
R,可以对存储器执行读操作
W,可以对存储器执行写操作
X,破除可以装入可执行的程序代码
I,规定可以对存储器进行初始化
Origin:起始地址。
Length:区间长度。

初始化段用SECTIONS可定位两次:装入和运行。如:一些关键的执行代码必须装在系统的ROM中,但希望在较快的RAM中运行。
未初始化段只可被定位一次。

自己写的关于LF2406A的.cmd文件
MEMORY
{
        PAGE 0: VECS:        origin=0h,        length=40h        ;中断向量表,40h~43h为安全代码
                                                                                        ;或保留代码区,复位向量是0h和1h
                   FLASH:        origin=44h,        length=0ffbch        ;32Kflash
                    SARAM:        origin=8000h,        length=800h        ;当PON=1&&DON=0,
;SARAM映射为程序存储空间
                   B0:                 origin=ff00h,        length=100h        ; 256 WORD DARAM,CNF=1时
        PAGE 1: MMRS:        origin=0h,        length=60h        ;内部映射寄存器,或保留区间
                     B2:                origin=60h,        length=20h        ;32 WORD DARAM
                    B0:                origin=200h,        length=100h        ;256 WORD DARAM,CNF=0时
                    B1:                origin=300h,        length=100h        ;256 WORD DARAM
                    SARAM:        origin=800h,        length=800h        ;2K WORD SARAM,DON=1&&ON=0
                    PF1:          origin=7000,        length=230h        ;外设帧1
                   EVA:        origin=7400,        length=32h        ;外设帧2
                    EVB:        origin=7500,        length=32h        ;外设帧3

内部的所有的存储器都定义过了,最后的三个PF1、EVA、EVB可以不用定义的,因为是这外设的寄存器映射。

1.2    SECTOINS指令说明
段(SECTOINS)伪指令,告诉链接器如何将输入段结合成输出段并告诉链接器将输出段放在存储器的何处。
SECTIONS
{
        Name:[property,property,…]
        Name:[property,property,…]
        Name:[property,property,…]
}
Name:源程序中的段名。如.text
Property:段的属性参数。一个段的属性参数包括下列五种:

1.2.1        Load allocation,由它定义将输出段加载到存储器中的什么位置。
语法:load: allocation、allocation、>allocation        (allocation是将逻辑段定位的地址说明)
例如:.text:        load=0x1000        ;将输出段定位到一个特定的地址
          .text:        load>ROM        ;将输出段定位到命名为ROM的存储区
          .text:        align=0x80        ;关键词align规定输出段.text定位到从地址边界0x80开始
          .text:        block(128)        ;关键词bolck规定段必须在两个地址边界之内,如果段太
                                                ;大,就从一个地址边界开始
          .text:        PAGE0                ;将输出段定位到PAGE0
如果输出段只定位一个位置,则可省去关键字load。如:.text: >ROM
如果要用到一个以上参数,可以将它们排成一行。如:.text:  >ROM align 16 PAGE 2
或.text: load(ROM align(16) PAGE(2))
(地址边界是2的N次方幂的地址,如地址边界定为16,则其地址为xxx0h。)
定边界地址用在什么情况下?
1.2.2        Run allocation,由它定义输出段在存储器的什么位置开始运行。
        语法:run=allocation或run>allocation
        链接器为每个输出段在目标存储器中分配两个地址:加载地址和执行地址。通常这两个地址是相同的。但如要先将程序加载到ROM,然后在RAM中以较快的速度运行。则可两次定位,如:
        .fir:        load=ROM,run=RAM
1.2.3        Input sections,由它定义哪些输入段组成输出段。
        语法:{input_sections}
        .text:          {*(.text)}   等价于   .text:   {}
        这样就把所有的.text段链接成.text段输出。        
        也可以明确的用文件名和段名来确定输入段:
        .text:
        {
                F1.obj (.text,sect)        ;链接F1.obj的.text、.sect段
                F2.obj (sect)          ;这里的sect前面的点是本来就不用写还是书上的错误?
                F3.obj                        ;链接f3.obj的所有段
        }
1.2.4        Section type,用它为输出段定义特殊形式的标志
        语法:Type=COPY、Type= DSECT、Type=NOLOAD
1.2.5        Fill value,当初始化段中存在未初始化的存储区间时,对其填充一指定值。
        语法:fill: value 或name:…{…}=value

1.3问题
1.3.1如果不同页中定义了相同的名字,又不指定PROG,这时默认在哪个空间呢?
如:PAGE 0: B0: origin=0ff00h,        length=100h        ; 256 WORD DARAM,CNF=1时
        PAGE 1: B0: origin=200h,        length=100h        ;256 WORD DARAM,CNF=0时
        这明        .const:                {}        >B1                是指向那个空间?
        
1.3.2        
-o file.out
-m file.map
以上两个语句用来生成.out和.map文件。如果没写这,也没有关系,CCS->project->Build options菜单下的Linker选项页里面还可以设置。

CMD文件的编写说明,比较详细的 1·什么是CMD文件,它有什么作用。相关推荐

  1. twig php代碼,有没有办法在wordpress的.twig文件中编写php代码?我试图使用.twig模板文件中的表单值发送邮件...

    有没有办法在wordpress的.twig文件中编写php代码?我正在尝试使用.twig模板文件中的表单值发送邮件. 第PAGE-SHORTEFORM.TWIG页 {% extends "b ...

  2. app抢购脚本如何编写_如何用1个记事本文件征服全世界?——cmd批处理脚本编写...

    电脑可以定时帮你自动处理一些重复的事务.一键实现别人多键才能实现的功能,利用常用的cmd命令可以完成这些功能,这次我们从操作层面聊一聊,如何利用这些cmd命令在记事本中编写脚本,进而实现任何自己想实现 ...

  3. 命php令删除文件夹,window_win7系统通过cmd命令提示符的del命令删除文件的详细教程,怎么利用cmd命令提示符的del命 - phpStudy...

    win7系统通过cmd命令提示符的del命令删除文件的详细教程 怎么利用cmd命令提示符的del命令删除文件?cmd命令提示符的功能十分强大,它可以通过一些简单的命令来完成指定的查询.修改.删除等任务 ...

  4. Lightly 支持 Markdown 文件在线编写(文中提供详细 Markdown 语法)

    在反馈群用户们的呼声下,Lightly 的 Markdown 支持已悄然上线了!无论是上传或是新建,大家都可以打开甚至随意使用 Markdown 语言编写文档. Markdown 是什么? Markd ...

  5. vc 写c语言程序步骤,VC++ 6.0编写程序的详细步骤

    想知道VC++ 6.0工具如何编写程序吗,可能有些朋友还不熟悉,我们一起去了解一下VC++ 6.0编写程序的详细步骤吧. VC++ 6.0编写程序的详细步骤 vc++6.0的菜单简洁,工具明了,这里以 ...

  6. BAT文件的编写及使用

    首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任 ...

  7. BAT、CMD脚本的编写与实际应用[转]

    在微软官方的定义中,BAT属于批处理脚本(可以运行在DOS.WINDOWS下),是用来进行简化平时操作的批量化集成文件.而CMD,则是只能运行在NT系统下的批处理文件,其功能与BAT是一样的. 从早期 ...

  8. python如何将图片打包进exe里_史上最详细的Python打包成exe文件教程

    打包成exe文件可以让python代码在没有python环境的条件下,依然能够运行,实在是码农们写追女朋友表白.情人节浪漫的必需品! 1.使用豆瓣镜像源下载: pyinstaller 有需要了解如何使 ...

  9. 在matlab中导入excel,Matlab导入Excel文件中的数据的详细教程分享

    操作Matlab时还不会导入Excel文件中的数据?本文就介绍了Matlab导入Excel文件中的数据的操作内容,想要学习的朋友可以看一看下文哦,相信对大家会有所帮助的. 直接点击鼠标操作导入数据 打 ...

  10. Makefile文件的编写规则

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 Makefile文件编写规则 文章目录: 1 makefile文件介绍 2 makefile文件编写 1 makefile文件介绍 makefile是 ...

最新文章

  1. PAT 1041. 考试座位号(15)
  2. 《笑谈银行IT》—畅谈“银行IT系统”
  3. 【Java 虚拟机原理】垃圾回收算法 ( 可达性分析算法 | GC Root 示例 | GC 回收前的两次标记 | finalize 方法示例 )
  4. 深度学习在CTR预估的应用
  5. java元空间扩容_JVM元空间(Metaspace)
  6. Grails 1.2参考文档速读(19):插件
  7. JDK 13中的JEP 355文本块
  8. python使用pip安装包_python的安装包pip命令基本用法
  9. python怎么实现黑客攻击英国_注意!你的隐私就是这样被黑客获取的
  10. 最大子序列的和算法分析一
  11. 怎么下载linux历史文件,快速学习Linux-Linux历史
  12. android反编译工具推荐,Android 反编译工具的各种用法
  13. 音视频 即时通讯Linux源码
  14. NVIDIA显卡驱动安装方法
  15. 论文阅读 Optimal Rough Terrain Trajectory Generation for Wheeled Mobile Robots
  16. 调用win api将指定名称的打印机设置为默认打印机
  17. jvm的类加载和运行时数据区和垃圾回收
  18. 浅析安全架构中遇到的问题
  19. 【Proteus仿真】【51单片机】智能温控风扇设计
  20. echart 热搜词云(字符云)的制作以及遇到颜色不会随即变得bug

热门文章

  1. 数据可视化--实验三:空间可视化
  2. 公众号滑动图代码_微信公众号文章滑动图片怎么做的呢?
  3. 等保中级测评师复习大纲2019版
  4. 一文入门智能开关的3种功能形态
  5. 用C#实现汉字转化为拼音
  6. 新白娘子传奇中掩藏的秘密!!白素贞的身世之谜!
  7. 使用SpotBugs/FindBugs进行代码检查
  8. 集线器,交换机,路由器工作层次的区别
  9. 计算机硬盘上的文件打不开,电脑硬盘打不开怎么办
  10. 内存单元地址求字节大小的计算方法