我購買了CH375開發(fā)板,使用的仿真器是"上海星研電子科技有限公司"生產(chǎn)的"Star51在線實(shí)時(shí)仿真器"。使用中發(fā)現(xiàn)如果程序生成的.HEX文件寫到51單片機(jī)中,開發(fā)板能夠完成程序所要求的功能,使用正常。但是在使用仿真器實(shí)時(shí)仿真的時(shí)候,375初始化程序CH375LibInit( )始終報(bào)錯(cuò),錯(cuò)誤號(hào)是81H,說375沒正常工作。仿真軟件使用的是keil的,不知道貴公司在線仿真使用的是哪家公司什么型號(hào)的仿真器,仿真軟件是哪款?由于目前不能使用仿真器,所以給程序的調(diào)試帶來了很大困難,希望貴公司能夠盡快給與答復(fù),謝謝!
mInitSTDIO( ) 不是CH375的初始化程序,是串口初始化程序. 是不是你的仿真器動(dòng)用了外部的資源,比如說你單步執(zhí)行時(shí)仿真器會(huì)不斷的讀取外部RAM. 我用過偉福的訪真器沒有問題.
對(duì)不起,是我寫錯(cuò)了,應(yīng)該是CH375LibInit( )這個(gè)程序不能仿真通過
不論單步執(zhí)行與全速運(yùn)行,CH375LibInit( )這個(gè)程序始終報(bào)錯(cuò),但是仿真其他程序都不發(fā)生錯(cuò)誤。由于我也不清楚CH375LibInit( )具體代碼,只參看了頭文件里的程序。
UINT8 CH375LibInit( void ) /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ { if ( SP > 0xF0 ) return( 0xFC ); CH375LibConfig = LIB_CFG_VALUE; DISK_BASE_BUF[0] = 0; if ( CH375GetVer( ) < CH375_LIB_VER ) return( 0xFF ); return( CH375Init( ) ); }
估計(jì)是CH375Init( )這個(gè)函數(shù)仿真不能通過,也不知道這個(gè)函數(shù)究竟對(duì)仿真器有什么操作和要求。 對(duì)仿真器的設(shè)置上應(yīng)該沒有問題,因?yàn)樯傻?HEX燒寫到89C55WD單片機(jī)上程序可以正常執(zhí)行。
同時(shí)咨詢一下關(guān)于開發(fā)板示例程序中一點(diǎn)問題。 在CH375\EVT\PUB\MCS51C\FILELIB4\EXAM1中的CH375HFT.C程序中有如下一段程序:
if ( i == ERR_MISS_DIR || i == ERR_MISS_FILE ) { /* 沒有找到文件 */ /* 列出文件 */ if ( i == ERR_MISS_DIR ) pCodeStr = "\\*"; /* C51子目錄不存在則列出根目錄下的文件 */ else pCodeStr = "\\C51\\CH375*"; /* CH375HFT.C文件不存在則列出\C51子目錄下的以CH375開頭的文件 */ printf( "List file %s\n", pCodeStr ); for ( c = 0; c < 255; c ++ ) { /* 最多搜索前255個(gè)文件 */ i = mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, pCodeStr ); /* 搜索文件名,*為通配符,適用于所有文件或者子目錄 */ mCmdParam.Open.mPathName[ i ] = c; /* 根據(jù)字符串長度將結(jié)束符替換為搜索的序號(hào),從0到255 */ i = CH375FileOpen( ); /* 打開文件,如果文件名中含有通配符*,則為搜索文件而不打開 */ if ( i == ERR_MISS_FILE ) break; /* 再也搜索不到匹配的文件,已經(jīng)沒有匹配的文件名 */ if ( i == ERR_FOUND_NAME ) { /* 搜索到與通配符相匹配的文件名,文件名及其完整路徑在命令緩沖區(qū)中 */ printf( " match file %03d#: %s\n", (unsigned int)c, mCmdParam.Open.mPathName ); /* 顯示序號(hào)和搜索到的匹配文件名或者子目錄名 */ continue; /* 繼續(xù)搜索下一個(gè)匹配的文件名,下次搜索時(shí)序號(hào)會(huì)加1 */ } else { /* 出錯(cuò) */ mStopIfError( i ); break; } }
如果我的U盤中根目錄下并不存在C51這個(gè)文件夾,那么程序應(yīng)該顯示根目錄下前255個(gè)文件名。 根據(jù)程序來看,我有一個(gè)地方?jīng)]有弄明白。 如果執(zhí)行 if ( i == ERR_MISS_DIR ) pCodeStr = "\\*"; 那么每次搜索文件的時(shí)候 mCmdParam.Open.mPathName 都是 "\\*" 那么它是如何來完成記錄文件名稱功能呢 不知道我問得請(qǐng)不清楚
比如說我U盤根目錄下有2個(gè)文件,分別是A.TXT和B.TXT 在執(zhí)行上面那段程序中A.TXT和B.TXT這兩個(gè)文件名是如何分別到入到 mCmdParam.Open.mPathName 中的呢? 哪句程序完成此功能?文字
我就是想問在每次執(zhí)行 i = mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, pCodeStr ); 的過程中 如何判斷上一個(gè)文件名已經(jīng)被顯示過 也就是說文件名是如何一個(gè)一個(gè)被顯示出來的
你的仿真器和CH375接觸是否好呢??
當(dāng)你搜索文件名時(shí),*為通配符,后面還有一個(gè)字節(jié)的文件序號(hào).當(dāng)函數(shù)返回時(shí)文件名還放在這個(gè)緩沖區(qū)里.當(dāng)然就可以被讀出了.
仿真器接觸正常 設(shè)備方式都能正常仿真 只有主機(jī)方式中初始化375不能正常工作
感謝usbxf的解答 但是我還是沒有解決心中的問題 請(qǐng)問usbxf能不能幫我解決問題 十分感謝
我現(xiàn)在也在用ch375做usb主機(jī),在CH375LibInit( )時(shí)也是返回81H,請(qǐng)問樓主事后解決問題了嗎?能否和您交流一下?我的郵箱是個(gè)人信息保護(hù),已隱藏。 十分感謝
0X81返回的話那是硬件問題,先做測(cè)試命令(0X06),看下返回的數(shù)據(jù)是不是你輸出數(shù)據(jù)的取反
我目前也遇到了這樣的問題
使用的仿真器是"上海星研電子科技有限公司"生產(chǎn)的"Star51在線實(shí)時(shí)仿真器"。單片機(jī)選用的是AT89C51RC2。使用中發(fā)現(xiàn)如果程序生成的.HEX文件寫到單片機(jī)中,系統(tǒng)能夠完成程序所要求的功能,使用正常。但是在使用仿真器實(shí)時(shí)仿真的時(shí)候,375初始化程序CH375HF4.LIB( )始終報(bào)錯(cuò),錯(cuò)誤號(hào)是81H,說375沒正常工作。仿真軟件使用的是keil的,
請(qǐng)問樓主事后解決問題了嗎?能否和您交流一下?在此先謝過了。
郵箱:個(gè)人信息保護(hù),已隱藏 QQ:14522364