[an error occurred while processing this directive]
|
...проверить скорость выполения команды. Должно быть не более 2 мс. Я забабахал мильтимедиатаймер, но ведь подлая винда имеет право потомозить сколько-нибудь. Я, в принципе, имею право повторять измерения до тех пор, пока не буду точно уверен, что винда не тормозила в это время. Но как я это обнаружу?
MMRESULT TimerID;
unsigned long int MyTimerCount;
void CALLBACK TimerProc(unsigned int uID, unsigned int uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);void __fastcall TForm1::Button_16Click(TObject *Sender)
{
unsigned char flag=0; unsigned char i;Edit_16->Text="Время перестройки, не более: ??? мс.";
// Установка первой частоты:
BytesToW[0]=0x82; BytesToW[1]=((ScrollBar_14->Position)>>7)&0x7f; BytesToW[2]=(ScrollBar_14->Position)&0x7f;
WriteFile(ComPort,&BytesToW,3,&nCharWait,NULL);
if(ReadFile(ComPort,&BytesToR,2,&nCharWait,NULL)==false) { Edit_16a->Text="Ошибка"; return; }
else if(BytesToR[1]!=0) { Edit_16a->Text="Ошибка "+IntToStr(BytesToR[1]); return; }
else if(BytesToR[0]!=BytesToW[0]) { Edit_16a->Text="Ошибка"; return; }
else Edit_16a->Text="ОК";// Чтение сигнала захвата:
for (i=0;i<10;i++) {
BytesToW[0]=0x88; WriteFile(ComPort,&BytesToW,1,&nCharWait,NULL);
if(ReadFile(ComPort,&BytesToR,4,&nCharWait,NULL)==false) { Edit_16a->Text="Ошибка"; return; }
else if(BytesToR[1]!=0) { Edit_16a->Text="Ошибка "+IntToStr(BytesToR[1]); return; }
else if(BytesToR[0]!=BytesToW[0]) { Edit_16a->Text="Ошибка"; return; }
else if(BytesToR[2]!=BytesToW[0]) { Edit_16a->Text="Ошибка"; return; }
else if(nCharWait!=4) { Edit_16a->Text="Ошибка"; return; }
else { Edit_16a->Text="ОК"; if(BytesToR[2]!=0) flag=1; }
if(flag==1) break;
}
if(i>=9) { Edit_16a->Text="Ошибка"; return; }Sleep(100);
unsigned int freq=ScrollBar_15->Position;MyTimerCount=0; unsigned long int static start=MyTimerCount;
while(start==MyTimerCount); start=MyTimerCount;// Установка второй частоты:
BytesToW[0]=0x82; BytesToW[1]=(freq>>7)&0x7f; BytesToW[2]=freq&0x7f;WriteFile(ComPort,&BytesToW,3,&nCharWait,NULL);
if(ReadFile(ComPort,&BytesToR,2,&nCharWait,NULL)==false) { Edit_16a->Text="Ошибка"; return; }
else if(BytesToR[1]!=0) { Edit_16a->Text="Ошибка "+IntToStr(BytesToR[1]); return; }
else if(BytesToR[0]!=BytesToW[0]) { Edit_16a->Text="Ошибка"; return; }// Чтение сигнала захвата:
flag=0;
for (int i=0;i<10;i++) {
BytesToW[0]=0x88; WriteFile(ComPort,&BytesToW,1,&nCharWait,NULL);
if(ReadFile(ComPort,&BytesToR,4,&nCharWait,NULL)==false) { Edit_16a->Text="Ошибка"; return; }
else if(BytesToR[1]!=0) { Edit_16a->Text="Ошибка "+IntToStr(BytesToR[1]); return; }
else if(BytesToR[0]!=BytesToW[0]) { Edit_16a->Text="Ошибка"; return; }
else if(BytesToR[2]!=BytesToW[0]) { Edit_16a->Text="Ошибка"; return; }
else if(nCharWait!=4) { Edit_16a->Text="Ошибка"; return; }
else { if(BytesToR[2]!=0) flag=1; }
if(flag==1) break;
}
if(i>=9) { Edit_16a->Text="Ошибка"; return; }signed int dt=MyTimerCount-start;
Edit_16->Text="Время перестройки, не более: "+IntToStr(dt)+" мс.";}
void CALLBACK TimerProc(unsigned int uID, unsigned int uMsg, DWORD dwUser, DWORD dw1, DWORD dw2) {
MyTimerCount++;
}