我的2407的代码超过了32kw,我怎么才能使用64k的代码空间呢?

[复制链接]
 楼主| 野人部落 发表于 2007-7-5 09:38 | 显示全部楼层 |阅读模式
2407a的片内程序空间为32kw,而我的程序代码已经达到了近40kw,也就是说从debug文件夹下的.map文件中看到的结果如下:<br />&nbsp;<br />MEMORY&nbsp;CONFIGURATION<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;origin&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;used&nbsp;&nbsp;&nbsp;&nbsp;attributes&nbsp;&nbsp;&nbsp;&nbsp;fill<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--------&nbsp;&nbsp;--------&nbsp;&nbsp;---------&nbsp;&nbsp;--------&nbsp;&nbsp;----------&nbsp;&nbsp;--------<br />PAGE&nbsp;0:&nbsp;VECS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000000&nbsp;&nbsp;000000040&nbsp;&nbsp;00000040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RWIX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PROG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000060&nbsp;&nbsp;00000ffa0&nbsp;&nbsp;00009f15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RWIX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;<br />PAGE&nbsp;1:&nbsp;B2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000060&nbsp;&nbsp;000000020&nbsp;&nbsp;00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RWIX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000200&nbsp;&nbsp;000000100&nbsp;&nbsp;00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RWIX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000300&nbsp;&nbsp;000000100&nbsp;&nbsp;00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RWIX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000800&nbsp;&nbsp;000000800&nbsp;&nbsp;00000100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RWIX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00008000&nbsp;&nbsp;000008000&nbsp;&nbsp;00001c14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RWIX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;我的电路板上扩展了128k*16bit的内存,当我将MP/MC设置为MC模式时,程序空间有64K的RAM可以使用,这是我在调试时的设置,现在我的程序已基本调试完毕,需要将程序固化起来。<br />&nbsp;&nbsp;&nbsp;&nbsp;首先我试图优化代码,将程序缩小至32K以内,可是效果不明显,无论我怎样优化和设置编译器也无法将代码缩小至32K以内,至此我将程序烧写到2407A片内的FLASH的努力行不通了。<br />&nbsp;&nbsp;&nbsp;&nbsp;于是我想将程序烧写到片外的串行FLASH芯片M25P16中,该芯片为SPI接口的FLASH,可提供SPI方式的引导,也就是说2407A内部的BOOT&nbsp;ROM&nbsp;中的程序将会把M25P16内的程序代码复制到2407A外部的RAM中(这些RAM位于程序空间),然后跳转到代码地址执行代码程序。<br />&nbsp;&nbsp;&nbsp;&nbsp;可是2407A的SPRU357B文档中对BOOT的描述是;<br />&nbsp;&nbsp;&nbsp;&nbsp;1.将XF/BOOTEN脚接下拉电阻。<br />&nbsp;&nbsp;&nbsp;&nbsp;2.上拉SPISIMO/IOPC2&nbsp;脚<br />&nbsp;&nbsp;&nbsp;&nbsp;3.上拉SCITXD/IOPA0&nbsp;脚,选择PLL*4;<br />&nbsp;&nbsp;&nbsp;&nbsp;4.将MP/MC脚&nbsp;接下拉电阻,选择MC模式<br />&nbsp;&nbsp;&nbsp;&nbsp;问题1.&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从上面的描述可知在设置了MC模式之后,2407A片内的地址为片内FLASH的地址空间,这已经占去了全部64K空间的一半,我的代码将该从什么地址开始存放呢,如果只能放到8000H以后的空间那么,我的代码仍然不能全部装在到RAM中。<br />&nbsp;&nbsp;&nbsp;&nbsp;问题2.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOTROM在运行时占用了0000H~00FFH的空间,那么被装载的代码能不能使用这段空间呢?如果不能,那么程序的中断向量是应该固化到2407A片内的FLASH中,还是该怎么使用呢?<br />&nbsp;&nbsp;&nbsp;&nbsp;问题3.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从SPI口引导代码运行的过程,用仿真器能不能进行仿真观察呢?<br />&nbsp;<br />以上种种问题,我百思不得其解,我几乎遍历了TI的相关文档,但仍然没有找到答案,如果大虾能及时地给与我答案,我将不胜感激。<br />
tjsheep 发表于 2007-7-5 19:35 | 显示全部楼层

你只能用mp模式,然后在ps空间扩64k容量

  
wowow 发表于 2007-7-5 21:18 | 显示全部楼层

两个办法

偶没有用过24xx,根据5000的经验,可以有两个办法:<br />1.如果你的程序里查找表,字库之类的占了不少,去掉这部分后刚好能放进内部flash,这样就很好办了,应该不用我讲了吧?<br /><br />2.另外一个处理大程序的通用办法,所谓二次加载。将程序变成一张大数据表,存到外部flash中(5000有hex500.exe转换公具,2000可能也有吧),再编一个很小的程序,让它上电时通过spi加载进去,开始运行后,将2407改成MP模式,再把外面的程序搬进来,搬完后跳转过去运行。因此你要做的是:<br />a.将你的程序转成数据表,通常包含几个段,每段格式为:起始地址,长度,内容。。。<br />b.再将上面的数据表转成c语言数组格式<br />const&nbsp;char&nbsp;Prog[]={<br />....<br />};<br />c.写一个小项目将上面的数组写入外部flash<br />d.写一个小程序实现搬移程序<br />e.将搬移程序烧到外部flash并让它能加载<br /><br />这只是个思路了,也许有更好的办法。
 楼主| 野人部落 发表于 2007-7-6 08:45 | 显示全部楼层

小弟还有疑问

多谢上面两位兄弟的指点,为了找到上面的问题的答案,小弟曾联系了TI公司中国北京分公司的技术支持部门,刚接到他们的回复,该公司的技术部门的人员说了两种方法:其中一种方法就是直接在外部总线上挂64KW的FLASH做程序引导,如tjsheep所说,另一种方法就是wowow兄提到的二次加载的方法,该方法需要自行编写大小不超过256W的BOOT&nbsp;ROM程序,相当有难度,只怕小弟目前还不具备这样的能力。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此外小弟还有疑问:那就是TI技术人员的描述我得知,BOOT&nbsp;ROM程序的目的在于将SPI和SCI的程序写入片内的FLASH中,可是我从文档SPRU357B中看到的描述是:<br />“the&nbsp;code&nbsp;is&nbsp;loaded&nbsp;to&nbsp;user-specified&nbsp;location&nbsp;which&nbsp;is&nbsp;complete&nbsp;flexible;it&nbsp;can&nbsp;be&nbsp;anywhere&nbsp;in&nbsp;program&nbsp;memory&nbsp;where&nbsp;RAM&nbsp;is&nbsp;avaiable&nbsp;”&nbsp;<br />&nbsp;&nbsp;&nbsp;上面的话,小弟的理解是boot&nbsp;loader&nbsp;程序能够将程序空间但该程序空间使用的是ram,由此我的理解是被装载的程序只能放置于从8000h开始的片外扩展程序空间,不知小弟的理解是否正确。如果是这样的话,从spi引导到程序空间的程序如果要使用中断向量的话,岂不是只能预先烧写到片内flash中才行?<br /><br />
tjsheep 发表于 2007-7-6 10:27 | 显示全部楼层

外扩就是0开始的了……

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部