被编译器使用的区域和不需要被系统记住的区域,如何知晓

[复制链接]
2357|5
 楼主| jpg4151 发表于 2012-7-17 14:25 | 显示全部楼层 |阅读模式
看门狗复位时会执行startup.a51,需要对该文件进行修改,确保只清除被编译器使用的区域和不需要被系统记住的区域。在2个区域如何得知?
ayb_ice 发表于 2012-7-17 14:36 | 显示全部楼层
KEIL没有办法知晓,只能自己分配,比如绝对定位

IAR可以,使用__no_init修饰即可
dlyt_test001 发表于 2012-7-17 15:05 | 显示全部楼层
通过资源分配文件,分配RAM为上电后清0的区域和需要初始化的区域。再把需要初始化的数据放在ROM中。就可以了!
 楼主| jpg4151 发表于 2012-7-17 15:50 | 显示全部楼层
就以这个为例,哪些空间是在看门狗复位后要清零的         
* * * * * * * D A T A M E M O R Y * * * * * * *
REG   0000H   0008H   ABSOLUTE   "REG BANK 0"
DATA  0008H   0012H   UNIT       ?DT?VARS
DATA  001AH   0001H   UNIT       ?DT?PUTCHAR
001BH 0005H                      *** GAP ***
DATA  0020H   0001H   BIT_ADDR   ?C_LIB_DBIT
BIT   0021H.0 0000H.5 UNIT       ?BI?COINOP
BIT   0021H.5 0001H.2 UNIT       "BIT_GROUP"
      0022H.7 0000H.1            *** GAP ***
DATA  0023H   001BH   UNIT       ?DT?COINOP
DATA  003EH   000FH   UNIT       ?C_LIB_DATA
DATA  004DH   0029H   UNIT      "DATA_GROUP"
IDATA 0076H   001EH   UNIT       ?ID?COINOP
IDATA 0094H   0001H   UNIT       ?STACK
 楼主| jpg4151 发表于 2012-7-17 15:50 | 显示全部楼层
就以这个为例,哪些空间是在看门狗复位后要清零的         
* * * * * * * D A T A M E M O R Y * * * * * * *
REG   0000H   0008H   ABSOLUTE   "REG BANK 0"
DATA  0008H   0012H   UNIT       ?DT?VARS
DATA  001AH   0001H   UNIT       ?DT?PUTCHAR
001BH 0005H                      *** GAP ***
DATA  0020H   0001H   BIT_ADDR   ?C_LIB_DBIT
BIT   0021H.0 0000H.5 UNIT       ?BI?COINOP
BIT   0021H.5 0001H.2 UNIT       "BIT_GROUP"
      0022H.7 0000H.1            *** GAP ***
DATA  0023H   001BH   UNIT       ?DT?COINOP
DATA  003EH   000FH   UNIT       ?C_LIB_DATA
DATA  004DH   0029H   UNIT      "DATA_GROUP"
IDATA 0076H   001EH   UNIT       ?ID?COINOP
IDATA 0094H   0001H   UNIT       ?STACK
ayb_ice 发表于 2012-7-17 16:45 | 显示全部楼层
本帖最后由 ayb_ice 于 2012-7-17 16:49 编辑

一个最简单的方法是用绝对定位,然后修改起动文件,跳过即可

或者从后面分配(char idata my_data _at_ 0xe0;)



比如将RAM的最后32个字节用于分配,修改起文件

IDATALEN  EQU   0E0H   ;// 100H-32
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

46

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部