Вы находитесь на странице: 1из 8

Introduo criao de Drivers Prof.

Fernando Branquinho

Construo de Drivers
Objetivo da criao de um driver Isolar a lgica do domnio do problema, das diferentes tecnologias que podem ser aplicadas. Prtica muito utilizada pelos Sistemas Operacionais

Exemplo de criao de um sistema de Semforo Inteligente


Objetivo Controlar os semforos de um cruzamento, dando prioridade de passagem pela rua com maior quantidade de veculos. Exemplo de diferentes solues tecnolgicas que podem ser empregadas

Exemplos de diferentes interfaces com o computador 1. Paralela do PC 2. Serial do PC 3. Placa de E/S (Entrada/Sada) especfica 4. Comunicao com dispositivos especiais 5. Internet

6. ... Como fazer um software que atenda a todas estas possibilidades facilmente ?

Construo do software em camadas

Interface entre a camada de negcio e o driver


Esta interface deve atender as necessidades que a aplicao possui para realizar seus objetivos. No deve ser definida em funo do tipo de tecnologia aplicada, mas sim, em funo somente das necessidades do sistema. Esta interface definida pelo fabricante do software de gesto do domnio do problema.

Mtodos para construo da interface entre a camada de negcio e o driver:


Existem vrios modos de implementar esta interface. Exemplos:
l l l l l l l l

Cdigo fonte para compilao Compartilhamento de rea de memria Compartilhamento de arquivos em disco Interrupes de software Uso da rea de transferncia Bibliotecas de ligao dinmica (DLL Windows) DDE Componentes de software (COM, CORBA)

Exemplo de especificao da interface entre a camada de negcio e o driver, atravs de "Cdigo fonte para compilao":
Funo: lampadas_semaforo Objetivo: Controlar cada uma das lmpadas do semforo Parmetros de Entrada: um byte para controle das lmpadas, onde
l l l l l l

bit 0 = Lmpada Vermelha do semforo da rua vertical bit 1 = Lmpada Amarela do semforo da rua vertical bit 2 = Lmpada Verde do semforo da rua vertical bit 3 = Lmpada Vermelha do semforo da rua horizontal bit 4 = Lmpada Amarela do semforo da rua horizontal bit 5 = Lmpada Verde do semforo da rua horizontal

Parmetros de Sada: nenhum Funo: carros_na_vertical Objetivo: Informar o nmeros de carros existentes na rua vertical Parmetros de Entrada: nenhum Parmetros de Sada: Nmero de carros na rua vertical

Funo: carros_na_horizontal Objetivo: Informar o nmeros de carros existentes na rua horizontal Parmetros de Entrada: nenhum Parmetros de Sada: Nmero de carros na rua horizontal Funo: inicializa_driver Objetivo: Permitir ao driver a realizao de qualquer inicializao para seu funcionamento Parmetros de Entrada: nenhum Parmetros de Sada: nenhum Funo: finaliza_driver Objetivo: Permitir ao driver encerrar seu funcionamento Parmetros de Entrada: nenhum Parmetros de Sada: nenhum

Exemplo de um software com a lgica de controle do semforo

Cdigo correspondente em "C"

Rotina: SEMAFORO.C #include "driver.h" #define #define #define #define #define #define #define #define VM_V AM_V VD_V VM_H AM_H VD_H VERTICAL HORIZONTAL 1 2 4 8 16 32 1 2

void main() { int ch=0,aberto; clrscr(); inicializa_driver(); lampadas_semaforo(VD_V+VM_H); aberto=VERTICAL; while(ch != 27) { if (kbhit()) ch=getch(); if (carros_na_horizontal() > carros_na_vertical() && aberto==VERTICAL) { lampadas_semaforo(AM_V+VM_H); sleep(2); lampadas_semaforo(VM_V+VD_H); aberto=HORIZONTAL; } if (carros_na_vertical() > carros_na_horizontal() && aberto==HORIZONTAL) { lampadas_semaforo(AM_H+VM_V); sleep(2); lampadas_semaforo(VM_H+VD_V); aberto=VERTICAL; } } finaliza_driver(); }

