crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> проблемы с чтением из ком-порта, переполнение буфера
Widget
  опции профиля:
сообщение 19.10.2009, 16:50
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 22.7.2009
Пользователь №: 932

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем добрый день!
Есть ГПИ, который выводит данные из ком-порта в таблицу.Чтение порта происходит постоянно в отдельном потоке.Данные идут непрерывно!
Буквально через пару секунд после включения данные начинают выводится рывками.И самое интересное: если отключить устройство от ком порта данные еще некоторое время идут!
вот исходник:
Thread::Thread(QThread *parent)
    : QThread(parent)
{
    status=false;
    marker=0;
    num=0;
    serialDevice=new TSerialDevice("COM1");
    moveToThread(this);
}

Thread::~Thread()
{
    serialDevice->close();
    delete serialDevice;
    serialDevice=0;
}

void Thread::stop()
{
    status=false;
}

void Thread::run()
{
    status=true;
    if(!(serialDevice->open(QIODevice::ReadOnly|QIODevice::Unbuffered))){
        emit massage(serialDevice->deviceName()+" not open!");
        status=false;
    }
    setCOM();
    emit massage("baudrate=\t"+serialDevice->baudRate());
    while(status){
        read();
    }
    serialDevice->close();
    emit massage("Stop");
    return;
}

void Thread::read()
{
    nav_arr.clear();
    arr.clear();
//    marker=0;
//    num=0;
    arr=serialDevice->read(4);
    marker=(((arr.at(3)<<24)&0xFF000000)|((arr.at(2)<<16)&0xFF0000)
            |((arr.at(1)<<8)&0xFF00)|(arr.at(0)&0xFF));
    switch(marker){
    case 0x75868A53:
        arr+=serialDevice->read(4);
        num=(((arr.at(7)<<24) & 0xFF000000)|((arr.at(6)<<16) & 0xFF0000)|
            ((arr.at(5)<<8) & 0xFF00)|((arr.at(4)<<0) & 0xFF));
        nav_arr=serialDevice->read(88+24*num);
        emit data(nav_arr,marker,num);
        break;
    }
    return;
}
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 19.10.2009, 20:11
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


Модераторы, вставьте код в тэги, плиз)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.10.2009, 20:16
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Ну надо посмотреть возможность настроек класса TSerialDevice. Может он аппаратный буфер сильно здоровый использует.
Или настройки самого порта.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 30.3.2020, 6:57