[求助]使用CH375連接U盤出現(xiàn)假死

項目中用到CH375寫TXT,//查詢CH375中斷并更新中斷狀態(tài),等待U盤插入時容易出現(xiàn)假死,不知道怎么解決

你所說的假死是什么意思?是不是中斷引腳沒有拉低?


case 0X31: check=CH375DiskConnect();//查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 Com_Data[0X00]=0X0A; Com_Data[0X01]=0X31; Com_Data[0X02]=Ascii[(check>>4)&0X0F]; Com_Data[0X03]=Ascii[check&0X0F]; check=Com_Data[0X00]^Com_Data[0X01]^Com_Data[0X02]^Com_Data[0X03]; Com_Data[0X04]=Ascii[(check>>4)&0X0F]; Com_Data[0X05]=Ascii[check&0X0F]; Com_Data[0X06]=0X0D; for(i=0X00;i<0X07;i++) { Send_Data(Com_Data[i]); } break;看程序,當我收到 0X31的時候 ();//查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 這一步,剛用示波器看了,假死的時候中斷引腳沒有拉低


這個時候U盤是剛插入到CH375里面的嗎?你可以看下CH375的ACT#引腳為高還是為低?


為點平


低電平


那有可能你前面獲取到了設(shè)備連接,后面在獲取的時候check變量值為0X14?那么需要看下CH375DiskStatus這個變量值是多少?


我把操作速度降下來好像可以了,但是持續(xù)寫一段時間又像假死狀態(tài) 500毫秒寫一次


我的QQ442502587,可以打電話嗎


case 0X36: mCopyCodeStringToIRAM(mCmdParam.Open.mPathName,"/RECORD.TXT"); // 文件名,該文件在根目錄下 check=CH375FileOpen(); //打開文件 if(check==ERR_SUCCESS) { mCmdParam.ByteLocate.mByteOffset=0xffffffff; // 移到文件的尾部 check=CH375ByteLocate(); if(check==ERR_SUCCESS) { for(i=0X02;i<26;i++) { Com_Data[i]=Ascii_To_Hex(Com_Data[i]); }

for(i=0X02;i<25;i=i+2) { Com_Data[i]=Com_Data[i]<<4; Com_Data[i]=Com_Data[i]|Com_Data[i+0X01]; }

index=sprintf(mCmdParam.ByteWrite.mByteBuffer,"%02d,%02d,%02d,%02d,",(UINT16)Com_Data[0X02],(UINT16)Com_Data[0X04],(UINT16)Com_Data[0X06],(UINT16)Com_Data[0X08]); mCmdParam.ByteWrite.mByteCount=(unsigned char)index; check=CH375ByteWrite();

index=sprintf(mCmdParam.ByteWrite.mByteBuffer,"%02d-%02d-%02d,",(UINT16)Com_Data[0X0A],(UINT16)Com_Data[0X0C],(UINT16)Com_Data[0X0E]); mCmdParam.ByteWrite.mByteCount=(unsigned char)index; check=CH375ByteWrite();

index=sprintf(mCmdParam.ByteWrite.mByteBuffer,"%02d:%02d:%02d,%02d,",(UINT16)Com_Data[0X10],(UINT16)Com_Data[0X12],(UINT16)Com_Data[0X14],(UINT16)Com_Data[0X16]); mCmdParam.ByteWrite.mByteCount=(unsigned char)index; check=CH375ByteWrite();

index=sprintf(mCmdParam.ByteWrite.mByteBuffer,"%02d\xd\xa",(UINT16)Com_Data[0X18]); mCmdParam.ByteWrite.mByteCount=(unsigned char)index; check=CH375ByteWrite(); //index=sprintf(mCmdParam.ByteWrite.mByteBuffer,"%02d%02d%02d%02d,%02d-%02d-%02d %02d:%02d:%02d,%02d\xd\xa", //(UINT16)Com_Data[0X02],(UINT16)Com_Data[0X04],(UINT16)Com_Data[0X06],(UINT16)Com_Data[0X08], //(UINT16)Com_Data[0X0A],(UINT16)Com_Data[0X0C],(UINT16)Com_Data[0X10],(UINT16)Com_Data[0X12], //(UINT16)Com_Data[0X14],(UINT16)Com_Data[0X16],(UINT16)Com_Data[0X18]); // 將二制制數(shù)據(jù)格式為一行字符串 //mCmdParam.ByteWrite.mByteCount=(unsigned char)index; // 指定本次寫入的字節(jié)數(shù),不能超過MAX_BYTE_IO,否則另用緩沖區(qū)分多次寫入 //check=CH375ByteWrite(); //以字節(jié)為單位向文件寫入數(shù)據(jù),單次讀寫的長度不能超過MAX_BYTE_IO

mCmdParam.Close.mUpdateLen=1; //自動計算文件長度,以字節(jié)為單位寫文件,建議讓程序庫關(guān)閉文件以便自動更新文件長度 i=CH375FileClose(); //關(guān)閉文件 } }

Com_Data[0X00]=0X0A; Com_Data[0X01]=0X36; Com_Data[0X02]=Ascii[(check>>4)&0X0F]; Com_Data[0X03]=Ascii[check&0X0F]; check=Com_Data[0X00]^Com_Data[0X01]^Com_Data[0X02]^Com_Data[0X03]; Com_Data[0X04]=Ascii[(check>>4)&0X0F]; Com_Data[0X05]=Ascii[check&0X0F]; Com_Data[0X06]=0X0D; for(i=0X00;i<0X07;i++) { Send_Data(Com_Data[i]); }

break;假死轉(zhuǎn)臺發(fā)生后,我拔下優(yōu)盤會收到for(i=0X00;i<0X07;i++) { Send_Data(Com_Data[i]); }

回復的數(shù)據(jù),說明程序一直卡在前面,是不是什么地方有while循環(huán)


如果出現(xiàn)死機的情況唯一可以停在庫里面的只有是等中斷函數(shù)。你用的接口是什么接口?模擬并口還是其他的接口?


單片機是STC89C52


那你單片機的具體資源說下,還有你有沒有外擴RAM以及單片機自己自帶RAM有多少?問題是并口還是串口連接? 還有就是如果是并口連接,那么是模擬并口還是總線接口?


單片機的Sram是1280字節(jié) 沒有外擴RAM 是總線并口,我將電路發(fā)到你郵箱吧


硬件看了沒問題。你把你軟件發(fā)到我郵箱我?guī)湍憧聪率欠裼袉栴}。如果可以最好是一個工程文件。


在打擾一下,更新了庫之后連續(xù)寫1000多行之后出現(xiàn)假死 拔掉優(yōu)盤后錯誤代碼是B4 表示文件已經(jīng)關(guān)閉,會不會是變量溢出了,,


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

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