Exemplo de implementao do driver Escolha de uma tecnologia


l l

Utilizao dos sensores de solo Utilizao da interface paralela do PC

Especificao da interface entre o driver e o hardware


Acionamento das lmpadas PORT 0x378

Pino 2 3 4 5 6 7

Bit 0 1 2 3 4 5

Funo Lmpada Vermelha da rua vertical Lmpada Amarela da rua vertical Lmpada Verde da rua vertical Lmpada Vermelha da rua horizontal Lmpada Amarela da rua horizontal Lmpada Verde da rua horizontal

Leitura dos sensores PORT 0x379 Pino 13 12 10 11 Bit Funo 4 1 Sensor rua Vertical (entrada do carro) 5 2 Sensor rua Vertical (sada do carro) 1 Sensor rua Horizontal (entrada do 6 carro) 7 2 Sensor rua Horizontal (sada do carro)

Exemplo do software do driver


Rotina: driver.h (Includa no software SEMAFORO.C, acima.) #include "dos.h" void inicializa_driver(); void finaliza_driver(); void lampadas_semaforo(char); carros_na_horinzontal(); carros_na_vertical(); void le_sensores(); int h_carros,v_carros; //******************************************************* void inicializa_driver() { h_carros=0; v_carros=0; } //******************************************************* void finaliza_driver() { outp(0x378,0); } //******************************************************* void lampadas_semaforo(char byte) { outp(0x378,byte); } //******************************************************* carros_na_horizontal() { le_sensores(); return(h_carros); }

//******************************************************* carros_na_vertical() { le_sensores(); return(v_carros); } //******************************************************* void le_sensores() { static int ult_ch; int ch; ch=(inp(0x379) & 0xf0 ^ 0x70) >> 4 ; if (ch & 1 && !(ult_ch & 1)) h_carros++; if (ch & 2 && !(ult_ch & 2)) if (h_carros > 0) h_carros--; if (ch & 4 && !(ult_ch & 4)) v_carros++; if (ch & 8 && !(ult_ch & 8)) if (v_carros > 0) v_carros--; ult_ch=ch; }

Exerccios
1. 2. 3. 4. Quais as vantagens em isolar a lgica do domnio do problema, da tecnologia aplicada ? Existiria alguma desvantagem nisto ? O que significa "construo de software em camadas" ? Em termos de implementao de software, quais as diferenas entre utilizar as interfaces "paralela" e "serial" do PC ? 5. Qual a desvantagem em se criar drivers baseados em cdigo fonte para compilao ? 6. Na utilizao de software em camadas, o que necessrio modificar quando se altera a tecnologia utilizada ? 7. Crie um novo driver para o "sistema de semforo", que permita simular o funcionamento do hardware atravs de um esboo do cruzamento entre duas ruas na tela do computador. Ex:
Simulacao do funcionamento do Semaforo Press 1 e 2 p/ horizontal ou 3 e 4 p/ vertical. ESC p/ sair | | | | | ---------------x o o | o | o | x | | ---------------Carros = 0 ---------------| | | | | | | | | | ----------------

Carros = 0

O programa dever simular a passagem pelos sensores de solo, utilizando-se as teclas 1 e 2 para a rua horizontal, e 3 e 4 para a rua vertical. Tambm deve aparecer na tela, o nmero de carros existentes em cada uma das ruas. Os semforos devem representar o estado passado pelo programa "SEMAFORO.C". Resumindo, o driver deve ser feito em linguagem "C", fornecido em um arquivo com o nome "DRIVER.H", para ser compilado em conjunto com o programa "SEMAFORO.C".

Final do documento

Fernando J.C.Branquinho http://br.geocities.com/branqs

Вам также может понравиться