CPU:基于8051
以下代码将在外部闪存中的 0x0aaa
地址处设置值为 0xaa
。
mov a,#0aah
mov dptr,#X0aaa
movx @dptr,a
以下是MOV和MOVX指令的CPU数据手册描述:
MOV指令允许在内部I-RAM空间或SFR位置之间以及累加器与内部I-RAM空间或SFR位置之间传输数据。
MOVX指令用于访问内部X-RAM和e-FLASH区域。只能使用间接寻址。可以选择使用一个字节地址@Ri,其中Ri可以是所选寄存器库中的R0或R1,或者使用两个字节地址@DPTR。
CPU数据手册请参考此链接:CPU datasheet 以下是一些示例代码:
xdata UCHAR * data ecFlashaaa = (xdata UCHAR *)(0xaaa);
*ecFlashaaa = 0xaa;
代码无法编译,因为它不知道什么是xdata
,同时也对data
感到困惑。所以我需要以某种方式向链接器解释 ecFlashaaa 指向 e-Flash...
XCL
文件,其中定义了段落。-D_XDATA_START=8000 // xdata内存的第一个地址。
,-D_XDATA_Z_START=_XDATA_START //芯片上XDATA内存的第一个地址。
等等...但我不确定e-Flash是否在那里定义。即使已经定义,我如何将我的变量绑定到e-Flash。 - Pablo