реклама на сайте
подробности

 
 
> Увеличить скорость передачи/приема FX2, Как увеличить скорость для CyAPI метода Bulk?
Shakesbeer
сообщение Apr 23 2013, 14:11
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 8-02-13
Пользователь №: 75 540



Написал простенькую програмку, которая посылает и принимает данные по USB. использую CY7C68013.
За образец взял примеры из CyApI, использую поток thread с Bulk (стандартный Bulkloop.hex) передачами:
Код
: //---------------------------------------------------------------------------
//--------------------------Write-and-Read-----------------------------------  
//---------------------------------------------------------------------------
class WriteAndReadThread : public TThread
{
private:
         void __fastcall Printing();    //âûâîä
protected:
        void __fastcall Execute();      //îñíîâíàÿ ôóíêöèÿ ïîòîêà
public:
        __fastcall WriteAndReadThread(bool CreateSuspended);   //êîíñòðóêòîð ïîòîêà
};
//---------------------------------------------------------------------------
WriteAndReadThread *writereader;  
//---------------------------------------------------------------------------

__fastcall WriteAndReadThread::WriteAndReadThread(bool CreateSuspended) : TThread(CreateSuspended)
{}
//---------------------------------------------------------------------------
void __fastcall WriteAndReadThread::Execute()
{
bmap = new Graphics::TBitmap; // ñíà÷àëà ðèñóåì íà bitmap, ïîòîì âûâîäèì íà ôîðìó
bmap->Width = Form1->Image1->Width;
bmap->Height = Form1->Image1->Height;

AnsiString stryng = Form1->Edit1->Text.c_str();
outBuf=new char[stryng.Length()+1];//length âîçâðàùàåò äëèííó áåç íóëü-òåðìèíàòîðà,ïîýòîìó +1
strcpy(outBuf,stryng.c_str());
length = stryng.Length()+1;
while(!Terminated)
  {
   outOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_OUT");
   UCHAR *outContext;
   outContext = USBDevice->BulkOutEndPt->BeginDataXfer(outBuf, length, &outOvLap);  
   USBDevice->BulkOutEndPt->WaitForXfer(&outOvLap,100);                  
   succesOut = USBDevice->BulkOutEndPt->FinishDataXfer(outBuf, length, &outOvLap,outContext);
   if(!succesOut)   //Åñëè ïðèåì èëè ïåðåäà÷à ñ îøèáêîé ïðîèçîøëè
    {
     writereader->Terminate();      
     if(drawer)drawer->Terminate();
     Form1->SpeedButton1->Caption = "Begin transfer";
     Form1->SpeedButton1->Down = false;
     Form1->Memo1->Lines->Add("Sending error!");
    }
   CloseHandle(outOvLap.hEvent);
   inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN");
   UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inBuf, length, &inOvLap);
   USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100);            
   succesIn = USBDevice->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap,inContext);
   if(!succesIn)   //Åñëè ïðèåì èëè ïåðåäà÷à ñ îøèáêîé ïðîèçîøëè
    {
     writereader->Terminate();      
     if(drawer)drawer->Terminate();
     Form1->SpeedButton1->Caption = "Begin transfer";
     Form1->SpeedButton1->Down = false;
     Form1->Memo1->Lines->Add("Recieving error!");
    }
   Synchronize(Printing);
   CloseHandle(inOvLap.hEvent);
  }
}
//---------------------------------------------------------------------------
void __fastcall WriteAndReadThread::Printing()
{
counter+=strlen(inBuf);
Form1->Label2->Caption = counter;
Form1->Memo2->Lines->Add(AnsiString((char *)inBuf));
for (unsigned int i = 0; i < strlen(inBuf); i++)
  {
   xpic++;
   if (xpic >= Form1->Image1->Picture->Width)
    {
     ypic++;
     xpic = 0;
    }
   if (ypic >= Form1->Image1->Picture->Height)
    {
     ypic = 0;
     Form1->Image1->Canvas->Draw(0,0,bmap);
     tempCol = tempCol - 16;
     if (tempCol<0) tempCol = 255;
    }
   bmap->Canvas->Pixels[xpic][ypic]=TColor(RGB(tempCol,tempCol,tempCol));
  }
ZeroMemory(inBuf, 512);
}
//---------------------------------------------------------------------------

Поток запускается и прекращается по нажатию кнопки.

Скорость с которой передаются и принимаются данные около 1 Мбит/с.
Каким образом можно её увеличить?


--------------------
There are only 10 types of people in the world: those who understand binary, and those who don't.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01345 секунд с 7
ELECTRONIX ©2004-2016