MDK 分散加载问题

[复制链接]
 楼主| 云痕 发表于 2008-10-8 13:57 | 显示全部楼层 |阅读模式
我用的LPC2365+MDK3.20,片内flash256K,想把5~7扇区(0x5000~0x10000)作为非易失存储空间。<br />用MDK自己生成的sct:<br />LR_IROM1&nbsp;0x00000000&nbsp;0x00020000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;load&nbsp;region&nbsp;size_region<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;ER_IROM1&nbsp;0x00000000&nbsp;0x00020000&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*.o&nbsp;(RESET,&nbsp;+First)<br />&nbsp;&nbsp;&nbsp;*(InRoot$$Sections)<br />&nbsp;&nbsp;&nbsp;.ANY&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;RW_IRAM1&nbsp;0x40000000&nbsp;0x00008000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;RW&nbsp;data<br />&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;.ANY&nbsp;(+RW&nbsp;+ZI)<br />&nbsp;&nbsp;}<br />}<br />程序能跑,也不会飞的。<br />可是改做如下,很快就飞<br />LR_IROM1&nbsp;0x00000000&nbsp;0x00020000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;load&nbsp;region&nbsp;size_region<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;ER_IROM1&nbsp;0x00000000&nbsp;0x00005000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*.o&nbsp;(RESET,&nbsp;+First)<br />&nbsp;&nbsp;&nbsp;*(InRoot$$Sections)<br />&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;ER_IROM2&nbsp;0x00010000&nbsp;0x00018000<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;.ANY&nbsp;(+RO)<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;RW_IRAM1&nbsp;0x40000000&nbsp;0x00008000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;RW&nbsp;data<br />&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;.ANY&nbsp;(+RW&nbsp;+ZI)<br />&nbsp;&nbsp;}<br />}<br />这么改后,编译时未提示空间不足,能完成编译并烧写的,带硬件仿真时也能进入main()。Option&nbsp;fot&nbsp;target里的IROM1&nbsp;设置成Start&nbsp;0x0,Size&nbsp;0x20000,并勾上前面的勾,与IROM1,IROM2前都勾上,IROM1设置成Start&nbsp;0x0,Size&nbsp;0x5000,<br />IROM1设置成Start&nbsp;0x10000,Size&nbsp;0x18000。这2种设置都试了之后,分别编译并烧写,仿真时都是快速飞掉。为了实现我的想法,这个sct文件该怎么写?
 楼主| 云痕 发表于 2008-10-8 14:23 | 显示全部楼层

修改后的执行是假象

sct修改后,看上去光标在main上,可是此时单步,是按行顺序执行的,函数调用时也不跳转。切换到汇编模式,全是0xFFFFFFFF,然后后面括号是(????)
微控电子 发表于 2008-10-8 14:43 | 显示全部楼层

因为

因为加载端只有一个,而运行时段有两个,sct文件只能为image定义mem&nbsp;map,加载到指定位置还需要工作,看看生成的map文件
l0p0c 发表于 2008-10-8 16:58 | 显示全部楼层

我对分块加载也不清楚怎么回事……哎……好费劲啊!

  
 楼主| 云痕 发表于 2008-10-8 17:21 | 显示全部楼层

拆了拆,这样子勉强能跑

LR_IROM1&nbsp;0x00000000&nbsp;0x00004000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;load&nbsp;region&nbsp;size_region<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;ER_IROM1&nbsp;0x00000000&nbsp;0x00004000;&nbsp;load&nbsp;address&nbsp;=&nbsp;execution&nbsp;address<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(RESET,&nbsp;+First)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target.o&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main.o&nbsp;(+RO)&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />LR_IROM2&nbsp;0x00004000&nbsp;0x00005000<br />{<br />&nbsp;&nbsp;&nbsp;ER_IROM2&nbsp;0x00004000&nbsp;0x00005000<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(InRoot$$Sections)<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />LR_IROM3&nbsp;0x00008000&nbsp;0x00040000<br />{<br />&nbsp;&nbsp;&nbsp;LOW&nbsp;0x00008000&nbsp;0x00018000<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOW.o&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;HIGH&nbsp;0x00020000&nbsp;0x00020000<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;;HIGH.o&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;*&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />LR_IRAM1&nbsp;0x40000000&nbsp;0x00007000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;RW&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26K<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;RW_IRAM1&nbsp;0x40000000&nbsp;0x00006800&nbsp;<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(HEAP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(STACK)<br />&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;RW_IRAM2&nbsp;0x40006800&nbsp;0x00000800&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;2k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作为__main使用<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+RW&nbsp;+ZI)<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />LR_IRAM2&nbsp;0x40007000&nbsp;0x00001000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;RW&nbsp;data&nbsp;&nbsp;&nbsp;预留<br />{&nbsp;<br />;&nbsp;&nbsp;&nbsp;RW_IRAM2&nbsp;0x40007000&nbsp;0x00001000&nbsp;<br />;&nbsp;&nbsp;&nbsp;{<br />;&nbsp;&nbsp;&nbsp;}<br />}<br />我的程序得能够无线网络远程更新,main()只做切换,无具体功能。第一个加载域新旧版本相同,不会去改动。2个版本主程序分别为LOW()和HIGH()。现在最担心的地方是,程序运行后,记录当前堆区空间分配状况,以及栈顶信息的一些系统后台变量,是在ZIZW域还是在主模式栈区,能够的话,想把这些东西也卡死在一个固定的区域。有人有直到这些信息的么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

75

帖子

0

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