找回密码
 立即注册
查看: 242|回复: 4

调试STC32G144K246的xdata诡异现象

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-11-07 15:48:38
已绑定手机

1

主题

1

回帖

21

积分

新手上路

积分
21
发表于 2025-11-5 23:49:13 | 显示全部楼层 |阅读模式
      把变量用xdata定义,然后赋值,打印出来,居然全部是0,如果把变量定义成edata,数据就正常


     KEIL配置如下:
          截图202511052344555338.jpg          截图202511052345417910.jpg


      部分程序:


    变量用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:         }









  

1.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:253
  • 最近打卡:2025-12-17 11:28:25

84

主题

7156

回帖

1万

积分

超级版主

积分
15260
发表于 2025-11-6 21:59:58 | 显示全部楼层
我测试没您说的问题:

变量定义为xdata:
截图202511062158091983.jpg

按您的要求使用printf函数打印变量内容:
截图202511062159135663.jpg

串口助手接收正确:
截图202511062159514209.jpg

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:641
  • 最近打卡:2025-12-17 10:15:23
已绑定手机
已实名认证

123

主题

3278

回帖

8316

积分

版主

积分
8316
发表于 2025-11-7 09:23:59 | 显示全部楼层
能否给出一个最小的可复现问题的工程呢?
我这里测试xdata读写正确,暂时无法复现你所说问题
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-11-07 15:48:38
已绑定手机

1

主题

1

回帖

21

积分

新手上路

积分
21
发表于 2025-11-7 15:48:38 | 显示全部楼层
截图202511071544431443.jpg


问题找到了,在初始化中使能了EXTRAM。这里对外部扩展XRAM的描述是不准确的,使能了EXTRAM的话,内部扩展的128K XRAM就不能正确读写了,而不是不受影响。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:229
  • 最近打卡:2025-12-17 13:29:09
已绑定手机

8

主题

51

回帖

123

积分

注册会员

积分
123
发表于 2025-11-24 08:33:56 | 显示全部楼层
大佬过招,果然精彩,学到到 学到了
但使龙城飞将在,不教胡马度阴山!
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-18 22:24 , Processed in 0.137933 second(s), 65 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表