Você está na página 1de 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
|
|
|
|
|

|
o |
o |
x |
|

---------------x o o

---------------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

Você também pode gostar