调试STC32G144K246的xdata诡异现象
把变量用xdata定义,然后赋值,打印出来,居然全部是0,如果把变量定义成edata,数据就正常KEIL配置如下:
部分程序:
变量用xdata定义,打印是橙色部分,edata定义,打印出是绿色部分。
gucTemp = 0x59;
ucData= gucTemp;
if(0x59 != ucData)
{
Print("\r\n not ok,data = 0x%x!!!!!!!!\r\n",&ucData,0,0,0);
}
else
{
Print("\r\n ok,data = 0x%x\r\n",&ucData,0,0,0);
}
if(0x59 != gucTemp)
{
Print("\r\n not ok,datax = 0x%x!!!!!!!!\r\n",&gucTemp,0,0,0);
}
else
{
Print("\r\n ok,datax = 0x%x\r\n",&gucTemp,0,0,0);
}
单步调试,无论哪种定义,都会跳到绿色部分,所以程序是没有问题,猜测芯片运行的时候出现了问题
161: gucTemp = 0x59;
0xFCDC85 7459 MOV A,#0x59
0xFCDC87 90796C MOV DPTR,#0x796C
0xFCDC8A F0 MOVX @DPTR,A
162: ucData= gucTemp;
163:
164:
0xFCDC8B 90796C MOV DPTR,#0x796C
0xFCDC8E E0 MOVX A,@DPTR
0xFCDC8F 90794F MOV DPTR,#0x794F
0xFCDC92 F0 MOVX @DPTR,A
165: if(0x59 != ucData)
166: {
0xFCDC93 90794F MOV DPTR,#0x794F
0xFCDC96 E0 MOVX A,@DPTR
0xFCDC97 BEB059 CMP R11,#0x59
0xFCDC9A 6818 JE FCDCB4
167: Print("\r\n not ok,data = 0x%x!!!!!!!!\r\n",&ucData,0,0,0);
0xFCDC9C 9F11 SUB DR4,DR4
0xFCDC9E 7A1F0436 MOV 0x0436,DR4
0xFCDCA2 7A1F043A MOV 0x043A,DR4
0xFCDCA6 7A1F043E MOV 0x043E,DR4
0xFCDCAA 7E1445C2 MOV WR2,#0x45C2
0xFCDCAE 7E0400FD MOV WR0,#0x00FD
168: }
169: else
170: {
0xFCDCB2 8016 SJMP FCDCCA
171: Print("\r\n ok,data = 0x%x\r\n",&ucData,0,0,0);
0xFCDCB4 9F11 SUB DR4,DR4
0xFCDCB6 7A1F0436 MOV 0x0436,DR4
0xFCDCBA 7A1F043A MOV 0x043A,DR4
0xFCDCBE 7A1F043E MOV 0x043E,DR4
0xFCDCC2 7E1445AE MOV WR2,#0x45AE
0xFCDCC6 7E0400FD MOV WR0,#0x00FD
0xFCDCCA 7E34794F MOV WR6,#0x794F
0xFCDCCE 7E240001 MOV WR4,#0x0001
0xFCDCD2 9AFD1112 ECALL Print(FD1112)
172: }
173:
174:
175:
176: if(0x59 != gucTemp)
177: {
0xFCDCD6 90796C MOV DPTR,#0x796C
0xFCDCD9 E0 MOVX A,@DPTR
0xFCDCDA BEB059 CMP R11,#0x59
0xFCDCDD 6818 JE FCDCF7
178: Print("\r\n not ok,datax = 0x%x!!!!!!!!\r\n",&gucTemp,0,0,0);
0xFCDCDF 9F11 SUB DR4,DR4
0xFCDCE1 7A1F0436 MOV 0x0436,DR4
0xFCDCE5 7A1F043A MOV 0x043A,DR4
0xFCDCE9 7A1F043E MOV 0x043E,DR4
0xFCDCED 7E14458D MOV WR2,#0x458D
0xFCDCF1 7E0400FD MOV WR0,#0x00FD
179: }
180: else
181: {
0xFCDCF5 8016 SJMP FCDD0D
182: Print("\r\n ok,datax = 0x%x\r\n",&gucTemp,0,0,0);
0xFCDCF7 9F11 SUB DR4,DR4
0xFCDCF9 7A1F0436 MOV 0x0436,DR4
0xFCDCFD 7A1F043A MOV 0x043A,DR4
0xFCDD01 7A1F043E MOV 0x043E,DR4
0xFCDD05 7E144578 MOV WR2,#0x4578
0xFCDD09 7E0400FD MOV WR0,#0x00FD
0xFCDD0D 7E34796C MOV WR6,#0x796C
0xFCDD11 7E240001 MOV WR4,#0x0001
0xFCDD15 9AFD1112 ECALL Print(FD1112)
183: }
我测试没您说的问题:
变量定义为xdata:
按您的要求使用printf函数打印变量内容:
串口助手接收正确:
能否给出一个最小的可复现问题的工程呢?
我这里测试xdata读写正确,暂时无法复现你所说问题
页:
[1]