[an error occurred while processing this directive]
... кстати, у меня в этой же программе стоит задача (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено arreg 10 октября 2006 г. 23:24
В ответ на: может быть... а и впрямь! А команда WriteFile не аппаратно льёт несколько байтов? И вообще, а что же делать? ... Вот зараза! (+) отправлено <font color=gray>arreg</font> 10 октября 2006 г. 23:06

...проверить скорость выполения команды. Должно быть не более 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++;
}



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание