打印

MDK 分散加载问题

[复制链接]
5874|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
云痕|  楼主 | 2008-10-8 13:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的LPC2365+MDK3.20,片内flash256K,想把5~7扇区(0x5000~0x10000)作为非易失存储空间。
用MDK自己生成的sct:
LR_IROM1 0x00000000 0x00020000           ; load region size_region
{  
   ER_IROM1 0x00000000 0x00020000  
   {  
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   }

   RW_IRAM1 0x40000000 0x00008000     ; RW data
   { 
   .ANY (+RW +ZI)
  }
}
程序能跑,也不会飞的。
可是改做如下,很快就飞
LR_IROM1 0x00000000 0x00020000           ; load region size_region
{  
   ER_IROM1 0x00000000 0x00005000     
   {  
   *.o (RESET, +First)
   *(InRoot$$Sections)
   }

   ER_IROM2 0x00010000 0x00018000
   {
    .ANY (+RO)
  }

   RW_IRAM1 0x40000000 0x00008000     ; RW data
   { 
   .ANY (+RW +ZI)
  }
}
这么改后,编译时未提示空间不足,能完成编译并烧写的,带硬件仿真时也能进入main()。Option fot target里的IROM1 设置成Start 0x0,Size 0x20000,并勾上前面的勾,与IROM1,IROM2前都勾上,IROM1设置成Start 0x0,Size 0x5000,
IROM1设置成Start 0x10000,Size 0x18000。这2种设置都试了之后,分别编译并烧写,仿真时都是快速飞掉。为了实现我的想法,这个sct文件该怎么写?

相关帖子

沙发
云痕|  楼主 | 2008-10-8 14:23 | 只看该作者

修改后的执行是假象

sct修改后,看上去光标在main上,可是此时单步,是按行顺序执行的,函数调用时也不跳转。切换到汇编模式,全是0xFFFFFFFF,然后后面括号是(????)

使用特权

评论回复
板凳
微控电子| | 2008-10-8 14:43 | 只看该作者

因为

因为加载端只有一个,而运行时段有两个,sct文件只能为image定义mem map,加载到指定位置还需要工作,看看生成的map文件

使用特权

评论回复
地板
l0p0c| | 2008-10-8 16:58 | 只看该作者

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

使用特权

评论回复
5
云痕|  楼主 | 2008-10-8 17:21 | 只看该作者

拆了拆,这样子勉强能跑

LR_IROM1 0x00000000 0x00004000     ; load region size_region
{  
   ER_IROM1 0x00000000 0x00004000; load address = execution address
   {  
      Startup.o (RESET, +First)
      target.o (+RO)
      main.o (+RO) 
   }
}

LR_IROM2 0x00004000 0x00005000
{
   ER_IROM2 0x00004000 0x00005000
   {
      *(InRoot$$Sections)
   }
}

LR_IROM3 0x00008000 0x00040000
{
   LOW 0x00008000 0x00018000
   {
      LOW.o (+RO)
      * (+RO)
   }

   HIGH 0x00020000 0x00020000
   {
    ;HIGH.o (+RO)
    ;  * (+RO)
   }
}

LR_IRAM1 0x40000000 0x00007000     ; RW data      26K

   RW_IRAM1 0x40000000 0x00006800 
   {
       Startup.o (HEAP)
       Startup.o (STACK)
   }

   RW_IRAM2 0x40006800 0x00000800       ;2k       作为__main使用
   {
       *(+RW +ZI)
   }
}

LR_IRAM2 0x40007000 0x00001000     ; RW data   预留

;   RW_IRAM2 0x40007000 0x00001000 
;   {
;   }
}
我的程序得能够无线网络远程更新,main()只做切换,无具体功能。第一个加载域新旧版本相同,不会去改动。2个版本主程序分别为LOW()和HIGH()。现在最担心的地方是,程序运行后,记录当前堆区空间分配状况,以及栈顶信息的一些系统后台变量,是在ZIZW域还是在主模式栈区,能够的话,想把这些东西也卡死在一个固定的区域。有人有直到这些信息的么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

75

帖子

0

粉丝