k155la3 26 14 ноября, 2017 Опубликовано 14 ноября, 2017 · Жалоба PC, Windows-XP, MSVS-2008 ---- Есть простая задача реализовать на базе LPT интерфейс SPI методом ногодрыга. Все в общем-то работает, но вопрос в организации временных задержек. while // небольшая частота - сотни - тысячи Гц { _outp(0x378, 0x00); Sleep(1); _outp(0x378, 0xFF); Sleep(1); } while // большая частота (период порядка единиц-десятков мкс) { _outp(0x378, 0x00); _asm { nop }; _asm { nop }; _asm { nop }; _outp(0x378, 0xFF); _asm { nop }; _asm { nop }; _asm { nop }; } (понятно, что в этот цикл периодически вмешивается планировщик OS) (?) реализация задержек на _asm { nop } не по феншую. Меня бы устроила скорость ногодрыга 2-20 кГц Каким образом правильнЕЕ организовывать задержки ? (Win32API) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 14 ноября, 2017 Опубликовано 14 ноября, 2017 · Жалоба double get_timer(){ static LARGE_INTEGER f; if (f.QuadPart == 0)QueryPerformanceFrequency(&f); LARGE_INTEGER t; QueryPerformanceCounter(&t); return (double)t.QuadPart / (double)f.QuadPart; } void delay(double sec){ sec += get_timer(); while (get_timer() < sec); } только планировщик вмешиваться всё равно будет. можно чуть улучшить, если задрать приоритет SetPriorityClass и отсадить в другое ядро SetProcessAffinityMask. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 14 ноября, 2017 Опубликовано 14 ноября, 2017 · Жалоба . . . . только планировщик вмешиваться всё равно будет. можно чуть улучшить, если задрать приоритет SetPriorityClass и отсадить в другое ядро SetProcessAffinityMask. Все Ok, накрутил на 10 кГц. Мне вполне достаточно. То что планировщик отрабатывает нестрашно. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться