极尊宝 发表于 前天 23:49

调试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:         }











梁工 发表于 昨天 21:59

我测试没您说的问题:

变量定义为xdata:


按您的要求使用printf函数打印变量内容:


串口助手接收正确:


王昱顺 发表于 2 小时前

能否给出一个最小的可复现问题的工程呢?
我这里测试xdata读写正确,暂时无法复现你所说问题
页: [1]
查看完整版本: 调试STC32G144K246的xdata诡异现象