Цитата(torik @ Feb 16 2007, 17:26)

А с помощью чего еще ловить начало кадра?
По прерыванию от кадрового импульса сбрасываю ФИФО, как без этого...
Щас добились на компе четкого кадра, теперь надо засинхронизироваться с ним. Т.к. я не могу в начале каждой строки вставлять маркер, ведь пакеты то по 512 байт, то думаю передавать по отдельной точке пару байт...
А насчет того что не успевает - у меня же 6500 тактов камеры имеется в распоряжении... А ПЛИСа нету у меня, да и больно дорого станет.
Во первых - абсолютно некорректно в обработчике прерывания трогать какие-либо регистры контроллера и, тем более, вводить такты ожидания (SYNCDELAY)! Там должно быть ТОЛЬКО изменения какого-либо флага, по которому в основном цикле уже надо начинать обработку.
Во вторых - насколько помню, после сброса FIFO в FX2, надо выждать порядка 100мкс, прежде чем начинать писать туда что либо.
В третьих - начало кадра лучше ловить с помощью ПЛИС да и проблема с пакетами исчазла бы сама собой, писали-бы всё в навал...
Кстати, для передачи такого потока информации в реальном времени через Bulk EP без внешнего буфера не обойтись, иначе будут потери, внутреннего буфера FX2 просто будет недостаточно, так-что Вам, для нормальной работы Вашего устройства просто необходимо ставить ПЛИС.
И что это за 6500 тактов камеры???
Цитата(jur @ Feb 16 2007, 18:56)

Цитата(torik @ Feb 16 2007, 14:05)

Как сделать на основе стримера высокий приоритет потоку?
Это очень несложно. Вот как поступаю я:
Код
XferThread = CreateThread(NULL,0,XferLoop,0,CREATE_SUSPENDED,(LPDWORD )&lpThreadId);
if(XferThread == NULL) {
return false;
}
if(SetThreadPriority(XferThread,THREAD_PRIORITY_TIME_CRITICAL) == 0) {
CloseHandle(XferThread);
return false;
}
if(ResumeThread(XferThread) == -1) {
CloseHandle(XferThread);
return false;
}
return true;
При этом я четко заметил, что флаг THREAD_PRIORITY_TIME_CRITICAL полностью решает проблему с пропаданием пакетов. Правда, зависит от всего остального. Если на компьютере выполняются другие важные задачи, то пакеты могут пропадать... Тогда нужно принимать более радикальные меры.
Это имеет смысл только на скоростях близких к масимуму (~40МБ/сек) при меньших скоростях, тем более при скорости 10МБ/сек делать такое для того, чтобы не терялись пакеты - просто шаманство

Если пакеты теряются - надо перерабатывать аппаратную часть, вводить дополнительный буфер.