应广单片机吧 关注:143贴子:456
  • 0回复贴,共1

【清除RAM】

只看楼主收藏回复

有些人习惯在程序初始的地方,将所有的 RAM 清为 0;因此,你必须要有一个 Point,而且这个 Point,必须寻址在 RAM 地址为 0 的地方,然后将 Point 的内容,设定为 RAM的最高字节的地址,再用一个循环,逐步将 RAM 全清为0。 如下范例,利用 .RAMADR 0 的语法,将 Point 变量的地址定为 0;至于其它变量的地址,就恢复成由系统自行决定,语法为 .RAMADR SYSTEM。 .RAMADR 0 // RAM Address 0 WORD Point; .RAMADR SYSTEM // 后面变量的地址,由系统自行决定。 再由内建的常数 _SYS(SIZE.RAM),可以得到 RAM 的最高字节的地址。 Point = _SYS(SIZE.RAM) - 1; 如果 RAM 的大小,小于 256,可以用如下的循环范例,组译出最短的 Code。 A = 0; do { *Point = A; } while (--Point$0); // 循环被组译成: DZSN Point$0 // GOTO $ - 2 如果 RAM 的大小,大于 256,以下的循环范例,可以将内容全清为 0。 do { *Point = 0; } while (--Point); // 循环被组译成: DEC Point$0 // SUBC Point$1 // MOV A, Point$1 // OR A, Point$0 // T1SN ZF // GOTO $ - 6 改用如下的循环范例,可以组译出最短的 Code (比上面范例少 2 WORD )。但 Point (RAM[0, 1]) 的内容最后为 0xFFFF,是唯一不为 0 的地方。 A = 0; do { *Point = A; } while (Point--); // 循环被组译成: DEC Point$0 // SUBC Point$1 // T1SN CF // GOTO $ - 4


1楼2014-07-08 14:54回复