加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

stm32   如何不初始化特定的RAM空间

(2012-12-15 10:17:12)
标签:

杂谈

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"的变量放这里
}

}
 

补充文件

UNINIT.C

__attribute__((zero_init))  char cStartFlag[2];
2.uninit.sct

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00002800    ; load region size_region
  ER_IROM1 0x08000000 0x00002800  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00004000  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x20004000 UNINIT 0x00001000  {
    uninitvar.o  (+RW +ZI)
  }
}

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有