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

 
 
> Кому-нибудь приходилось писать в Builder C++ программу для работы с FTDI?
zheka
сообщение Feb 7 2012, 17:07
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Кому-нибудь приходилось писать в Builder C++ программу для работы с FTDI?

Господа, я застрял...
По нажатию кнопки я должен дождаться прихода символа и ответить на него в течение не более 70 мсек.
Стандартная конструкция типа терминала не подходит.

Я отправляю символ и пытаюсь читать ответ:
Код
USBStat=FT_Write(hUSB,TxBuffer,dwBytesToWrite,&dwBytesWritten);

if (!USBStat==FT_OK)
{
USBErr(USBStat);
return;
};

        USBStat=FT_GetStatus(hUSB,&RxBytes,&TxBytes,&EventDWord);



Естественно, читаю ноль байт, так как комп переходит к чтению мгновенно, а ответ не успевает прийти.

Если же ставлю
Код
while(RxBytes==0)
{
Application->ProcessMessages();
USBStat=FT_GetStatus(hUSB,&RxBytes,&TxBytes,&EventDWord);
}

ShowMessage(RxBytes);


То получаю гигантское число. ПРочие манипуляции приводят к зависанию программы.

Как подружить контроллер, FT232RL и этот долбаный Builder C++ ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zheka
сообщение Feb 8 2012, 07:19
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
Не хорошо как то , грубо по отношению к даме которая хочет вам помочь


Упаси меня бог грубить женщине?
Просто ее вариант я уже пробовал, а ProcessMessages мне как раз и посоветовали, чтобы избавиться от зависания. Не помогло.

Цитата
Последний пост - путь к успеху.


Дык пацан уже пришел к успеху:

Код
recieve_ok=0;

    while(recieve_ok==0) // В который раз убеждаюсь - флажок это наше все.
    {
      //Application->ProcessMessages();
      USBStat=FT_GetStatus(hUSB,&RxBytes,&TxBytes,&EventDWord);// спокойно проверяем посылку
        if (RxBytes > 0)
         {
           USBStat=FT_Read(hUSB,RxBuffer,RxBytes,&dwBytesReceived);
             if (!USBStat == FT_OK)
                 {
                  USBErr(USBStat);
                  return;
                  };
        RxBuffer[RxBytes]=0;
       RichEdit1->Lines->Add("Получено: "+AnsiString(RxBytes)+":"+ AnsiString((const char*)RxBuffer));
       recieve_ok=1; // ставим флажок
      }
    }


Осталось рассчитать разумный таймаут и добавить его контроль.

А потоки вещь хорошая, но я к сожалению ни бум-бум в них, а разбираться для решения конкретной текущей задачи времени нет.
Тем более, что тормоза этот код будет вносить лишь при отсутствии ответа от FTDI.
Go to the top of the page
 
+Quote Post
YAM
сообщение Feb 8 2012, 12:40
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 7-07-04
Из: Ukraine
Пользователь №: 291



Ну, а если от FTDI ничего не прийдет - так и умрете в этом цикле wink.gif


--------------------
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 16th August 2025 - 07:19
Рейтинг@Mail.ru


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