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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Пропадет первый байт при приеме
krik
сообщение Apr 1 2010, 17:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 29-08-05
Пользователь №: 8 044



Пересылаю массивы байт от COM1 в COM2 через нульмодемный кабель на одном компе. Использую прямой доступ к порту -Giveio ( или UserPort) с одной стороны, и терминалка с другой. В обоих случаях при приеме в программке с прямой доступом к порту пропадает самый первый байт на скорости 115кбит. На меньших скоростях-нормально, при приеме одного байта -нормально. Как только переходишь на 115200 -принятый массив начинается со второго байта.
Кто нибудь сталкивался с чем-то подобным?
Go to the top of the page
 
+Quote Post
SFx
сообщение Apr 1 2010, 19:24
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



а управление потоком какое стоит? все настройки в студи, телепаты в отпуске.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 1 2010, 19:33
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(krik @ Apr 1 2010, 20:52) *
Использую прямой доступ к порту -Giveio ( или UserPort)...

осталось узнать зачем???


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
XVR
сообщение Apr 2 2010, 05:54
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(zltigo @ Apr 1 2010, 23:33) *
Цитата
Использую прямой доступ к порту -Giveio ( или UserPort)...

осталось узнать зачем???
Видимо, что бы пропадал первый байт rolleyes.gif
Go to the top of the page
 
+Quote Post
krik
сообщение Apr 2 2010, 15:07
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 29-08-05
Пользователь №: 8 044



Цитата(zltigo @ Apr 1 2010, 23:33) *
осталось узнать зачем???

А затем что обычным образом через функции WINAPI работает медленнее в разы.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2010, 15:18
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(krik @ Apr 2 2010, 18:07) *
А затем что обычным образом через функции WINAPI работает медленнее в разы.

1.Да ну? Не успевает 115200 smile.gif
2.Вообще-то к портам RS232, в отличие от LPT, и так штатно доступ открыт.
3.Еще одно наслоение виде giveio только вносит дополнительное торможение.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ASN
сообщение Apr 2 2010, 15:24
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



krik
На скорости 115200 при практически постоянном потоке работали сутками. Через стандартный WINAPI не пропадало НИ ОДНОГО байта. А задач на ПК "крутиться" много (одних COM штук 6). Не тормозит.
С Linux через TTY точно такая же ситуация.
Go to the top of the page
 
+Quote Post
krik
сообщение Apr 2 2010, 15:35
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 29-08-05
Пользователь №: 8 044



Цитата(SFx @ Apr 1 2010, 23:24) *
а управление потоком какое стоит? все настройки в студи, телепаты в отпуске.


// вот и весь кусок. Используется UserPort
double dltt=0;
unsigned char buf[64]={0};
unsigned char*pbuf=buf;
unsigned char*str="HiTerminal!";
int c; int i=0;

// установки СОМ порта
outportb(BRH,0);//запрет прерываний

outportb(LCR,0x80);//bit DLAB=1

outportb(PORT1,0x1);//115200 bit

outportb(BRH,0);//

outportb(LCR,0x03);// 8 бит, 1-стоп, без контроля четности

outportb(FIFO,0);//запрет FIFO

outportb(MCR,0);//запрет modem

//======== ВЫВОД====================//
while (*str!=0)
{
outportb(PORT1,*str++);
do
{c=inportb(PORT1+5)&0x40;}
while(c==0);
}

//======== ВВОД====================//
while(1)
{
while((c=inportb(PORT1+5)&0x01)!=0x01) ;
buf[i]=inportb(PORT1);
i++; //число принятых байт
if ( buf[i-1]==0x30)// символ конца посылки
break;// выход из цикла опроса

}

