你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 9873|回复: 2

如何禁止KEIL 初始化RAM?请高手帮忙

[复制链接]

1

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2009-1-29 01:00:05 | 显示全部楼层 |阅读模式
垦请高手帮忙:
 
在实际应用中,有时RAM中数据在复位后要保留,比如上次产生的记录 ,不能上电后就初始化掉。而KEIL的加载文件不知道如何设置才能防止RAM被初始化。
 
我这样设置的:
 
LR_IROM1 0x08000000 0x00020000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00020000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
    
    ER_RW 0x20001000 0x4000{
        * (+RW +ZI)     
    }

     ER_RSV 0x20000000  UNINIT    {
     
     ram.o(ER_RSV)
     
     }
}


0X2000000-0X20001000 设置成UNINIT, 用于存放RAM.C 里面定义的变量。
 检查MAP 文件,地址分配是正确的,但是DEBUG时却发现:
 
每次复位CPU,KEIL内嵌的__SCATTER_COPY  还是会把数据清掉!
 
 
 
 
回复

使用道具 举报

1

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2009-2-1 11:19:48 | 显示全部楼层

RE:如何禁止KEIL 初始化RAM?请高手帮忙

已解决。
KEIL 工程师给的方案:
利用输入段使用OVERLAY,而不是NOINIT.
指定单个变量不初始化:
int print_time __attribute__ ((section ("ER_RSV")));
指定文件内所以变量不被初始化:
#pragma arm section code ="ER_RSV", rwdata = "ER_RSV"
int abc;
int systick;
int sys_var1;
#pragma arm section code, rwdata  

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00020000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00020000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  
        RW_IRAM1 0x20000000 0x00004000  {  ; RW data
           .ANY (+RW +ZI)
          }
          
          OVERLAY_RAM1 0x20004000  OVERLAY {
            *.o (ER_RSV)     ;所有模块的指定段为"ER_RSV"的变量放这里
          }
  
}
回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2010-8-22 16:39:53 | 显示全部楼层

回复:如何禁止KEIL 初始化RAM?请高手帮忙

回复第 2 楼 wyskp于2009-02-01 03:19:48发表:
已解决。
KEIL 工程师给的方案:
利用输入段使用OVERLAY,而不是NOINIT.
指定单个变量不初始化:
int print_time __attribute__ ((section ("ER_RSV")));
指定文件内所以变量不被初始化:
#pragma arm section code ="ER_RSV", rwdata = "ER_RSV"
int abc;
int systick;
int sys_var1;
#pragma arm section code, rwdata

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00020000 { ; load region size_region
ER_IROM1 0x08000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}

RW_IRAM1 0x20000000 0x00004000 { ; RW data
.ANY (+RW +ZI)
}

OVERLAY_RAM1 0x20004000 OVERLAY {
*.o (ER_RSV) ;所有模块的指定段为"ER_RSV"的变量放这里
}



我也遇到了跟楼主一样的问题,希望的到解决。
.\obj\V_OV7660_STM32.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.

LR_IROM1 0x08000000 0x00010000 { ; load region size_region
  ER_IROM1 0x08000000 0x00010000 { ; load address = execution address
*.o (Init, +First) //是这行错误,原来是(reset,+FIRST),现在这样也不行。要怎么解决。我的工程也是从IAR转来的。原来是IAR的工程。用的《STM32 IAR工程->Keil MDK转换详解》这篇文章里的那位仁兄的启动文件,现在只剩下这个错误。
  *(InRoot$$Sections)
  .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00010000 { ; RW data
  .ANY (+RW +ZI)
  }
}

LR_IROM2 0x08010000 0x00010000 {
  ER_IROM2 0x08010000 0x00010000 { ; load address = execution address
  .ANY (+RO)
  }
}
 
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版