关于第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 />
|