mwz 发表于 2025-7-5 19:02:44

使用mov操作读内存错误





我使用这个MOV操作函数读内存然后使用串口回显出来




我只在EEPROM中使用IAP的方式写入了128个字节
      上面这个函数我最开始设置的是读128次,读出来的结果是正常的;
      然后我把他设置成了读256结果就无任何返回结果;
      设置成512就只读出了256个字节;

我使用的是STC32G128K,频率是22.1184,用户EEPROM设置的128K。

DebugLab 发表于 2025-7-5 22:21:45

unsigned char Iap_Read_Byte(unsigned char sector,unsigned int addr)
{
        return *(CBYTE+IAP_OFFSET+sector*0x0200+addr);
}

mwz 发表于 2025-7-6 12:08:36

DebugLab 发表于 2025-7-5 22:21


他这个读eeprom的操作有大小限制吗,不管是IAP或者MOV都是使用大一点的循环来读都是会出问题

mwz 发表于 2025-7-6 12:58:06

DebugLab 发表于 2025-7-5 22:21


我循环读取128个字节的时候没问题

但是循环读取256个字节的时候就只有第一个0xff被读取出来了,而且这个字节我也不知道是从哪读取出来的

fujigogogo 发表于 2025-7-21 14:31:59

DebugLab 发表于 2025-7-5 22:21


CBYTE 这个的含义是什么?

DebugLab 发表于 2025-7-21 14:43:05

fujigogogo 发表于 2025-7-21 14:31
CBYTE 这个的含义是什么?
CBYTE就是((unsigned char volatile code *) 0)
C51 中 XBYTE、CBYTE、DBYTE的定义在 ABSACC.H 中
源文件位置:Keil_v5\C51\INC
/*--------------------------------------------------------------------------
ABSACC.H

Direct access to 8051 & 251 memory areas for C251 Version 3.
Copyright (c) 1995-2001 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#define CBYTE ((unsigned char volatile code*) 0)
#define DBYTE ((unsigned char volatile data*) 0)
#define PBYTE ((unsigned char volatile pdata *) 0) /* for C51 compatiblity */
#define XBYTE ((unsigned char volatile xdata *) 0)
#define NBYTE ((unsigned char volatile near *)0)
#if __C251__ >= 200
#define HBYTE ((unsigned char volatile huge *)0)
#endif


/* Note: this macros are defined for C51 compatiblity, you may use for*/
/*       new designs the ARRAY or VAR macros defined below            */

#define CWORD ((unsigned int volatile code*) 0)
#define DWORD ((unsigned int volatile data*) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)
#define NWORD ((unsigned int volatile near *)0)
#if __C251__ >= 200
#define HWORD ((unsigned int volatile huge *)0)
#endif


#if __C251__ >= 200
#define CVAR(object, addr)   (*((object volatile code *) (addr)))
#define CARRAY(object, base) ((object volatile code *) (base))
#define DVAR(object, addr)   (*((object volatile data *) (addr)))
#define DARRAY(object, base) ((object volatile data *) (base))
#define HVAR(object, addr)   (*((object volatile huge *) (addr)))
#define HARRAY(object, base) ((object volatile huge *) (base))
#define NVAR(object, addr)   (*((object volatile near *) (addr)))
#define NARRAY(object, base) ((object volatile near *) (base))
#define XVAR(object, addr)   (*((object volatile xdata *) (addr)))
#define XARRAY(object, base) ((object volatile xdata *) (base))
#endif


fujigogogo 发表于 2025-7-21 14:47:58

DebugLab 发表于 2025-7-21 14:43
CBYTE就是((unsigned char volatile code *) 0)
C51 中 XBYTE、CBYTE、DBYTE的定义在 ABSACC.H 中
源文件 ...

感谢大佬,等于这个做了指针弱转换了对吧
页: [1]
查看完整版本: 使用mov操作读内存错误