Implementing the OEMInit Function
9/8/2008
A função OEMInit é responsável por inicializar a placa-nível hardware.
Durante OEMInit, você deve:
- Inicializar todos os periféricos hardware necessário para suporte a plataforma hardware.
- Inicie o transporte KITL depuração.
- Definir variáveis kernel que são exigido pelo kernel para habilitar ou alterar funcionalidade.
Para obter mais informações sobre inicialização KITL, consulte Adding KITL Initialization Code.
O OEMInit** função contém grande parte da funcionalidade presente na função OEMPlatformInit no carregador de inicializar. Para obter mais informações, consulte Implementing the OEMPlatformInit Function.**
A seguinte lista mostra as tarefas sugeridas inicialização para o OEMInit função.
Para implementar a função OEMInit
Inicialize interrupção mapeamento tabelas. Essas são duas tabelas OAL particulares que mapa (n.); mapear (v.) entre interrupções físico — interrupção solicitações (IRQs) — e interrupções lógicas — valores SYSINTR. O seguinte mostra exemplo de código como para inicializar as tabelas mapeamento interrupção:
for (i = 0; i <= IRQ_MAXIMUM; i++) { IRQToSysIntr[i] = SYSINTR_UNDEFINED; } for (i = 0; i < SYSINTR_MAXIMUM; i++) { SysIntrToIRQ[i] = IRQ_UNDEFINED; }
Observação
Tabelas de mapeamento interrupção, de exemplo, IRQToSysIntr e SysIntrToIRQ, são particulares para a OAL. Os OEMs podem dar essas tabelas mapeamento interrupção qualquer nome. Os OEMs podem usar as tabelas mapeamento interrupção para implementar as funções OEMTranslateIrq e OEMTranslateSysIntr.
Criar todos os mapeamentos estáticos iniciais exigido pela OAL. De exemplo, talvez SYSINTR_OS_TICK mapa (n.); mapear (v.) para IRQ_OS_TICK, conforme o seguinte hardware exemplo de código:
SysIntrToIRQ[SYSINTR_OS_TICK] = IRQ_OS_TICK; IRQToSysIntr[IRQ_OS_TICK] = SYSINTR_OS_TICK;
Para obter mais informações sobre as interrupções Windows Embedded CE , consulte Interrupts e Defining an Interrupt Identifier.
Configurar a timer de sistema, relógio em tempo real (RTC) ou qualquer outro dispositivo timekeeping por implementar a função InitClock e chamado-lo OEMInit. Para obter mais informações, consulte System Tick Timer Initialization.
Configurar qualquer CPU - nível e placa - nível controladores interrupção.
Fornece suporte depuração fotodiodo. Enquanto opcional, ele é útil quando depuração de kernel.
Se for necessário para seu tipo CPU, chamar a função HookInterrupt para registrar um ou mais rotinas serviço interrupção (ISRs).
O HookInterrupt função associa um ISR com um valor de linha (IRQ) solicitação interrupção. OEMInit deve registrar o ISR para marcação de sistema. Esta é a funcionalidade básica exigido pelo kernel para segmentos cronograma. Para obter mais informações, consulte System Tick Timer Implementation.
Observação
HookInterrupt não é exigido ou possíveis para plataformas hardware ARM-Based. Há apenas duas interrupções e elas são manipuladas por OEMInterruptHandler e OEMInterruptHandlerFIQ.
O seguinte exemplo de código mostra como você pode registrar o intervalo-timer ISR,
TimerISR
, para interrupção hardware 5.void OEMInit(void) { ... HookInterrupt(5, TimerISR); // Hook timer interrupt ... }
Máscara todas as fontes interrupção não configurados no CPU - nível e placa - nível. Isso impede interrupções acidentalmente sendo entregue durante a inicialização kernel.
Deixe a 1 - milissegundo (ms) marcação sistema unmasked, isso que timekeeping e segmento agendamento função corretamente.
A seguinte lista mostra opcional funcionalidade que você pode implementar na OEMInit função:
- Log funções
- Funções do Registro
- Seguro funções carregador
- Salvar e restaurar co-processador registra
- Contadores alto desempenho
- Parar de sistema
- Rastreamento de eventos
- Detecção de tempo ocioso
- Alarme notificação do usuário
- Executar vários - em - regiões local (xip)
- Quantum segmento padrão
- Ativar depuração de E/S controle
- Apagando a armazenar objeto
- Suporte a funcionalidade utilização de CPU
- Objeto armazenar frio inicializar
- Suporte ARM FPU
- Zeroing memória