Escolar Documentos
Profissional Documentos
Cultura Documentos
Intro Duca Ocr I A Cao de Drivers
Intro Duca Ocr I A Cao 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
6. ...
Como fazer um software que atenda a todas estas possibilidades facilmente ?
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
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();
}
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
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)
//*******************************************************
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.
|
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