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

 
 
> Real time на Windows XP
Slovan
сообщение Sep 27 2012, 20:58
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 28-10-11
Пользователь №: 68 007



Добрый день!

Понимаю всю обсурдность вопроса... но стоит задача - обеспечить передачу UDP пакетов в сеть с жестким интервалом 10мс.
Система только виндоуз и ничего кроме виндоуз. (Причины: драйвера, ПО, просто лень разработчиков изучать другие системы)
В общем, уговорить перейти на что-то более адекватное у меня не получается.

Какие есть варианты?

Мультимедия таймер не обеспечивает необходимой точности.
http://www.intervalzero.com/ - вроде бы то, что нужно. Но непонятно, сколько времени уйдет на освоение и сколько вообще это будет стоить.

Если подключить к COM порту контроллер, который будет каждые 10мс посылать сигнал, и роботать по прерыванию - может это как-то улучшить ситуацию?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Slovan
сообщение Oct 2 2012, 12:06
Сообщение #2





Группа: Участник
Сообщений: 10
Регистрация: 28-10-11
Пользователь №: 68 007



Вот так выглядят тестовые программы:

Для передачи:
CODE
#include <windows.h>
#include <tchar.h>
#include <stdio.h>


SOCKET sock;
struct sockaddr_in to;
char tx[] = "testtestestesttestestesttestestesttestestesttestes";

void CALLBACK SendPacket(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
sendto(sock, tx, 48, 0, (struct sockaddr*)&to, sizeof(struct sockaddr_in));
}

int _tmain(int argc, _TCHAR* argv[])
{
SetProcessAffinityMask(GetCurrentProcess(), 0x02);
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);

WSADATA wd;
WSAStartup(MAKEWORD(2, 2), &wd);

sock = socket(AF_INET, SOCK_DGRAM, 0);

to.sin_family = PF_INET;
to.sin_addr.s_addr = INADDR_BROADCAST;
to.sin_port = htons(49501);
memset(&(to.sin_zero), 0, 8);
char on = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));


UINT m_uResolution;
TIMECAPS tc;
timeGetDevCaps(&tc, sizeof(TIMECAPS));
m_uResolution = min(max(tc.wPeriodMin, 0), tc.wPeriodMax);

timeBeginPeriod(m_uResolution);

MMRESULT m_idEvent = timeSetEvent(
10,
m_uResolution,
SendPacket,
NULL,
TIME_PERIODIC);


getchar();
return 0;
}



Для приема:
CODE
#include <windows.h>
#include <tchar.h>
#include <stdio.h>

#define TOTAL_PACKETS 10000

double PCFreq = 0.0;

double GetCounter()
{
LARGE_INTEGER li;
QueryPerformanceCounter(&li);
return double (li.QuadPart)/PCFreq;
}

int _tmain(int argc, _TCHAR* argv[])
{

SetProcessAffinityMask(GetCurrentProcess(), 0x01);
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);

LARGE_INTEGER li;
QueryPerformanceFrequency(&li);
PCFreq = double(li.QuadPart)/1000.0;


WSADATA wd;
WSAStartup(MAKEWORD(2, 2), &wd);

SOCKET sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

struct sockaddr_in sa;

sa.sin_family = PF_INET;
sa.sin_addr.s_addr = INADDR_ANY;
sa.sin_port = htons(49501);
memset(&(sa.sin_zero), 0, 8);

bind(sock, (struct sockaddr*)&sa, sizeof(struct sockaddr));

int nbrcvd;
char buf[255];
double t0 = 0, t1 = 0, dt = 0;
int counter = 0;

unsigned __int32 tbl[100];
memset(tbl, 0, 400);

while (1)
{

nbrcvd = recv(sock, buf, sizeof(buf), 0);


if (nbrcvd > 0)
{

t1 = GetCounter();

if (t0 == 0)
t0 = t1;
else
{
dt = t1-t0;
t0 = t1;

//сбор статистики
nbrcvd = static_cast<int>((dt+0.1)/0.2);
tbl[nbrcvd]++;
}

counter++;
if (counter == TOTAL_PACKETS)
{
for (int i = 0; i<100; i++)
{
if (tbl[i] > 0)
fprintf(stdout, " %5.1f ms %5d %5.1f%% \n", (0.2*i), tbl[i], (double) (tbl[i]*100/TOTAL_PACKETS));
}

getchar();
return 0;
}
}
}
}


Такой результат на семерке, когда обе программы выполняются на одном компе:
CODE
8.8 ms 3 0.0%
9.0 ms 6 0.0%
9.2 ms 4 0.0%
9.4 ms 7 0.0%
9.6 ms 9 0.0%
9.8 ms 88 0.0%
10.0 ms 9746 97.0%
10.2 ms 110 1.0%
10.4 ms 11 0.0%
10.6 ms 7 0.0%
10.8 ms 4 0.0%
11.0 ms 1 0.0%
11.2 ms 3 0.0%


Цитата
Вообще, сочетания слов "Real time" и "Windows XP" в названии темы - это очень веселит ... я по-началу так и подумал, что это анекдот какой...