.............................................
hUserPort = CreateFile("\\\\.\\UserPort", GENERIC_READ, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
CloseHandle(hUserPort); // Activate the driver
............................................................................
pz = StartUpIoPorts(PORT1, true, hParWind);// hParentWnd); //

...............................................
void outportb(UINT portid, BYTE value)
{
__asm mov edx,portid
__asm mov al,value
__asm out dx,al
}

BYTE inportb(UINT portid)
{
unsigned char value;

__asm mov edx,portid
__asm in al,dx
__asm mov value,al
return value;
}





Цитата(zltigo @ Apr 2 2010, 19:18) *
1.Да ну? Не успевает 115200 smile.gif
2.Вообще-то к портам RS232, в отличие от LPT, и так штатно доступ открыт.
3.Еще одно наслоение виде giveio только вносит дополнительное торможение.


См. например книжку Агурова" Последовательные интерфейсы ПК" стр.207.

Цитата(ASN @ Apr 2 2010, 19:24) *
krik
На скорости 115200 при практически постоянном потоке работали сутками. Через стандартный WINAPI не пропадало НИ ОДНОГО байта. А задач на ПК "крутиться" много (одних COM штук 6). Не тормозит.
С Linux через TTY точно такая же ситуация.


Пропадает то не на WINAPI. С WINAPI просто меделнно. За 100 млсек надо успеть обменяться с 8-9 абонентами.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2010, 15:36
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(krik @ Apr 2 2010, 18:33) *
// вот и ...

Простите, но это чистое безумие sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 2 2010, 15:40
Сообщение #10


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(krik @ Apr 2 2010, 21:33) *
вот и весь кусок. Используется UserPort


Кошмарsmile.gif Вы отключили FIFO, и надеетесь, что успеете всё принять по опросу? Это Агуров так советует? smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2010, 15:58
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AHTOXA @ Apr 2 2010, 18:40) *
Вы отключили FIFO, и надеетесь, что успеете всё принять по опросу?

Да и с FIFO sad.gif принципиально не изменится ничего. Полное отсутствие системного подхода и непонимание даже того простого факта, что дивный цикл опроса в приложении спокойно может быть прерван и на очень долго. Про то, насколько этот тупой опрос ВПУСТУЮ грузит систему тоже у Автора нет представления.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
krik
сообщение Apr 2 2010, 16:39
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 29-08-05
Пользователь №: 8 044



Цитата(AHTOXA @ Apr 2 2010, 19:40) *
Кошмарsmile.gif Вы отключили FIFO, и надеетесь, что успеете всё принять по опросу? Это Агуров так советует? smile.gif


Агуров ничего здесь не советует. А что кроме опроса здесь может быть?
Go to the top of the page
 
+Quote Post
ASN
сообщение Apr 2 2010, 16:51
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



krik
Если за 100 млсек надо успеть обменяться с 8-9 абонентами , то удобней и проще подключить к ПК специальный коммуникационный контроллер (к примеру на МК), которые собирает данные с удалённых абонентов и пересылает подготовленные результаты в ПК для отображения. Windows так же как и Linux - это не ОСРВ, попытка использования их в этом режиме оборачивается сплошными проблемами.
Как верно заметил zltigo - отсутствие системного подхода (видимо у Вашего руководства).
Разделение задач на сбор информации и отображение сэкономит Вам массу времени и нервов.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 2 2010, 16:57
Сообщение #14


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(zltigo @ Apr 2 2010, 21:58) *
Да и с FIFO sad.gif принципиально не изменится ничего. Полное отсутствие системного подхода и непонимание даже того простого факта, что дивный цикл опроса в приложении спокойно может быть прерван и на очень долго. Про то, насколько этот тупой опрос ВПУСТУЮ грузит систему тоже у Автора нет представления.


FIFO + мультимедийный таймер + реалтайм приоритет процесса - можно добиться приемлемых результатов, почти сравнимых с грамотной работой через WinAPI smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
krik
сообщение Apr 2 2010, 17:18
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 29-08-05
Пользователь №: 8 044



Цитата(AHTOXA @ Apr 2 2010, 20:57) *
FIFO + мультимедийный таймер + реалтайм приоритет процесса - можно добиться приемлемых результатов, почти сравнимых с грамотной работой через WinAPI smile.gif


FIFO + мультимедийный таймер -поясните если можно.(например как обходиться с FIFO).
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:32
Рейтинг@Mail.ru


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