Exame de Época Normal da disciplina de Introdução aos Sistemas
Embebidos
Ano lectivo de 2003/2004
1º Semestre
Licenciatura em Engenharia de Sistemas e Computação
Licenciatura em Engenharia de Sistemas e Informática
Duração: 2 horas + meia hora de tolerância (total: 2H30)
Só é permitido o esclarecimento de dúvidas na interpretação do enunciado durante os
primeiros 20 minutos do teste. Por isso, leia o teste com cuidado antes de começar a
resolução.
Só podem abandonar a sala após a primeira meia hora de teste e só é permitida a entrada
de alunos até à primeira meia hora de teste.
É permitida a utilização de calculadora e do documento sobre o micrococontrolador
PIC.
BOA SORTE!
Teste de Introdução aos Sistemas Embebidos
2003/2004
1. [2v] Enuncie, para um sistema embebido hipotético, cinco critérios que poderão ser
utilizados para seleccionar um determinado microcontrolador.
2. Pretende-se implementar em assembly do PIC16C54 uma subrotina, wait, que
permita programar tempos de espera de 10 a 500 ciclos com precisão de mais ou menos
5 ciclos:
(a) [2v] escreva o código da subrotina, assumindo que esta recebe um parâmetro
que permite programar o tempo de espera;
(b) [2v] Indique uma equação que baseada no código da subrotina permita a um
utilizador calcular o valor do parâmetro de entrada de modo a programar o
tempo de espera desejado (de acordo com o intervalo de valores supracitado).
3. [4v] Um microprocessador tem uma entrada de 1 bit que permite receber sequências
de bits de outro dispositivo. As sequências são apresentadas em grupos de 17 bits em
que o primeiro bit representa o checksum invertido dos 16 bits seguintes. Supondo a
existência da função int read_port(), que por cada vez que é executada retorna o valor
de um novo bit presente na entrada, implemente em C o código da função int read16()
que retorna nos 16 bits menos significativos a sequência de bits lida após o bit de
checksum. Em caso do checksum não estar correcto, a função deve retornar um ‘1’ no
décimo sétimo bit. Considere que as variáveis do tipo int são representadas por 32 bits.
4. [4v] A verificação de que todas as linhas de dados do barramento de dados estão a
funcionar é um dos testes realizados a memórias do sistema. Escreva uma função em
código C que permita testar o barramento de dados de 16 bits de uma memória
conectada a um microprocessador (note que tanto o microprocessador como o sistema
não têm hierarquia de memórias). A memória tem espaço de endereçamento de 0x0000
a 0xFFFF. A função deve retornar o valor zero caso o teste tenha tido sucesso e o valor
um em caso contrário.
5. Pretende-se implementar um sistema embebido para controlar uma máquina de
vender bebidas em lata. A máquina suporta bebidas de 3 tipos (A, B, e C). Os tipos A e
B são referentes a bebidas com preço de 1 Euro, e o tipo C a uma bebida com preço de 2
Euros. A máquina aceita moedas de cinquenta cêntimos, 1 euro, e de 2 euros. Sempre
que seja necessário, a máquina deve dar troco. Para tal, a quantia a retornar é realizada
com base em moedas de cinquenta cêntimos.
A Figura 1 ilustra as linhas de entrada e de saída da unidade de controlo. A entrada
TIPO indica qual foi a bebida seleccionada e as entradas UM, DOIS, e MEIO indicam a
introdução de uma moeda de um euro, dois euros, ou de cinquenta cêntimos. A máquina
só tem uma ranhura para as moedas e não aceita moedas sem o utilizador ter
seleccionado o tipo de bebida. A linha MOEDA serve para indicar a libertação de uma
moeda de cinquenta cêntimos de troco (cada moeda é libertada pela existência de uma
transição de zero para um nesta linha). Cada uma das linhas TIPO A, B, e C serve para
libertar a respectiva lata de bebida.
MOEDA
UM
DOIS
MEIO
Unidade
de
Controlo
TIPO A
TIPO B
TIPO C
TIPO
Figura 1. Linhas de entrada e de saída da unidade de controlo da máquina.
1 de 2
Teste de Introdução aos Sistemas Embebidos
2003/2004
Realize as tarefas seguintes:
(a) [3v] desenhe um ASM Chart para a máquina sequêncial que representa a
unidade de controlo do sistema;
(b) [3v] escreva o código C do main que implemente a máquina anterior supondo a
existência das seguintes funções e definições:
int read(int port): lê o valor na entrada especificada (o valor é retornado como
int). A função fica à espera que haja uma transição ascendente na entrada sob
leitura.
void write(int port, int value): escreve o valor na saída especificada
#define PORT_UM 1 // identifica a linha de entrada UM
#define PORT_DOIS 2 // identifica a linha de entrada DOIS
#define PORT_MEIO 3 // identifica a linha de entrada MEIO
#define PORT_TIPO 4 // identifica a linha de entrada TIPO
#define TIPO_A 1 // identifica uma bebida do Tipo A
#define TIPO_B 2 // identifica uma bebida do Tipo B
#define TIPO_C 3 // identifica uma bebida do Tipo C
#define PORT_MOEDA 5 // identifica a linha de saída MOEDA
#define PORT_TIPO_A 6 // identifica a linha de saída TIPO A
#define PORT_TIPO_B 7 // identifica a linha de saída TIPO B
#define PORT_TIPO_C 8 // identifica a linha de saída TIPO C
2 de 2
Download

Exame de Época Normal da disciplina de Introdução aos Sistemas