005
08.06.2004, 13:57 Uhr
Unwissende
...die wirklich Unwissende 8-)
|
Das ist der Timer, der dafür sorgt, dass die Progressbar aktualisiert wird:
C++: |
void CComputeDlg::OnTimer(UINT nIDEvent) { if (select_test_mode==true) { CProgressCtrl* pBar=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pBar->SetPos((i)*100/10); //der Test wird max. 100mal durchgeführt-eine willkürlich gewählte Zahl... } else //if (select_test_mode==false) { CProgressCtrl* pBar_1=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pBar_1->SetPos((i_add)*100/8388608); }
CDialog::OnTimer(nIDEvent); }
|
Das ist der Code, (der hinter dem Button auf der Oberfläche steht) ist: (oh Mann, vor lauter Englisch kann ich kein Deutsch mehr *wahhh*)
C++: |
void CComputeDlg::OnStartAddr() { int err_num=0; UINT32 start_address; UINT32 end_address; FILE *fp; // start_address = g_val; end_address = start_address + g_size - 1; //Byte-Adressierung range = end_address - start_address; select_test_mode=false; /*GetDlgItem(IDC_START)->EnableWindow(TRUE); GetDlgItem(IDC_START_ADDR)->EnableWindow(TRUE);*/ //GetDlgItem(IDC_Text_Addressline)->ShowWindow(TRUE); //GetDlgItem(IDC_Text_Dataline)->ShowWindow(FALSE);
//g_size= 32MB= 33554432Bytes= 268435456Bit //that means: 8M =8388608 Datawords (32Bit each) fp= get_fp(); if (fp) { fprintf(fp, "\nAddressline Test....\n"); }
err_num = err_num + check_addressline(start_address, end_address); }
getBackError=(UINT8)err_num + getBackError;
}
|
und hier die Fkt., also die Implementierung des eigentlichen Tests:
C++: |
int CComputeDlg::check_addressline(unsigned long start, unsigned long end) { UINT32 *addr; //pointer to first memory location UINT32 value_r; //value read from memory UINT32 value_w=0; //value to write to memory UINT32 err_count=0; //number of detec UINT32 mask = 0xFFFFFFFF; MSG message; FILE *fp;
m_nTimer=SetTimer(2,100,NULL); ASSERT(m_nTimer!=0); fp= get_fp();
addr=(UINT32*)start; //wird addr +4 hochgezählt? -->jep! while (addr <=(UINT32*)end) { *addr++=value_w++; //writes a ramp into the memory //addr=addr+4; } addr=(UINT32*)start + 4 ; // Fehler generieren *addr= 55;
addr=(UINT32*)start; while(addr <= (UINT32*)end) { value_r=(*addr++) & mask; /* dummy_1=value_r; value_w--;*/ i_add++;
if (::PeekMessage(&message,NULL,0,0,PM_REMOVE)) //cancel of ramtest possible { ::TranslateMessage(&message); ::DispatchMessage(&message); }
//addr=addr+4; //wortweise if (value_r != value_w++ & mask) { //in case of an error: if (fp) //&& (prot_addr_err<= MAX_ERR)) { fprintf(fp,"0x%.08x: w: %d\t r: %d\n",addr, value_w, value_r); } err_count++; //increments no. of errors } if (err_count>=MAX_ERR) { return err_count; } } KillTimer(2); return err_count; }
|
und hier der Code für einen Abbruchbutton. NAch drücken von diesem kommt eben diese Debug-Assertion: (Naja, bisher wird ja nur die Fkt OnCancel der Basisklasse aufgerufen, mehr nicht...)
C++: |
void CComputeDlg::OnCancel2() //OK-Button auf der GUI { abbr=true; ij=100; // KillTimer(1); // KillTimer(2); CDialog::OnCancel(); }
|
-- __________________________________ Unwissenheit ist vorläufig- Dummheit für immer |