各位技術高手: 我現(xiàn)在在使用U盤讀寫模塊,遇到問題是把U盤讀寫模塊的讀寫程序的一些變量放到XDATA時,編譯可以過關,但是運行不了,不知道怎么回事,各位可否幫幫忙啊 例如: CMD_PARAM mCmdParam; /* 默認情況下該結構將占用64字節(jié)的RAM,可以修改MAX_PATH_LEN常量,當修改為32時,只占用32字節(jié)的RAM */ 把變量定義在外部時如: CMD_PARAM xdata mCmdParam; 運行時出錯; 這是什么問題請各位幫幫忙啊
這一塊主要是地址指針的問題,這樣定義本來是沒有錯誤的,但是問題就出在這里,看一下ExecCommandBuf中變量的定義: unsigned char i, status; unsigned char data *buf; unsigned char xdata *CurrentBuf; 主要看一下buf的定義,我們定義在data區(qū),而CMD_PARAM mCmdParam其實也是定義在data區(qū),這樣一來毫無疑問沒有問題,但是現(xiàn)在把CMD_PARAM mCmdParam改成CMD_PARAM xdata mCmdParam,問題就來了,雖然編譯沒有問題,但是你可以去查看一下反匯編,就可以清楚的知道問題就出以下程序 buf = (unsigned char *)&mCmdParam; /* 指向輸入參數的起始地址 */ do { CH375HM_DATA_WR( *buf ); /* 從索引地址PARA_BUFFER_ADDR開始,寫入參數 */ buf ++; } while ( -- i ); 如果按照你的定義,其實參數參數真正沒有寫對,你主要還是看一下反匯編,這里我就不多說了. 不過還是有解決方法的,那就是定義buf的時候注意一下:定義為unsigned char *buf或者unsigned char xdata*buf;就能解決問題.