Initializing an Interrupt
9/8/2008
Windows Embedded CE inicializa uma interrupção ou no OEMInit ou como parte da inicialização driver de dispositivo. Parte da inicialização de interrupção também pode incluir a criação de um segmento serviço interrupção (ist).
O kernel começa o processo inicialização interrupção por chamado OEMInit. Uso OEMInit Para registrar uma rotina serviço interrupção (ISR) por chamado de HookInterrupt função. HookInterrupt Associa um ISR uma solicitação hardware interrupção (IRQ). Além disso, você deve usar OEMInit Para registrar as interrupções para o timer de sistema porque codificar subseqüente, such as o Agendador de tarefas, se baseia em um timer de sistema.
Alguns drivers dispositivo podem exigir manipulação que não pode ser concluída em um ISR. Quando Windows Embedded CE chama a função inicialização para esses tipos de dispositivo drivers, você pode usar InterruptInitialize Para registrar um identificador evento com o identificador interrupção retornado pelo ISR do dispositivo de destino.
Função de inicialização da driver de dispositivo pode, em seguida, configurar um ist para a interrupção por chamado de CreateThread função. O executar um loop Do segmento principal deve esperar sobre o evento usando o WaitForSingleObject função. Não uso WaitForMultipleObjects. O executar um loop principal deve também processo de interrupção.
Se você criar um segmento na rotina de inicialização driver, você deve definir o apropriado nível de prioridade do segmento com o CeSetThreadPriority função. Isso proporciona o apropriado Agendando horas.
Quando o ist tem uma prioridade maior do que o segmento interrompido, Windows Embedded CE interrompe o segmento e executa o ist imediatamente. As prioridades segmento podem intervalo de 0 a 255, com 0 como a prioridade mais alta.
A escolha de nível de prioridade de ist é dependente após o ambiente no qual o ist precisa executar. Esses fatores ambientais incluem o número de segmentos, relativo de prioridade de segmentos e a quantidade de manipulação interrupção.
O seguinte exemplo de código mostra as funções que uma inicialização driver de dispositivo chamadas para criar um evento e um segmento de rotina geralmente associado com um ISR.
// Create an event and a thread, and then associate them.
hEvent = CreateEvent(...)
// Get the event handle, register the interrupt, and then
// associate it with the event.
InterruptInitialize(SYSINTR_SERIAL, hEvent, ...)
// Create the thread for the IST, passing it the event handle.
// The IST code calls WaitOnSingleObject, so give it the event handle.
hThd = CreateThread(..., MyISTRoutine, hEvent, ...)
CeSetThreadPriority(hThd, 152);
See Also
Tasks
How to Develop an OEM Adaptation Layer