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部分做了硬件清零。
论毕。 哟 还在弄 本帖最后由 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的作用。
高手就是高手,牛逼
makesoft 发表于 2014-7-20 17:22
STARTUP1:
IF IDATALEN0
如何明显?为何这样说。
这可不是C代码,也不是汇编代码,是编译器自己的识别代码。 MARK{:smile:}
页:
[1]