这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » FLASH,SDRAM 从FLASH把程序拷贝到SDRAM

共2条 1/1 1 跳转至

FLASH,SDRAM 从FLASH把程序拷贝到SDRAM

院士
2006-09-17 18:14:16     打赏
FLASH,SDRAM 从FLASH把程序拷贝到SDRAM



关键词: FLASH     SDRAM     程序     拷贝    

院士
2006-12-22 22:43:00     打赏
2楼
问 大家好!
     我用的三星的S3C44B0X 我烧写了FLASH 但是在程序当中我要对FLASH进行操作。所以我想做一段程序,把在FLASH中烧写的所有程序在SDRAM中运行,我觉得这样不仅运行速度快了,而且不会造成在对FLASH操作过程中的冲突。
    
   我现在主要的麻烦是:不知道该怎么下手做?
   
   我初步认为:本来在FLASH 中烧写的程序首先是 进行存储器设置,和其它设置。然后程序跳转到中程序MAIN,我认为应该在主程序刚一开始就执行,把FLASH中除了初始化程序外所有的程序都复制到SDRAM 然后使程序跳转到SDRAM 中开始执行,当然要考虑代码量,给SDRAM 留出足够的堆栈,数据交换空间。

  请哪位能给我指点一下,提供点思路,要是有例子让我参考一下就更好了。 1: 顶一下顶一下 2: 看u-boot代码 3: 参考 at91rm9200的loaderextern void AT91F_DBGU_Printk(char *);

extern char _stext,_etext,_sdata,_edata;

#define BOOT_VERSION    "boot 1.01"

#define SRC 0x10020000
#define DST 0x21f00000
#define LEN 0x020000

void boot() {
  int i;
  char* ptr1=(char*)DST;
  char* ptr2=(char*)SRC;
  AT91F_DBGU_Printk ("\n\n\r"BOOT_VERSION" (" __DATE__ " - " __TIME__ ")\n\r");
  AT91F_DBGU_Printk("\n\rCopying image...\n\n\r");
  for(i=0; i<LEN; i++)
      *ptr1++=*ptr2++;
  asm("mov pc,%0" : : "r" (DST));
};

void recover(char* s) {
  for(;;);
}; 4: 我的看法    S3C44B0X我毕设的时候玩过,不过没玩好.你说的不就是从计算机中把程序下载到SDRAM里吗?
    只要在计算机上设置好下载到SDRAM的地址就可以了吧,那时我调试的时候,导师就是叫我这么做的. 5: 偶是在跳到MAIN之前执行程序COPY。 6: 各位都说的有各的道理我先弄弄先品   那是用仿真器 把程序全部下载到SDRAM 的.我说的是不用仿真器.要是没有COPY 到SDRAM 中的程序.下载的代码还是存储在FLASH当中运行的. 7: 参考以下以下一段代码这是philips的LPC2000系列ARM启动代码的一部分,实现的就是从FLASH中把数据区搬移到SRAM中。



                .extern       Image_RO_Limit          /* End of ROM code (=start of ROM data) */
                .extern       Image_RW_Base           /* Base of RAM to initialise */           
                .extern       Image_ZI_Base           /* Base and limit of area */              
                .extern       Image_ZI_Limit          /* to zero initialise */                  

                ldr         r0, =Image_RO_Limit     /* Get pointer to ROM data */
                ldr         r1, =Image_RW_Base      /* and RAM copy */
                ldr         r3, =Image_ZI_Base      /* Zero init base => top of initialised data */
                cmp         r0, r1                  /* Check that they are different */
                beq         NoRW
LoopRw:         cmp         r1, r3                  /* Copy init data */
                ldrcc       r2, [r0], #4
                strcc       r2, [r1], #4
                bcc         LoopRw
NoRW:           ldr         r1, =Image_ZI_Limit     /* Top of zero init segment */
                mov         r2, #0
LoopZI:         cmp         r3, r1                  /* Zero init */
                strcc       r2, [r3], #4
                bcc         LoopZI 8: .u-boot-1.1.4/cpu/s3c44b0/start.S
被改烂了代码.

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]