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

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

[复制链接]
wyskp-106295 提问时间:2009-1-29 01:00 /
垦请高手帮忙:
 
在实际应用中,有时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  还是会把数据清掉!
 
 
 
 
收藏 评论2 发布时间:2009-1-29 01:00

举报

2个回答
wyskp-106295 回答时间: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"的变量放这里
          }
  
}
sintix 回答时间: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版