|
Real time на Windows XP |
|
|
|
Sep 27 2012, 20:58
|
Группа: Участник
Сообщений: 10
Регистрация: 28-10-11
Пользователь №: 68 007

|
Добрый день! Понимаю всю обсурдность вопроса... но стоит задача - обеспечить передачу UDP пакетов в сеть с жестким интервалом 10мс. Система только виндоуз и ничего кроме виндоуз. (Причины: драйвера, ПО, просто лень разработчиков изучать другие системы) В общем, уговорить перейти на что-то более адекватное у меня не получается. Какие есть варианты? Мультимедия таймер не обеспечивает необходимой точности. http://www.intervalzero.com/ - вроде бы то, что нужно. Но непонятно, сколько времени уйдет на освоение и сколько вообще это будет стоить. Если подключить к COM порту контроллер, который будет каждые 10мс посылать сигнал, и роботать по прерыванию - может это как-то улучшить ситуацию?
|
|
|
|
|
 |
Ответов
|
Oct 2 2012, 12:06
|
Группа: Участник
Сообщений: 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" в названии темы - это очень веселит ... я по-началу так и подумал, что это анекдот какой... Самое смешное, что в системе вообще не будет машин с жестким реальным временем. В частности компьютер, которому предназначаются эти пакеты, работает под линуксом, без каких либо реал тайм расширений.
|
|
|
|
Сообщений в этой теме
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 Цитата(_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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|