CH375庫函數(shù)使用疑問

使用情況: STC89C58 自帶1K RAM I/O模式 扇區(qū)讀寫 調(diào)用CH375HF5.LIB CH375HF5.H

參照例程:MCS51\FILELIB4\EXAM3

已經(jīng)能夠成功實現(xiàn)數(shù)據(jù)扇區(qū)讀寫

問題: 1.用WAVE編譯,出現(xiàn)WARNING: XDATA SPACE MEMORY OVERLAP

引起Warning的原因是不是 #define FILE_DATA_BUF_ADDR 0x0000 #define DISK_BASE_BUF_ADDR 0x0000 ? 2.編譯后,出現(xiàn) Program size: xdata=1107 我在程序中沒有其他地方使用xdata,怎么會用去1107個字節(jié)xdata??偣簿?024個字節(jié)。是不是已經(jīng)有變量超出范圍了? 另外,我想請問一下,庫函數(shù)中究竟定義了多少字節(jié)的xdata全局變量,因為在程序里我還想使用xdata的話,有剩余么? FILE_DATA_BUF_ADDR和DISK_BASE_BUF_ADDR共用地址的話,它們應(yīng)該是512個字節(jié),其他地方還有大量使用xdata嗎?

謝謝

1、是這2個地址相同,造成重疊引起的 2、肯定是你定義了,不然編譯器不會報告的,庫5用的XDATA由DISK_BASE_BUF_LEN決定,由用戶在程序定義的, RAM的分配可以看一下編譯后的MAP文件


我沒有定義其他的XDATA

我現(xiàn)在用CH375HF5.H和CH375HF5.LIB在加上一個main.c新建了一個項目 其中CH375HF5.H和CH375HF5.LIB原封未動 main.c中內(nèi)容如下

#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),F(xiàn)ILE_DATA_BUF:512B,另庫里面的還有一些XDATA的變量,查看頭文件中UINT8X、UINT16X、UINT32X類型的變量,與編譯的結(jié)果基本是一致的 另,即使地址一樣,總數(shù)量也是累加的,這是編譯器約定的 2、xx.M51是Map文件


也就是說,編譯器至少多算了512B? 因為DISK_BASE_BUF和FILE_DATA_BUF共用了512,而編譯器算為1024?


就是這意思,你可以做個最簡單的工程驗證一下


恩,謝謝。


有幾個新的問題:

1.CH375vDiskFat必須在CH375FileOpen( )之后才能查詢到正確的結(jié)果? 2.如果優(yōu)盤的格式不是FAT12、FAT16和FAT32中的任意一種,那么CH375FileOpen( )還會返回ERR_SUCCESS嗎? 3.假定問題2中返回ERR_SUCCESS,那接下來CH375FileWrite( )還能正常使用嗎?


1、是的,F(xiàn)ileOpen中分析文件系統(tǒng) 2、我們的庫目前僅支持FAT,其他的會返回錯誤


我與樓主碰到的問題是一樣的,但是我的xdata超過1024時程序根本無法運行,請問樓主這個怎么解決 想和你交流交流 QQ:285685272


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频