Как я могу предотвратить неправильную настройку Microsoft.SPOT.Hardware.InterruptPort? - PullRequest
1 голос
/ 23 апреля 2011

Я пытаюсь использовать класс .NET Micro Framework Microsoft.SPOT.Hardware.InterruptPort.Однако документация меня озадачивает:

Возможно настроить InterruptPort объект в недопустимое состояние. В таких случаях ваша программа может не генерировать исключение до тех пор, покана самом деле использует InterruptPort объект. Например, , предположим, что вы создали объект InterruptPort с режимом резистора, установленным на Port.ResistorMode.PullUp, режимом прерывания, установленным на Port.InterruptMode.InterruptEdgeLevelHigh, и фильтром сбоев, установленным на true.Эта конфигурация не генерирует исключение при создании экземпляра объекта InterruptPort.Если затем добавить обработчик прерываний, .NET Micro Framework выдает исключение.

(выделение принадлежит мне)

В нем не указывается, какие конфигурациивызывать эти недействительные состояния, оставляя мне только один произвольный пример того, чего не следует делать.

Есть ли какая-то документация, по которой я скучаю?
Есть ли важный элемент знаний в области электроники, который я упустил из виду?1028 * Или MSDN просто бесполезен при документировании?

Ответы [ 2 ]

1 голос
/ 05 мая 2011

На самом деле, я страдал так же? / Похожая проблема.Ханс прав, что дело до аппаратного обеспечения - если вы используете линейку устройств GHI FEZ, то (я узнал об этом от производителя только после того, как выколол мне волосы в течение нескольких дней) они не поддерживают прерывания уровня, поэтому любая конфигурация с использованием InterruptMode.InterruptEdgeLevelHigh или InterruptMode.InterruptEdgeLevelLow завершится ошибкой, как только вы попытаетесь подключить обработчик прерываний.Документация по MSDN довольно скудная, в первую очередь потому, что MicroFramework является открытым исходным кодом сообщества.Боюсь, что те же (коммерческие) стандарты качества, которые Microsoft применяет к другим версиям .NET Framework, не применяются.Если производитель вашей платы не GHI, проверьте у них, что прерывания уровня поддерживаются в первую очередь.

0 голосов
/ 01 июня 2011

У меня была такая же проблема, но мое решение было другим.Да, InterruptEdgeLevelHigh и Low были недопустимыми параметрами.Однако я обнаружил, что проблема для меня заключается в том, что устройство не подключено к соединению с поддержкой прерываний.Даже если код немного отличается.

Как правило, вы можете подключить такую ​​кнопку.

InputPort yourButton = new InputPort((Cpu.Pin)FEZ_Pin.Digital.LDR, false,
Port.ResistorMode.PullUp);

Чтобы использовать порт прерывания, код выглядит следующим образом.

InterruptPort yourButton =
new InterruptPort((Cpu.Pin)FEZ_Pin.Interrupt.LDR, true,
Port.ResistorMode.PullUp,
Port.InterruptMode.InterruptEdgeBoth);

Итак, при условии, что устройство подключено к порту, поддерживающему прерывание, и вы создали свои устройства ввода из InterruptPort, а не из InputPort, вы должны иметь возможность создавать Interrupt EventHandler.

...