全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1880
推到 Plurk!
推到 Facebook!

我把陣列的hex碼秀在memo上,但是電腦好像當機一樣很慢,請問我那邊寫錯了

答題得分者是:ikk
vk8051
一般會員


發表:22
回覆:33
積分:21
註冊:2007-08-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-04 18:25:20 IP:114.42.xxx.xxx 訂閱

[code cpp]

unsigned char reload_arry[65536];
AnsiString tr;

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) ',';

}
Memo1->Lines->Text = tr;

[/code]
------
vincent
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-06 00:28:38 IP:218.168.xxx.xxx 訂閱
試試在迴圈裡面加入
Application->ProcessMessages();
編輯記錄
taishyang 重新編輯於 2009-04-06 00:29:00, 註解 無‧
boss.tw
高階會員


發表:15
回覆:109
積分:194
註冊:2005-05-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-06 01:23:16 IP:122.116.xxx.xxx 訂閱
Dear taishyang
其實我昨天也想回這個
但是我實際上試了沒用
所以就沒回,不知你試的結果是否跟我一樣

===================引 用 taishyang 文 章===================
試試在迴圈裡面加入
Application->ProcessMessages();
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-06 09:47:07 IP:163.28.xxx.xxx 訂閱
我試過不會慢呀,,
你可能要trace real_data_lgh 到底是多少...
------
FPGA驗證, FPGA開發平台, http://smims.com
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-06 10:07:06 IP:118.169.xxx.xxx 訂閱
加入Application->ProcessMessages();
只是讓AP不會被hold住可以拖曳form,我不知道發問者[當機]是不是指這個 ^^
vk8051
一般會員


發表:22
回覆:33
積分:21
註冊:2007-08-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-06 10:14:01 IP:220.130.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
我試過不會慢呀,,
你可能要trace real_data_lgh 到底是多少...

不好意思今天才看到大家已經回我~
real_data_lgh 會變化範圍是1~65535,然後變慢的時候是出現在65535時,因為陣列變長所以我要把它一組一組轉到memo上顯示就變慢,如果只有幾百個是看不出慢,情況是這樣的前輩,再麻煩你指導一下,謝謝
------
vincent
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-04-06 10:21:13 IP:163.28.xxx.xxx 訂閱
問題是出在
Memo1->Lines->Text = tr;
一次處理了太多的內容, 建議可以拆開顯示....

[code cpp]
for( unsigned int w=0; w{
....
if ( (w % 20) == 0 )
{
Memo1->Lines->Add(tr);
tr = "";
}
}
[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
vk8051
一般會員


發表:22
回覆:33
積分:21
註冊:2007-08-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-04-06 10:46:06 IP:220.130.xxx.xxx 訂閱

===================引 用 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 reload_arry[total_lgh] =hex_code[j] , total_lgh ;
}//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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-04-06 10:54:19 IP:163.28.xxx.xxx 訂閱
你的問題, 應該是屬於畫面顯示問題, 
可以的話, 將顯示的部份Memo1->Lines->Add(tr)交給thread去顯示,
讓你的主畫面不會block....
------
FPGA驗證, FPGA開發平台, http://smims.com
vk8051
一般會員


發表:22
回覆:33
積分:21
註冊:2007-08-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-04-06 11:32:11 IP:220.130.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
你的問題, 應該是屬於畫面顯示問題,
可以的話, 將顯示的部份Memo1->Lines->Add(tr)交給thread去顯示,
讓你的主畫面不會block....

收到~~我再試試~謝謝~前輩
------
vincent
系統時間:2024-04-20 1:26:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!