xinyancode 发表于 2008-11-18 11:06

请教F2812 cmd文件中一个初级问题

请教F2812&nbsp;cmd文件中一个初级问题<br /><br /><br />我初学F2812,&nbsp;在cmd文件上遇到一个问题<br /><br /><br />SECTIONS<br />{<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;.reset&nbsp;&nbsp;&nbsp;:&nbsp;&gt&nbsp;RESET,&nbsp;&nbsp;&nbsp;PAGE=0&nbsp;&nbsp;&nbsp;&nbsp;/*TYPE=DSECT&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;vectors&nbsp;:&nbsp;&gt&nbsp;VECTORS,&nbsp;PAGE=0<br />&nbsp;&nbsp;&nbsp;.pinit&nbsp;&nbsp;&nbsp;:&nbsp;&gt&nbsp;PRAM,&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;.cinit&nbsp;&nbsp;&nbsp;:&nbsp;&gt&nbsp;PRAM,&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;.text&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&gt&nbsp;PRAM,&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;=&nbsp;0<br />...<br /><br />在.reset&nbsp;&nbsp;&nbsp;:&nbsp;&gt&nbsp;RESET,&nbsp;&nbsp;&nbsp;PAGE=0&nbsp;&nbsp;&nbsp;&nbsp;/*TYPE=DSECT&nbsp;&nbsp;*/<br />这一句后面如果有TYPE=DSECT这一句的话,程序能load,并可以运行,(仿真器下)<br /><br />但若没有这一句,就出现<br /><br />Data&nbsp;verification&nbsp;failed&nbsp;at&nbsp;addredd&nbsp;0x3FFFC0,<br />Please&nbsp;verify&nbsp;target&nbsp;memory&nbsp;and&nbsp;memory&nbsp;map.<br /><br /><br />这样的错误。<br /><br /><br />我看了一下这两种情况下的map文件。关于<br /><br />.reset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;003fffc0&nbsp;&nbsp;&nbsp;&nbsp;00000002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DSECT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;003fffc0&nbsp;&nbsp;&nbsp;&nbsp;00000002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rts2800.lib&nbsp;:&nbsp;boot.obj&nbsp;(.reset)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />前后两种情况也没有大的区别,就是&nbsp;DSECT这个词有,或&nbsp;没有的区别。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />我就是想问问这个DSECT到底起什么作用?<br /><br />谢谢!<br /><br />

玄德 发表于 2008-11-18 22:19

这样写是“定式”。

看汇编语言工具文档,标明为DSECT的语句,是伪操作,在out文件中不产生任何结果。<br />个人理解:<br />1、在2812芯片中,并不存在0x3FFFC0这个物理存储器,这个地址只是一个虚拟的空间,一个概念。所以,你不能往这个空间分配数据。但为了某种需要,比如结构体系的完整,在CMD文件中还要写上这么一笔。<br />2、把这句话整个删掉,会怎么样?我没有试验过,但估计也没有问题。<br />3、这是2812的CMD文件的定式,照着做,脑子里留个记号即可,不必深究。真要深究,直接去问TI。

xinyancode 发表于 2008-11-19 21:50

感谢玄德

非常感谢!&nbsp;又是“玄德”兄给了最关键的帮助,而且也没有给我留下Email地址,而且我还在本板块专门写了一个帖子找您。<br /><br /><br />这让我想起小时候就爱看的名著《神秘岛》,法-凡尔纳,smith工程师一行5人在无名荒岛上总是受到有着巨大力量的神秘人的帮助,却总是不能找到他...<br /><br /><br />我越来越想知道“玄德”其人了。<br /><br />

xinyancode 发表于 2008-11-20 00:28

再与玄德兄讨论

再想与玄德兄讨论一下:<br /><br />关于。reset的用法我已经记住了。<br /><br /><br />另外,玄德兄提到:“在2812芯片中,并不存在0x3FFFC0这个物理存储器,这个地址只是一个虚拟的空间,一个概念。”但是我看了一下2812的datasheet,觉得0x3FFFC0这个地址单元不是实际存在的吗?图上标的是BROM&nbsp;Vector.地址再0x3FFFC0~0XFFFFFF.我觉得应该是实实在在存在的物理存储器单元。<br /><br />不知我理解的对不对?<br /><br /><br /><br />另外,针对“2、把这句话整个删掉,会怎么样?我没有试验过,但估计也没有问题。”这个问题,我已经试过了。若把reset这一行全部注释掉,同样也是出现<br />Data&nbsp;verification&nbsp;failed&nbsp;at&nbsp;addredd&nbsp;0x3FFFC0,<br />Please&nbsp;verify&nbsp;target&nbsp;memory&nbsp;and&nbsp;memory&nbsp;map.<br />这样的错误提示,程序没法load进去。<br /><br /><br /><br /><br /><br />

hotpower 发表于 2008-11-20 03:58

听课~~~

玄德 发表于 2008-11-20 18:04

。。。

关于第2项,我刚试验过,用仿真器运行,没有烧写,过程如下:<br />删掉这一句,的确出现你描述的情况。我就想,可能是因为在MEMORY区域对0x3FFFC0地址做过定义的缘故,索性也关掉MEMORY区域里0x3FFFC0的定义;结果又出现新的问题....就这样,先后把MEMORY区域的PSW、FLASH定义都删除以后,编译通过了,而且下载、运行正常。下面是我用的CMD文件:<br /><br />MEMORY<br />{<br />PAGE&nbsp;0:<br /><br />/*&nbsp;&nbsp;&nbsp;RESET:&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;=&nbsp;0x3FFFC0&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;0x000002&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEGIN:&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;=&nbsp;0x3F8000&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;0x000002<br />/*&nbsp;&nbsp;&nbsp;FLASH:&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;=&nbsp;0x3D8000&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;0x01FFF8&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;&nbsp;PSW:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;=&nbsp;0x3F7FF8&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;0x000008&nbsp;&nbsp;&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRAM&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;=&nbsp;0x080000&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;0x030000<br /><br />PAGE&nbsp;1:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;M0M1:&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;=&nbsp;0x000040&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;0x0007C0<br />&nbsp;&nbsp;&nbsp;&nbsp;L0L1:&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;=&nbsp;0x008000&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;0x002000<br />&nbsp;&nbsp;&nbsp;&nbsp;H0:&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;=&nbsp;0x3F8002&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;0x001FFE<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ExtSRAM:&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;=&nbsp;0x0B0000&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;0x010000<br />}<br /><br />SECTIONS<br />{<br />/*&nbsp;&nbsp;&nbsp;&nbsp;.reset&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&gt&nbsp;RESET,&nbsp;&nbsp;&nbsp;PAGE&nbsp;0,&nbsp;&nbsp;&nbsp;TYPE&nbsp;=&nbsp;DSECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;codestart&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&gt&nbsp;BEGIN,&nbsp;&nbsp;&nbsp;PAGE&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;ramfuncs&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&gt&nbsp;PRAM&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;.cinit&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&gt&nbsp;PRAM&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;.text&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&gt&nbsp;PRAM&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;.stack&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&gt&nbsp;M0M1,&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;.ebss&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&gt&nbsp;L0L1,&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;.switch&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&gt&nbsp;L0L1,&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;.econst&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&gt&nbsp;H0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;.extdata&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&gt&nbsp;ExtSRAM,&nbsp;PAGE&nbsp;1<br />}<br /><br />2812上电后,首先要根据几个IO口的电平来决定下一步跳转到哪里,即所谓boot。这个动作,完全可以用硬件逻辑电路实现,直接跳到目的地去,我相信论坛里的很多人都可以用硬件语言编出这样的逻辑。如果搞个实体的存储器,实现boot的过程肯定很麻烦(自己想想看),而且毫无意义,再者,里面写什么数据呢?所以我说,它只是一个虚拟的空间,一个概念,一种映射。<br /><br />DSP的开发,在进入用户的程序之前,需要做很多预备工作,比如引导过程,比如_cint00函数,CCS和TI公司在替我们做。这个过程很不透明,资料少,难理解。这恰恰是DSP开发的难点。ARM也有这样的情况。话又说回来,即使没有全部搞清楚,也未必就妨碍项目开发。<br /><br />我的邮箱:&nbsp;&nbsp;2001LHL@21CN.COM<br /><br /><br />

zoupeng139 发表于 2010-9-10 14:23

xuexie

huangxz 发表于 2010-10-13 10:31

说的很详细,谢谢,只是不知道哪篇文档详细介绍这个内容的。

raoxianbin 发表于 2014-1-23 16:21

mark

yuanjiejun 发表于 2014-1-27 13:15

玄德真是好老师!

raoxianbin 发表于 2014-2-15 18:22

mark

zhangmangui 发表于 2014-2-15 22:35

玄德 发表于 2008-11-20 18:04 static/image/common/back.gif
关于第2项,我刚试验过,用仿真器运行,没有烧写,过程如下:删掉这一句,的确出现你描述的情况。我就想, ...

玄德您好网友对您很肯定还望多多帮忙   解决网友的问题非常感谢
页: [1]
查看完整版本: 请教F2812 cmd文件中一个初级问题