CH375库函数使用疑问

使用情况: STC89C58 自带1K RAM I/O模式 扇区读写 调用CH375HF5.LIB CH375HF5.H

参照例程:MCS51\FILELIB4\EXAM3

已经能够成功实现数据扇区读写

问题: 1.用WAVE编译,出现WARNING: XDATA SPACE MEMORY OVERLAP

引起Warning的原因是不是 #define FILE_DATA_BUF_ADDR 0x0000 #define DISK_BASE_BUF_ADDR 0x0000 ? 2.编译后,出现 Program size: xdata=1107 我在程序中没有其他地方使用xdata,怎么会用去1107个字节xdata。总共就1024个字节。是不是已经有变量超出范围了? 另外,我想请问一下,库函数中究竟定义了多少字节的xdata全局变量,因为在程序里我还想使用xdata的话,有剩余么? FILE_DATA_BUF_ADDR和DISK_BASE_BUF_ADDR共用地址的话,它们应该是512个字节,其他地方还有大量使用xdata吗?

谢谢

1、是这2个地址相同,造成重叠引起的 2、肯定是你定义了,不然编译器不会报告的,库5用的XDATA由DISK_BASE_BUF_LEN决定,由用户在程序定义的, RAM的分配可以看一下编译后的MAP文件


我没有定义其他的XDATA

我现在用CH375HF5.H和CH375HF5.LIB在加上一个main.c新建了一个项目 其中CH375HF5.H和CH375HF5.LIB原封未动 main.c中内容如下

#define LIB_CFG_DISK_IO 2 #define LIB_CFG_FILE_IO 2 #define LIB_CFG_INT_EN 0 #define DISK_BASE_BUF_ADDR 0x0000 #define FILE_DATA_BUF_ADDR 0x0000 #define FILE_DATA_BUF_LEN 0x0200 #define CH375_INT_WIRE INT0

#include

void main(void) { EA =0; while(1); }

我自己没有再定义任何变量,编译后 Program Size: data=101.4 xdata=1051 code=8696

为什么xdata是1051?

另外,怎么看MAP文件? 谢谢


1、DISK_BASE_BUF:512B(如果未定义DISK_BASE_BUF_LEN,则头文件默认为512),FILE_DATA_BUF:512B,另库里面的还有一些XDATA的变量,查看头文件中UINT8X、UINT16X、UINT32X类型的变量,与编译的结果基本是一致的 另,即使地址一样,总数量也是累加的,这是编译器约定的 2、xx.M51是Map文件


也就是说,编译器至少多算了512B? 因为DISK_BASE_BUF和FILE_DATA_BUF共用了512,而编译器算为1024?


就是这意思,你可以做个最简单的工程验证一下


恩,谢谢。


有几个新的问题:

1.CH375vDiskFat必须在CH375FileOpen( )之后才能查询到正确的结果? 2.如果优盘的格式不是FAT12、FAT16和FAT32中的任意一种,那么CH375FileOpen( )还会返回ERR_SUCCESS吗? 3.假定问题2中返回ERR_SUCCESS,那接下来CH375FileWrite( )还能正常使用吗?


1、是的,FileOpen中分析文件系统 2、我们的库目前仅支持FAT,其他的会返回错误


我与楼主碰到的问题是一样的,但是我的xdata超过1024时程序根本无法运行,请问楼主这个怎么解决 想和你交流交流 QQ:285685272


只有登录才能回复,可以选择微信账号登录