Самое смешное, что в системе вообще не будет машин с жестким реальным временем. В частности компьютер, которому предназначаются эти пакеты, работает под линуксом, без каких либо реал тайм расширений.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Slovan   Real time на Windows XP   Sep 27 2012, 20:58
- - juvf   Цитата(Slovan @ Sep 28 2012, 02:58) Если ...   Sep 28 2012, 01:06
|- - sasamy   Цитата(juvf @ Sep 28 2012, 05:06) Если на...   Sep 28 2012, 04:00
|- - juvf   Цитата(sasamy @ Sep 28 2012, 10:00) Что т...   Sep 28 2012, 06:27
|- - _Pasha   Цитата(juvf @ Sep 28 2012, 09:27) А ДОС д...   Sep 28 2012, 08:07
|- - sasamy   Цитата(juvf @ Sep 28 2012, 10:27) это не ...   Sep 28 2012, 08:28
|- - juvf   Цитата(sasamy @ Sep 28 2012, 14:28) Тогда...   Sep 28 2012, 08:37
||- - sasamy   Цитата(juvf @ Sep 28 2012, 12:37) "I...   Sep 28 2012, 08:51
|||- - juvf   Цитата(sasamy @ Sep 28 2012, 14:51) a дет...   Sep 28 2012, 09:44
|||- - sasamy   Цитата(juvf @ Sep 28 2012, 13:44) при чем...   Sep 28 2012, 09:55
|||- - _Pasha   Цитата(juvf @ Sep 28 2012, 12:44) *ЗАПЕСА...   Sep 28 2012, 10:30
||||- - AHTOXA   Цитата(_Pasha @ Sep 28 2012, 16:30) Я одн...   Sep 28 2012, 16:35
|||- - Olej   Цитата(juvf @ Sep 28 2012, 12:44) На скол...   Sep 28 2012, 21:50
||||- - Konst_777   Цитата(Olej @ Sep 29 2012, 00:50) ... P.S...   Sep 29 2012, 17:04
||||- - _pv   Цитата(Olej @ Sep 29 2012, 03:50) Не смож...   Sep 29 2012, 18:00
||||- - Палыч   Цитата(Olej @ Sep 29 2012, 01:50) стек IP...   Sep 30 2012, 20:17
|||- - Slovan   Цитата(juvf @ Sep 28 2012, 13:44) а обычн...   Oct 1 2012, 11:05
|||- - Olej   Цитата(Slovan @ Oct 1 2012, 14:05) Колеба...   Oct 1 2012, 22:10
||||- - Slovan   Цитата(Olej @ Oct 2 2012, 02:10) P.S. поп...   Oct 2 2012, 06:53
|||- - juvf   Цитата(Slovan @ Oct 1 2012, 17:05) ~99.5%...   Oct 2 2012, 04:16
||||- - Olej   Цитата(juvf @ Oct 2 2012, 07:16) на венде...   Oct 2 2012, 07:02
||||- - sasamy   Цитата(Olej @ Oct 2 2012, 11:02) Вообще, ...   Oct 2 2012, 07:20
||||- - _Pasha   Цитата(Olej @ Oct 2 2012, 10:02) Вообще, ...   Oct 2 2012, 07:30
|||- - _pv   Цитата(Slovan @ Oct 1 2012, 17:05) Колеба...   Oct 2 2012, 07:09
||- - _Pasha   Цитата(juvf @ Sep 28 2012, 11:37) досы то...   Sep 28 2012, 09:13
|- - gerber   Цитата(sasamy @ Sep 28 2012, 12:28) http:...   Sep 28 2012, 09:04
|- - sasamy   Цитата(gerber @ Sep 28 2012, 13:04) Возмо...   Sep 28 2012, 09:33
|- - gerber   Цитата(sasamy @ Sep 28 2012, 13:33) Ну вс...   Sep 28 2012, 09:42
- - _Pasha   На DOS перейдите, чего уж там...   Sep 28 2012, 03:25
- - Slovan   ЦитатаЕсли на комп поставить голый линукс, то ситу...   Sep 28 2012, 05:24
- - gerber   Цитата(Slovan @ Sep 28 2012, 00:58) Поним...   Sep 28 2012, 06:58
|- - Slovan   Цитата(gerber @ Sep 28 2012, 10:58) Дейст...   Sep 28 2012, 09:23
|- - _pv   поднимите приоритет у процесса да посмотрите что п...   Sep 28 2012, 11:33
- - syoma   У MATLAB есть Real-time Windows Target. Мне кажетс...   Sep 28 2012, 10:05
- - _Pasha   Вот есть MIDI-RTP, RTP - протоколы. Они ведь повер...   Sep 29 2012, 18:33
|- - Палыч   Цитата(_Pasha @ Sep 29 2012, 22:33) Вот е...   Sep 30 2012, 22:16
|- - Olej   Цитата(_Pasha @ Sep 29 2012, 21:33) Вот е...   Oct 1 2012, 08:02
- - Olej   Цитата(Slovan @ Oct 2 2012, 15:06) Самое ...   Oct 2 2012, 12:41
- - _pv   Цитата(Slovan @ Oct 2 2012, 18:06) Вот та...   Oct 2 2012, 13:37
- - _Pasha   Цитата(_pv @ Oct 2 2012, 16:37) оно конеч...   Oct 2 2012, 14:37
- - _pv   Цитата(_Pasha @ Oct 2 2012, 20:37) Тем бо...   Oct 2 2012, 14:52
- - Konst_777   Цитата(_pv @ Oct 2 2012, 17:52) Код... ...   Oct 2 2012, 17:17
|- - _Pasha   Цитата(Konst_777 @ Oct 2 2012, 20:17) Про...   Oct 2 2012, 17:41
- - Olej   Цитата(_pv @ Oct 2 2012, 17:52) и не очен...   Oct 2 2012, 22:05
- - Slovan   Цитата(_pv @ Oct 2 2012, 18:52) и не очен...   Oct 3 2012, 10:11


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

 


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


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