rain73 发表于 2014-7-20 01:40:10

STC单片机idata会硬件清零?

本帖最后由 rain73 于 2014-7-20 01:53 编辑

由于用了串口人机交互调试器,察看和修改内存就方便多了。在测试STC89C52RC单片机时,发现了一个有趣的现象:硬件会自动清零idata。
idata是指,片内存储器直接寻址的低128字节,和间址寻址的高128字节,一共256字节。
为了防止编译器的初始代码STARTUP.A51清零idata,把相关参数改为:
IDATALEN      EQU   0

观察编译后的汇编代码,确实没有了idata清零代码。

开发板关电后再打开,用调试器观察:
idata 低128字节


idata 高128字节


由于低128字节通常被变量占用,会有一些数据,而高128字节没用到,全部为零。注意这不是代码清零的!应该是硬件清零,这在
51单片机手册中是没有的,通常说是随机数。为了防止采集的数据的偶然性,经过多次开关电测试,都是相同的结果。
STC89C52RC还有一个外部寻址的256B内部扩展存储器,上电后再观察:



可见这一部分空间数据,上电后内容是随机的,更加说明了STC对idata部分做了硬件清零。
论毕。

霸气侧漏 发表于 2014-7-20 01:45:43

哟   还在弄

makesoft 发表于 2014-7-20 17:22:43

本帖最后由 makesoft 于 2014-7-20 17:24 编辑

STARTUP1:

IF IDATALEN <> 0
                MOV   R0,#IDATALEN - 1
                CLR   A
IDATALOOP:      MOV   @R0,A
                DJNZ    R0,IDATALOOP
ENDIF

明显赋值IDATALEN为0起不到不清除IDATA的作用。

酷爱diy 发表于 2014-7-20 17:40:45

高手就是高手,牛逼

rain73 发表于 2014-7-20 20:00:56

makesoft 发表于 2014-7-20 17:22
STARTUP1:

IF IDATALEN0


如何明显?为何这样说。
这可不是C代码,也不是汇编代码,是编译器自己的识别代码。

风雨无阻88 发表于 2016-4-8 23:07:58

MARK{:smile:}
页: [1]
查看完整版本: STC单片机idata会硬件清零?