使用mov操作读内存错误
我使用这个MOV操作函数读内存然后使用串口回显出来
我只在EEPROM中使用IAP的方式写入了128个字节
上面这个函数我最开始设置的是读128次,读出来的结果是正常的;
然后我把他设置成了读256结果就无任何返回结果;
设置成512就只读出了256个字节;
我使用的是STC32G128K,频率是22.1184,用户EEPROM设置的128K。
unsigned char Iap_Read_Byte(unsigned char sector,unsigned int addr)
{
return *(CBYTE+IAP_OFFSET+sector*0x0200+addr);
}
DebugLab 发表于 2025-7-5 22:21
他这个读eeprom的操作有大小限制吗,不管是IAP或者MOV都是使用大一点的循环来读都是会出问题 DebugLab 发表于 2025-7-5 22:21
我循环读取128个字节的时候没问题
但是循环读取256个字节的时候就只有第一个0xff被读取出来了,而且这个字节我也不知道是从哪读取出来的
DebugLab 发表于 2025-7-5 22:21
CBYTE 这个的含义是什么?
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
DebugLab 发表于 2025-7-21 14:43
CBYTE就是((unsigned char volatile code *) 0)
C51 中 XBYTE、CBYTE、DBYTE的定义在 ABSACC.H 中
源文件 ...
感谢大佬,等于这个做了指针弱转换了对吧
页:
[1]