请教F2812 cmd文件中一个初级问题
请教F2812 cmd文件中一个初级问题<br /><br /><br />我初学F2812, 在cmd文件上遇到一个问题<br /><br /><br />SECTIONS<br />{<br /> <br /> .reset : > RESET, PAGE=0 /*TYPE=DSECT */<br /> vectors : > VECTORS, PAGE=0<br /> .pinit : > PRAM, PAGE = 0<br /> .cinit : > PRAM, PAGE = 0<br /> .text : > PRAM, PAGE = 0<br />...<br /><br />在.reset : > RESET, PAGE=0 /*TYPE=DSECT */<br />这一句后面如果有TYPE=DSECT这一句的话,程序能load,并可以运行,(仿真器下)<br /><br />但若没有这一句,就出现<br /><br />Data verification failed at addredd 0x3FFFC0,<br />Please verify target memory and memory map.<br /><br /><br />这样的错误。<br /><br /><br />我看了一下这两种情况下的map文件。关于<br /><br />.reset 0 003fffc0 00000002 DSECT<br /> 003fffc0 00000002 rts2800.lib : boot.obj (.reset)<br /> <br />前后两种情况也没有大的区别,就是 DSECT这个词有,或 没有的区别。 <br /> <br /> <br />我就是想问问这个DSECT到底起什么作用?<br /><br />谢谢!<br /><br />这样写是“定式”。
看汇编语言工具文档,标明为DSECT的语句,是伪操作,在out文件中不产生任何结果。<br />个人理解:<br />1、在2812芯片中,并不存在0x3FFFC0这个物理存储器,这个地址只是一个虚拟的空间,一个概念。所以,你不能往这个空间分配数据。但为了某种需要,比如结构体系的完整,在CMD文件中还要写上这么一笔。<br />2、把这句话整个删掉,会怎么样?我没有试验过,但估计也没有问题。<br />3、这是2812的CMD文件的定式,照着做,脑子里留个记号即可,不必深究。真要深究,直接去问TI。感谢玄德
非常感谢! 又是“玄德”兄给了最关键的帮助,而且也没有给我留下Email地址,而且我还在本板块专门写了一个帖子找您。<br /><br /><br />这让我想起小时候就爱看的名著《神秘岛》,法-凡尔纳,smith工程师一行5人在无名荒岛上总是受到有着巨大力量的神秘人的帮助,却总是不能找到他...<br /><br /><br />我越来越想知道“玄德”其人了。<br /><br />再与玄德兄讨论
再想与玄德兄讨论一下:<br /><br />关于。reset的用法我已经记住了。<br /><br /><br />另外,玄德兄提到:“在2812芯片中,并不存在0x3FFFC0这个物理存储器,这个地址只是一个虚拟的空间,一个概念。”但是我看了一下2812的datasheet,觉得0x3FFFC0这个地址单元不是实际存在的吗?图上标的是BROM Vector.地址再0x3FFFC0~0XFFFFFF.我觉得应该是实实在在存在的物理存储器单元。<br /><br />不知我理解的对不对?<br /><br /><br /><br />另外,针对“2、把这句话整个删掉,会怎么样?我没有试验过,但估计也没有问题。”这个问题,我已经试过了。若把reset这一行全部注释掉,同样也是出现<br />Data verification failed at addredd 0x3FFFC0,<br />Please verify target memory and memory map.<br />这样的错误提示,程序没法load进去。<br /><br /><br /><br /><br /><br />听课~~~
。。。
关于第2项,我刚试验过,用仿真器运行,没有烧写,过程如下:<br />删掉这一句,的确出现你描述的情况。我就想,可能是因为在MEMORY区域对0x3FFFC0地址做过定义的缘故,索性也关掉MEMORY区域里0x3FFFC0的定义;结果又出现新的问题....就这样,先后把MEMORY区域的PSW、FLASH定义都删除以后,编译通过了,而且下载、运行正常。下面是我用的CMD文件:<br /><br />MEMORY<br />{<br />PAGE 0:<br /><br />/* RESET: org = 0x3FFFC0 , length = 0x000002 */<br /> BEGIN: org = 0x3F8000 , length = 0x000002<br />/* FLASH: org = 0x3D8000 , length = 0x01FFF8 */<br />/* PSW: org = 0x3F7FF8 , length = 0x000008 */<br /><br /> PRAM : org = 0x080000 , length = 0x030000<br /><br />PAGE 1:<br /><br /> M0M1: org = 0x000040 , length = 0x0007C0<br /> L0L1: org = 0x008000 , length = 0x002000<br /> H0: org = 0x3F8002 , length = 0x001FFE<br /><br /> ExtSRAM: org = 0x0B0000 , length = 0x010000<br />}<br /><br />SECTIONS<br />{<br />/* .reset : > RESET, PAGE 0, TYPE = DSECT */<br /> codestart : > BEGIN, PAGE 0<br /> ramfuncs : > PRAM , PAGE 0<br /> .cinit : > PRAM , PAGE 0<br /> .text : > PRAM , PAGE 0<br /><br /> .stack : > M0M1, PAGE 1<br /> .ebss : > L0L1, PAGE 1<br /> .switch : > L0L1, PAGE 1<br /> .econst : > H0, PAGE 1<br /> .extdata : > ExtSRAM, PAGE 1<br />}<br /><br />2812上电后,首先要根据几个IO口的电平来决定下一步跳转到哪里,即所谓boot。这个动作,完全可以用硬件逻辑电路实现,直接跳到目的地去,我相信论坛里的很多人都可以用硬件语言编出这样的逻辑。如果搞个实体的存储器,实现boot的过程肯定很麻烦(自己想想看),而且毫无意义,再者,里面写什么数据呢?所以我说,它只是一个虚拟的空间,一个概念,一种映射。<br /><br />DSP的开发,在进入用户的程序之前,需要做很多预备工作,比如引导过程,比如_cint00函数,CCS和TI公司在替我们做。这个过程很不透明,资料少,难理解。这恰恰是DSP开发的难点。ARM也有这样的情况。话又说回来,即使没有全部搞清楚,也未必就妨碍项目开发。<br /><br />我的邮箱: 2001LHL@21CN.COM<br /><br /><br /> xuexie 说的很详细,谢谢,只是不知道哪篇文档详细介绍这个内容的。 mark 玄德真是好老师! mark 玄德 发表于 2008-11-20 18:04 static/image/common/back.gif关于第2项,我刚试验过,用仿真器运行,没有烧写,过程如下:删掉这一句,的确出现你描述的情况。我就想, ...
玄德您好网友对您很肯定还望多多帮忙 解决网友的问题非常感谢
页:
[1]