我把陣列的hex碼秀在memo上,但是電腦好像當機一樣很慢,請問我那邊寫錯了 |
答題得分者是:ikk
|
vk8051
一般會員 發表:22 回覆:33 積分:21 註冊:2007-08-10 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
vk8051
一般會員 發表:22 回覆:33 積分:21 註冊:2007-08-10 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
vk8051
一般會員 發表:22 回覆:33 積分:21 註冊:2007-08-10 發送簡訊給我 |
===================引 用 ikk 文 章=================== 問題是出在 Memo1->Lines->Text = tr; 一次處理了太多的內容, 建議可以拆開顯示.... [code cpp] for( unsigned int w=0; w{ .... if ( (w % 20) == 0 ) { Memo1->Lines->Add(tr); tr = ""; } } [/code] 這是我的程式,我的動作是去開啟我自己寫好的8051的hex檔案,然後挑出我要的hex碼放到陣列裡,然後要顯示在memo上看燒錄的內容,目前已加入前輩剛提示的部份但是程式一樣會出現畫面有些原件變空白然後顯示是依序在顯示不像之前那樣好像當在那,但是還是怪怪的~可以在請前輩看一下我的程式內容再指導我一下 void __fastcall TForm1::Button2Click(TObject *Sender) { TStringList* SL = new TStringList();//開一個字串準備存64k以內的程式碼 AnsiString tr; unsigned char *tmp_arry; unsigned char hex_code[1024]; unsigned int each_lgh; unsigned int total_lgh; unsigned int row_lgh;//總的列數 unsigned char H_byte,L_byte; unsigned char code_type; unsigned char fg; //--------------------------------------------------------------------------- if( OpenDialog1->Execute() ) { Memo1->Lines->Clear(); //Memo1->Lines->Add("1.File is opening");//顯示目前動作(_1_) //----初始化要更新時的狀態---------------------------------// for( unsigned int i=0; i<65535; i ) reload_arry[i] = 0xFF; //先reset所有的暫存器 isp_start_flag = 0; isp_display_flag = 0; Page_cnt = 0; //傳送hex的索引值0~65535 real_data_lgh = 0; //----初始化要更新時的狀態---------------------------------// SL->LoadFromFile( OpenDialog1->FileName ); // 整個檔案讀進來 //Memo1->Lines->Add("2.File:" OpenDialog1->FileName); //顯示目前動作(_2_) row_lgh = SL->Count; //先取有幾列 for( unsigned int i=0; i tmp_arry = SL->Strings[i].c_str(); //在把字串轉換到陣列的指標 if(tmp_arry[1]>'9') tmp_arry[1] -= 0x37; else tmp_arry[1] -= 0x30; if(tmp_arry[2]>'9') tmp_arry[2] -= 0x37; else tmp_arry[2] -= 0x30; each_lgh = ((tmp_arry[1]<<4) tmp_arry[2] );//先取出該行的資料有幾個 if( each_lgh == 0 )//表示是最後一筆資料了不作處理--->開啟完畢 { /* 到時測試時要注意是否真的hex碼最後一個結束碼都是00 這邊在處理結束分解碼的動作!!因為已經沒有碼了!! */ //Memo1->Lines->Add("3.File has been opened"); //顯示目前動作(_3_) Button3->Enabled=1;//啟動更新程式鍵 //把開啟的檔案碼顯示在MEMO1但是因為速度會變很慢所以先不顯示 fg=0; for( unsigned int w=0; w if( w == (real_data_lgh-1) ) tr = IntToHex(reload_arry[w],2); else tr = IntToHex(reload_arry[w],2) ','; fg ; if ( fg >= 16 ) { Memo1->Lines->Add(tr); tr = ""; fg = 0; } else if( w == (real_data_lgh-1) ) { Memo1->Lines->Add(tr); tr = ""; fg = 0; } //Application->ProcessMessages(); } //Memo1->Lines->Text = tr; } else { //讀完每行多少資料後,這邊在讀要寫到的啟始位置共4個Byte if(tmp_arry[3]>'9') tmp_arry[3] -= 0x37; else tmp_arry[3] -= 0x30; if(tmp_arry[4]>'9') tmp_arry[4] -= 0x37; else tmp_arry[4] -= 0x30; H_byte = ((tmp_arry[3]<<4) tmp_arry[4] ); if(tmp_arry[5]>'9') tmp_arry[5] -= 0x37; else tmp_arry[5] -= 0x30; if(tmp_arry[6]>'9') tmp_arry[6] -= 0x37; else tmp_arry[6] -= 0x30; L_byte = ((tmp_arry[5]<<4) tmp_arry[6] ); //--------------------------------------------------------------- total_lgh = (( H_byte<<8) L_byte); //---這邊還要加上當行的所有byte數才是真的長度,這樣比較才對!! if( (total_lgh each_lgh) > real_data_lgh )//計數總共填入多少hex碼 { real_data_lgh = total_lgh; //判斷那一次要寫的位置是目前最大的就改存一次 real_data_lgh =each_lgh; //這除了寫入位置以外還有當列所有Bytes數這樣就是程式最大值 } //--------------------------------------------------------------- //在讀取取資料的格式00的才是我們要的 if(tmp_arry[7]>'9') tmp_arry[7] -= 0x37; else tmp_arry[7] -= 0x30; if(tmp_arry[8]>'9') tmp_arry[8] -= 0x37; else tmp_arry[8] -= 0x30; code_type = ((tmp_arry[7]<<4) tmp_arry[8] ); if( code_type == 0 )//資料的格式00的才是我們要的 { for( unsigned int a=0; a if(tmp_arry[ ((a*2) 9) ]>'9') tmp_arry[((a*2) 9)] -= 0x37; else tmp_arry[((a*2) 9)] -= 0x30; //--------------------------------- if(tmp_arry[ ((a*2) 10) ]>'9') tmp_arry[((a*2) 10)] -= 0x37; else tmp_arry[((a*2) 10)] -= 0x30; hex_code[a] = ((tmp_arry[((a*2) 9)]<<4) tmp_arry[((a*2) 10)] ); } //取完每列的值之後在載入到總hex碼陣列 for( unsigned int j=0; j }//if }//if( each_lgh == 0 ) else }//for i //顯示目前動作(_4_) //Memo1->Lines->Add("4.Dates:" IntToStr(real_data_lgh) " Byte"); } delete SL; }
------
vincent |
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
vk8051
一般會員 發表:22 回覆:33 積分:21 註冊:2007-08-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |