Ибо в документации по MmGetPhysicalAddress сказано: Do not use this routine to obtain physical addresses for use with DMA operations
Вот только прикол в том, что «феншуйный» AllocateCommonBuffer как раз и состоит из MmAllocateContiguousMemorySpecifyCache + MmGetPhysicalAddress, проверил лично. Подозреваю, что использовать DMA API рекомендуют на случай систем с защитой системной памяти от «злонамеренного» DMA, где нужно будет не только выделить регион памяти, но и разрешить в него DMA. Но в таком случае и отпиленный кусок памяти, про который система не в курсе, также будет в пролёте.
Так адрес, в общем-то, и вычисляется, — берётся последний доступный Винде кусок памяти и к его адресу прибавляется его размер
Вот только про set removememory в документации сказано что его назначение — имитация систем с небольшим объемом памяти в целях тестирования, и соответственно нет никаких гарантий того, какой регион будет отрезан, и что он вообще будет один.
Нет, реалтайм нужен, потому что по регистрируемым данным может приниматься решение о стимуляции.
А это решение принимается в том же драйвере что и опрос? Каким образом оно настраивается? Что делать если надо изменить критерии — драйвер переписать? Что будете делать если (когда) логика принятия решения не влезет по времени в 1 поток?
А регистрация и отображение как делается? Данные же нужно отдать на user level, или по крайней мере другому драйверу.
Прерывания — это зло
Которое генерит много разных устройств, например видеокарта или контроллер SATA. И DISPATCH_LEVEL не защищает от аппаратных прерываний.
Возможно я ошибаюсь, но описанное в статье очень похоже на забор из костылей, выстроенный вокруг непродуманной архитектуры изделия. Если же у автора и имелась реальная необходимость в создании такого франкенштейна, то она не показана. В любом случае, стоит снабдить статью предупреждением вида «Описанное является грязным хаком, не используйте в своих проектах если не уверены в том, что делаете и к каким последствиям это может привести». Кривых драйверов и без этого достаточно.
Несколько вопросов по существу:
Поэтому всё это богатство данных, помимо показа на экране, придётся записывать на жёсткий диск. Все 1,3 гигабайта данных в секунду. И потом читать в Matlab`е, NeuroExplorer`е или другой программе.
То есть по факту реалтайм не нужен, достаточно регистрировать данные без потерь. Например сложить в большой буфер и выгребать 10-20 раз в секунду.
Они применяются к каждому входящему замеру, увеличивая количество данных, о которых система должна заботиться, вчетверо, и поднимая количество генерируемых данных до 1,3 гигабайта в секунду.
Если эти данные вычисляются из измерений, зачем это делать в реалтайме? Почему не сделать на постобработке?
полный цикл обработки данных за 200 микросекунд
5кгц, не так и много, приходилось обрабатывать на порядок большую частоту прерываний без особых проблемм и извратов.
Даже если я выделю реальную память при помощи MmAllocateContiguousMemory, я получу только виртуальный адрес, достучаться до которого плата не сможет.
Странное утверждение, а как же другие то делают? Про MmGetPhysicalAddress Вы не в курсе?
Однако процесс не может всё время бежать с запретом на любые прерывания, Винда за этим строго следит и может наглеца прибить.
А Ваша плата что, вообще прерываний не генерирует? Данные выгребаются опросом регистров в цикле? Попахивает хреновой архитектурой.
Понятнее :)
Со смещения 24 идут числа во float, а до этого — заголовок, состоящий в основном из нулей и констант, 2 байта по смещению 0A — видимо какой-то размер.
Тем не менее, в винде есть куча параметров реестра, которые вообще нигде не описаны, и кроме как реверсингом их не обнаружить. Например, у драйвера sdbus.sys есть параметр NonremovableDevice, который сделает SD/MMC карту «несъемной», с возможностью разбивать на разделы и загрузиться с нее. А что делает параметр SdCmdFlags того же драйвера — попробуйте угадать (он используется в .inf).
И это ужасно на самом деле. Не понимаю, почему люди расползаются по всяким загончикам, где общается полтора землекопа, а накопленная информация отправляется в небытие. Неужели разучились настраивать форумы?
Гугл ищет плохо, но остальные — еще хуже. Утка кавычки похоже вообще игнорирует, и выдает горы всякого хлама, даже отдаленно не содержашего запрошенное. Хорошо хоть site: работает.
Конечно понадобяться, ведь без этих данных база ничего не стоит.[/sarcasm]
Для всяких бонусов достаточно базы формата ид: баллы.
Перестаньте вымогать у людей кучу ненужных персданных и проблемма их утечки самоустраниться.
Например так: человек открывает в банке особый «налогооблагаемый» счет. «Снаружи» это обычный банковский счет, на который кто угодно может переводить деньги. С о всег поступающего дохода автоматом списывается % в уплату налога, остаток человек может расходовать как ему хочется.
Никаких отчетностей, справок и прочей мути, ошибиться с рассчетом, пропустить сроки уплаты и т.д. невозможно, человек получает легальный доход, а государство — налог. Нет дохода — нет налога. Не надо сношать мозг иностранным компаниям, заказчикам, ютубу и т.д.
Все равно не так — нужно добиться чтобы в строках и столбцах небыло повторов, а не просто переставлять строки/столбцы. Получается для 1й строки 6!=720 комбинаций, для 2й нужно исключить дублирование значений в столбцах из 1й и т.д., последняя строка будет без вариантов состоять из того, что еще не встречалось в столбцах. Итого 720*309*112*32*6*1 = 4 784 209 920 комбинаций. Приемлимо для перебора. Цвет можно захардкодить как в картинке из статьи: c=(x+y)%size, а тип перебирать, решение будет найдено если в матрице нет одинаковых комбинаций цвет+тип.
Какой дизайн? SD, как и USB флешки, состоят из памяти и контроллера, который как и в USB флешках подвержен проблеммам типа порчи служебной информации, слетания таблиц трансляции и т.д. про полной физической работоспособности. Различия разве что в интерфейсе общения с внешним миром.
На заводе это хозяйство наверняка чем-то инициализируют, проблемма только в том, что софт для этого не особо попадает на паблик. Возможно причина в более спецефичном оборудовании, чем для USB флешек, которые как я понимаю тупо втыкают в хаб десяток сразу и шют тем самым софтом типа упомянутого выше AlcorMP.
Только в мире, где Alcor является единственным производителем контроллеров флешек. А в нашем мире этих производителей несколько десятков, и у каждого свои тулзы для прошивки его флешек.
Кстати определение контроллера по VID/PID — не самый надежный метод, многие тулзы позволяют вписать любой ИД. Для детекта контроллера есть например тулза ChipGenius.
Можете считать что это опенсорс WinXP, со всеми вытекающими. Если есть драйвера от XP для Вашей платформы — теоретически должны заработать, но могут и нет ибо баг/несовместимость в ядре.
Элементарно — приравнять такое поведение к покушеную на убийство, с соответствующими юридическими последствиями. А отсутствие прав — отягчающее обстоятельство.
Ну то есть ничего принципиально не мешает? Почему тогда пишите что необходимо именно физическая карта?
P.S. Чью безопасность? Проприетарный чип, не контролируемый ОС, способный посылать смс, совершать звонки (wtf?) и способный выполнять скинутый ему удаленно произвольный код как-то не особо ассоциируется с безопасностью.
Вот только прикол в том, что «феншуйный» AllocateCommonBuffer как раз и состоит из MmAllocateContiguousMemorySpecifyCache + MmGetPhysicalAddress, проверил лично. Подозреваю, что использовать DMA API рекомендуют на случай систем с защитой системной памяти от «злонамеренного» DMA, где нужно будет не только выделить регион памяти, но и разрешить в него DMA. Но в таком случае и отпиленный кусок памяти, про который система не в курсе, также будет в пролёте.
Вот только про set removememory в документации сказано что его назначение — имитация систем с небольшим объемом памяти в целях тестирования, и соответственно нет никаких гарантий того, какой регион будет отрезан, и что он вообще будет один.
К этому кстати тоже есть вопросы, у автора:
А как потом найти отпиленный регион в адресном пространстве? Таки уверены что он ни с чем не перехлестнется?
Если не секрет, сколько проходит от момента генерации прерывания до входа в обработчик (средне/макс)?
А это решение принимается в том же драйвере что и опрос? Каким образом оно настраивается? Что делать если надо изменить критерии — драйвер переписать? Что будете делать если (когда) логика принятия решения не влезет по времени в 1 поток?
А регистрация и отображение как делается? Данные же нужно отдать на user level, или по крайней мере другому драйверу.
Которое генерит много разных устройств, например видеокарта или контроллер SATA. И DISPATCH_LEVEL не защищает от аппаратных прерываний.
Несколько вопросов по существу:
То есть по факту реалтайм не нужен, достаточно регистрировать данные без потерь. Например сложить в большой буфер и выгребать 10-20 раз в секунду.
Если эти данные вычисляются из измерений, зачем это делать в реалтайме? Почему не сделать на постобработке?
5кгц, не так и много, приходилось обрабатывать на порядок большую частоту прерываний без особых проблемм и извратов.
Странное утверждение, а как же другие то делают? Про MmGetPhysicalAddress Вы не в курсе?
А Ваша плата что, вообще прерываний не генерирует? Данные выгребаются опросом регистров в цикле? Попахивает хреновой архитектурой.
Понятнее :)
Со смещения 24 идут числа во float, а до этого — заголовок, состоящий в основном из нулей и констант, 2 байта по смещению 0A — видимо какой-то размер.
Конечно понадобяться, ведь без этих данных база ничего не стоит.[/sarcasm]
Для всяких бонусов достаточно базы формата ид: баллы.
Перестаньте вымогать у людей кучу ненужных персданных и проблемма их утечки самоустраниться.
Никаких отчетностей, справок и прочей мути, ошибиться с рассчетом, пропустить сроки уплаты и т.д. невозможно, человек получает легальный доход, а государство — налог. Нет дохода — нет налога. Не надо сношать мозг иностранным компаниям, заказчикам, ютубу и т.д.
На заводе это хозяйство наверняка чем-то инициализируют, проблемма только в том, что софт для этого не особо попадает на паблик. Возможно причина в более спецефичном оборудовании, чем для USB флешек, которые как я понимаю тупо втыкают в хаб десяток сразу и шют тем самым софтом типа упомянутого выше AlcorMP.
Кстати определение контроллера по VID/PID — не самый надежный метод, многие тулзы позволяют вписать любой ИД. Для детекта контроллера есть например тулза ChipGenius.
P.S. Чью безопасность? Проприетарный чип, не контролируемый ОС, способный посылать смс, совершать звонки (wtf?) и способный выполнять скинутый ему удаленно произвольный код как-то не особо ассоциируется с безопасностью.