Как включить и обнаружить прерывания с помощью этой аппаратной карты ввода-вывода? - PullRequest
1 голос
/ 30 января 2010

У меня есть следующая карта, и я не могу заставить работать прерывания. Возможно, я не понимаю, как они должны работать правильно ... Я не очень часто занимаюсь этим типом программирования.

Хотя, судя по всему, он должен иметь возможность генерировать прерывание, когда что-то входит в один из портов ввода-вывода, верно? Мы подключили его к группе коммутаторов для работы машины.

http://accesio.com/go.cgi?p=../pci/pci_dio_24d.html

Я выложу часть кода, с которым работаю, как только смогу. Я пытаюсь что-то записать на базовый адрес (который у меня есть) + 0xE, но это не помогает ... Метод AIOWDM WaitForIRQ просто возвращает 0 при каждом вызове ... ничего не происходит.

Буду признателен за любую помощь ... Я знаю, что это своего рода общий вопрос.

ОБНОВЛЕНИЕ: Даже пример приложения, которое они предоставляют, не обнаруживает никаких прерываний, и я знаю, что у меня правильно установлены перемычки, поэтому я предполагаю, что это не только прерывания прерывания для всего ... Я предполагаю, что я необходимо подключить каждый коммутатор к определенному контакту ввода-вывода, и один контакт отвечает за прерывания ...

1 Ответ

0 голосов
/ 30 января 2010

Короче говоря, C # не подходит для такого рода задач, поскольку это неуправляемый код низкого уровня. Вы можете теоретически сделать это, но это будет более болезненным, так как вам приходится часто совершать поездки в неуправляемый мир, чтобы справляться с прерываниями. Я бы посоветовал взглянуть на это по аналогии с нативным кодом C / C ++, который работал бы лучше и обрабатывал подобные вещи низкого уровня.

Еще одна причина, по которой в C # есть своя собственная сборка мусора, последнее, что вам нужно, - это чтобы механизм обработки прерываний удалялся в сборщике мусора, а пока прощайте драгоценной структуре данных, используемой для обработки прерываний, это добавит значительные накладные расходы к коду в этом отношении.

Лично я никогда не слышал о том, чтобы C # имел дело с такого рода вещами, но некоторые из более проницательных читателей скажут: «Подожди, а как насчет новой неопрятной ОС под названием Singularity, которая написана на C #?», В в конце дня использование среды выполнения .NET для управления этой аппаратной задачей - нет-нет.

Edit: После того, как я понял, что, посмотрев справочное руководство по одному из примеров кода C, в котором он использует outp, я решил, что вам нужно сделать вывод с прямого порта, я подумал this может помочь, это dll, которая позволит вам делать именно то, что для ввода, вам понадобится найти соответствующую подпись p / invoke, чтобы сделать это. Есть еще одна DLL, которая может сделать то же самое здесь . Также проверьте этот WinRing0 код.

Опять же, вам нужно покопаться и найти подходящую сигнатуру метода, подходящую для пинвокинга ...

Желаю удачи с этим .. не стесняйтесь размещать больше, и я постараюсь помочь ...:)

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...