• Nenhum resultado encontrado

Sistemas Embebidos. Coligidos por Alberto Ramos da Cunha

N/A
N/A
Protected

Academic year: 2021

Share "Sistemas Embebidos. Coligidos por Alberto Ramos da Cunha"

Copied!
31
0
0

Texto

(1)

Exercícios

de

Sistemas Embebidos

Coligidos por Alberto Ramos da Cunha

Disciplina Aplicações para Sistemas Embebidos

Departamento de Engenharia Informática

Instituto Superior Técnico

Outubro de 2006

(2)

Índice

1 Dispositivos e Serviço de Entradas/Saídas...4

2 Programação com Interrupções ...11

3 Arquitecturas de Software ...13 3.1 Escalonamento ...17 4 Optimização de Programas ...20 4.1 Tempo de Execução ...20 4.2 Consumo de Energia...20 4.3 Ocupação de Memória...28

5 Concepção e Desenho de Sistemas ...29

(3)

Lista de Exercícios

Os exercícios são numerados pela ordem cronológica de inserção na sebenta e não pela sequência em que são apresentados.

Exercício 001... 4 Exercício 002... 11 Exercício 003... 4 Exercício 004... 4 Exercício 005... 13 Exercício 006... 13 Exercício 007... 14 Exercício 008... 20 Exercício 009...29 Exercício 010...10 Exercício 011...17 Exercício 012...26 Exercício 013...27 Exercício 014... 5 Exercício 015... 7

(4)

1 Dispositivos e Serviço de Entradas/Saídas

Exercício 001

Considere que dispõe de um temporizador de 8 bits com um prescaler que oferece as seguintes opções: f, f/10, f/100. A frequência do relógio de entrada do temporizador é 40 MHz. O temporizador gera o baud rate de uma UART que opera com ritmos de transmissão entre 19200 bps e 1200 bps (19200, 9600, 4800, 2400, 1200).

a) Indique, justificando, que saída do prescaler deve ser seleccionada?

b) Numa aplicação particular o ritmo máximo de transferência de dados é de 850 octetos por segundo. Sabendo que o protocolo de comunicação suporta paridade par e 2 stop bits escolha o baud rate para a UART.

Resolução a)

O ritmo máximo é 16 vezes superior ao mínimo (19200/1200), o que é ajustável no contador de 8 bits.

40MHz / 1200 = 33333,33 = divisão no prescaler × 256 ⇒ divisão no prescaler = 130,2 130 ⇒ 100 = divisão máxima do prescaler

40MHz / 19200 = 2083,33 = 100 × divisão no contador ⇒ divisão no contador = 20,8 Deve escolher-se f/100. (E, mesmo assim, não se conseguia gerar 1200 baud.)

b)

850 octetos /s de dados ⇒ são transmitidos 850 × (1+ 8 + 1 + 2) = 850×12 = 10.200 bits . Deve escolher-se um baud rate superior a 10.200 baud.

Exercício 004

Um microcontrolador possui 3 temporizadores internos – um de 8 bits e dois de 16 bits. Existe um único prescaler para todos os temporizadores, o qual permite dividir a frequência do relógio interno por 256 ou 1024. Asumindo que a frequência do relógio tem o valor f indique a expressão analítica do:

a) Menor intervalo de tempo que é possível marcar. b) Maior intervalo de tempo que é possível marcar.

Exercício 003

Um sistema embebido usa um UART para comunicação série. Foi definido um ritmo de comunicação de 9600 bps, sendo enviados 8 bits de dados, 1 bit de paridade e 1 stop bit.

(5)

b) Indique qual é a eficiência da comunicação.

c) Qual é o tempo de latência máximo no serviço da recepção para não se perderem caracteres? (Considere que o UART de recepção tem um tampão para 2 caracteres.)

Resolução a)

Para transferir 1 octeto de informação é necessário transmitir 11 bits (1 start bit + 8 bits de dados + 1 bit de paridade + 1 stop bit).

O tempo de transferência de 1 bit é 1 / 9600 s ≈ 104 µs .

O tempo de transferência do ficheiro é 104 µs × 11 bits × 12 × 1024 ≈ 14 s .

b)

Cada octeto requer a transmissão de 11 bits dos quais 8 correspondem aos dados. A eficiência é 8 / 11 ≈ 73% .

c)

O tempo de transferência de cada caracter é 104 µs × 11 = 1144 µs .

A capacidade de armazenamento do UART de recepção é de 2 caracteres (no tampão) + 1 caracter em recepção, isto é, em conversão série-paralelo. Todavia a interrupção de recepção só é gerada após a conclusão da conversão série-paralelo. Podemos, portanto, dizer que o tempo de latência do serviço do UART deverá ser inferior a 2 × 1144 µs ≈ 2,3 ms .

Exercício 014

Um sistema de gestão de frotas é constituído por sistemas de localização instalados a bordo de veículos e por um serviço central onde é possível acompanhar o estado da frota. No sistema instalado a bordo do veículo a comunicação entre a consola do motorista e o computador de bordo usa uma interface paralela através da qual são transferidos os dados e os sinais de controlo, estes segundo um protocolo de Request/Acknowledge.1

Emissor → Receptor: Request

Dados dados válidos Receptor → Emissor:

Acknowledge

Os dados são transferidos em quartetos (nibbles). O emissor activa e amostra os sinais no canal com um período de 5 µs, fazendo em cada acesso uma escrita ou uma amostragem (leitura) do porto e nunca ambas em simultâneo.

1

Este tipo de protocolo pode ser usado para a ligação de dois PCs através da porta da impressora (porta paralela) – Laplink.

(6)

a) Calcule a largura de banda máxima do canal admitindo que a resposta do receptor é instantânea. (Ignore a sobrecarga com os cabeçalhos e as terminações dos pacotes de dados.)

b) Optimize o protocolo assumindo que não há desfasagem dos sinais no canal de comunicação e que o tempo de resposta do receptor é desprezável mas não instantâneo. Calcule a largura de banda máxima do canal.

c) Como é que este protocolo de handshaking para transferência de dados se compara com um protocolo síncrono entre agentes?

d) O ritmo de amostragem é marcado por uma interrupção, sendo dentro da rotina de serviço que são feitos os acessos directos ao canal de comunicação. (O canal é controlado directamente pelo processador.) Considerando os tempos de execução indicados na tabela, calcule a taxa de ocupação do processador num período prolongado de transferência de dados.

Tempo [µs] Mudança de contexto ao entrar na rotina de interrupção 1,5 Mudança de contexto ao sair da rotina de interrupção 1,1

Serviço do canal 1,0

e) Estime os ritmos máximos de transferência atingíveis com o serviço do canal por interrupções ou por amostragem directa (polling) do processador.

Resolução a)

O emissor executa os seguintes passos: 1. Coloca os dados 2. Activa Request 3. Amostra Acknowledge (0 →1) 4. Retira Request 5. Retira os dados 6. Amostra Acknowledge (1 → 0)

O tempo total de execução de um ciclo é 6 × 5µs = 30 µs. A transferência de 1 octeto demora 60 µs sendo o ritmo de transferência é 60 µs-1 = 16,7 KB/s.

b)

Nas condições enunciadas pode-se activar o Request e os dados simultaneamente e retirar o Request e os dados simultaneamente reduzindo o ciclo para 4 etapas. O tempo total de execução de um ciclo é 4 × 5µs = 20 µs. A transferência de 1 octeto demora 40 µs sendo o ritmo de transferência é 40 µs-1 = 25 KB/s.

c)

O protocolo de handshaking apresentado adapta-se transparentemente às características de desempenho de cada agente; no entanto, se as condições da instalação o permitirem o protocolo síncrono permite atingir ritmos de transferência mais elevados.

(7)

d)

Ocupação do processador = (1,5 + 1,0 + 1,1) / 5 = 72%.

e)

Em ambos os casos o ritmo máximo é conseguido com o processador ocupado a 100%. Com interrupções cada etapa demora: (1,5 + 1,0 + 1,1) = 3,6 µs.

Por amostragem cada etapa demora aproximadamente 1,0 µs. (Não há mudanças de contexto, embora o ciclo de serviço do canal seja um pouco mais complexo.

Nas condições iniciais (alínea a) ter-se-ia:

Ciclo de transferência [nibble-1] Ritmo de transferência Interrupções 6× 3,6 µs = 21,6 µs 23,1 KB/s

Polling 6× 1,0 µs = 6,0 µs 83,3 KB/s

Exercício 015

Um sistema tem um sensor de temperatura (termistor) constituído por uma resistência variável com a temperatura, RT, com a seguinte característica: 2

Temperatura [oC] Resistência [KΩ] 0 70 20 26 25 20 40 10 60 4,5 80 2,1 100 1,1

Esta resistência é inserida num circuito que converte o valor da tensão (R+ - R-) numa palavra de 10 bits, acessível ao processador. A tensão medida dependerá da temperatura: 3

(R+ - R-) = [REXT / (REXT + RT)] × 3 V .

2

RT varia exponencialmente com a temperatura e entre dois pontos pode ser interpolada

por:

RT = RT0 × eβ [(1/T) - (1/T0)] , T = temperatura em oC + 273 .

3

O circuito conversor de temperatura é representado na figura por um conversor Maxim 6682. As características eléctricas do enunciado são, no entanto, diferentes e simplificadas relativamente às deste circuito.

Comment [L1]: R+ - R- = REXT

× IEXT e IEXT = R+ / (REXT + RT)

(8)

R+ = 3 V REXT = 10 KΩ

IEXT ≈ ITHERMISTOR

Conversão A/D linear em [0 V, 3 V]:

(R+ - R-) = 0 ⇒ 0h (R+ - R-) = 3 V ⇒ 3FFh

Considerando que se pretende medir temperaturas entre 0 oC e 100 oC, de 1 em 1 oC, especifique e programe a função de cálculo da temperatura.

Resolução

Constrói-se uma tabela (recorrendo, por exemplo, a uma folha de cálculo) que relacione os valores da temperatura com a palavra resultado da conversão A/D.

A tabela é preenchida com os valores especificados sendo os restantes valores interpolados a partir destes. Como exemplo apresentamos a tabela preenchida para as temperaturas entre 0 oC e 10 oC. A interpolação é feita a partir dos valores de RT especificados a 0 oC e 20 oC.

Especificação Interpolação Conversão

T [oC] T [oK] RT [KΩ] β [οK] [KRT ] (R+ - R-) [V] Resultado 0 273 70 3961,05 70 0,375 128 1 274 66,3897 0,392723 134 2 275 62,9898 0,411016 140 3 276 59,7868 0,429881 146 4 277 56,7681 0,449317 153 5 278 53,9219 0,469323 160 6 279 51,2372 0,489898 167 7 280 48,7040 0,511038 174 8 281 46,3128 0,532739 181 9 282 44,0547 0,554994 189 10 283 41,9215 0,577796 197 ... ... ... ... ... 20 293 26 26 0,833333 284 β = ln (RT / RT0) / (1/T - 1/T0) RT = RT0 × eβ (1/T - 1/T0) REXT = 10 Resolução [V] = 0,00293

(9)

A partir daqui pode-se gerar uma tabela, a carregar em memória não volátil, com os valores binários correspondentes a cada um dos 101 valores de temperatura de 0 oC a 100 oC.

Há várias formas de realizar a função de cálculo da temperatura. Tabela com a função temperatura → resultado da conversão

Uma tabela armazena os valores da conversão correspondentes às 101 temperaturas. O programa tem que inverter esta função pesquisando na tabela o resultado da conversão. A temperatura é o índice dessa posição.

int resultado(101);

128,134,140,146,153,160,167,174,181,189,197, ... ,284, ... int resultado_actual; /* Resultado da conversão */

int temperatura;

int temperatura_valida; /* 0 – Temperatura fora dos limites */ if ((resultado_actual < resultado[0]) ou (resultado_actual > resultado[100])) temperatura_valida = 0; else { temperatura_valida = 1; temperatura = 0; /* Pesquisa linear */

while (resultado[temperatura] < resultado_actual)

temperatura = temperatura + 1; /* Avança na tabela */ if (resultado[temperatura] > resultado_actual)

temperatura = temperatura – 1; }

Tabela com a função resultado da conversão → temperatura

A tabela é indexada pelo resultado da conversão, obtendo-se directamente a temperatura medida. Esta tabela tem muito mais entradas do que os valores de temperatura que se pretende medir. As entradas correspondentes a temperaturas não inteiras são preenchidas em função do algoritmo de arredondamento para inteiro escolhido.

define T_MIN 128 /* Resultado da conversão de 0 graus */ define T_MAX 922 /* Resultado da conversão de 100 graus */ /* Arredondamento por truncagem */

int t(1024) /* t(0 a 133) = 0 , t(134 a 139) = 1, t(140 a 145) = 2, ... */

int resultado_actual, temperatura, temperatura_valida;

if ((t[resultado_actual] < T_MIN) ou (t[resultado_actual] > T_MAX))

temperatura_valida = 0; else

(10)

temperatura_valida = 1;

temperatura = t[resultado_actual]; }

Exercício 010 4

Pretende-se desenvolver um controlador para uma máquina de venda automática de chocolates. Dispõe-se de um microprocessador de 8 bits que possui barramentos de dados e de endereços e os sinais habituais de Read e Write; possui também duas entradas de interrupção. A máquina a controlar contém 12 botões de pressão (usados para seleccionar os chocolates), um módulo autónomo de identificação de moedas com o qual é possível dialogar usando comunicação série assíncrona (9600 baud) e um módulo dispensador de chocolates que é controlado através de uma interface digital com 6 bits de entrada e 2 bits de saída.

Indique, justificando sucintamente, que periféricos ligaria ao microprocessador para obter um sistema funcional.

4 Adaptado de (Nunes2002).

(11)

2 Programação com Interrupções

Exercício 002

Pretende-se portar o seguinte programa de um processador de 32 bits para um controlador de 8 bits. Este controlador suporta directamente tipos de dados de 8 e 16 bits, sendo as manipulações de outros tipos de dados sintetizadas pelo compilador a partir das instruções sobre tipos básicos.

define LIMIAR 100000; long int contador, temp; void interrupt conta (void); {

contador = contador+1; }

void disable (void); /* Inibe as interrupções */ void enable (void); /* Desinibe as interrupções */ void main (void);

{

...

while (contador < LIMIAR) {

executa_A (); temp = contador; ...

}

a) Que problemas antevê ao executar o programa no processador de 8 bits? b) Altere o programa de forma a preservar o seu comportamento original.

Resolução a)

O processador de 8 bits não manipula directamente inteiros de 32 bits (o long int é de 32 ou de 64 bits), portanto o compilador sintetiza as operações com long int (+, <, ...) com sequências de instruções.

Se uma destas sequências no programa principal for interrompida pela rotina conta o resultado da operação pode ser incorrecto pelo se devem executar estas sequências com as interrupções inibidas.

b)

As interrupções devem estar inibidas durante a comparação e a atribuição:

While (disable() (contador < LIMIAR) enable ()) executa_A (); ...

(12)

void main (void); { ... ciclo: disable (); if (contador < LIMIAR) { enable (); executa_A (); disable (); temp = contador; enable (); goto ciclo; } ... }

Solução mais compacta (a melhor):

void main (void); {

...

disable ();

ciclo: if (contador < LIMIAR) { enable (); executa_A (); disable (); temp = contador; enable (); goto ciclo; } ... }

(13)

3 Arquitecturas de Software

Exercício 005

Considere um sistema embebido que inclui uma sentinela (watchdog). O sistema possui uma arquitectura de software do tipo round-robin com 5 tarefas, uma das quais faz o serviço (re-inicialização) da sentinela. O período de guarda da sentinela é 10 ms.

Os tempos de execução das várias tarefas são indicados na tabela seguinte:

Tarefa Tempo de execução [ms]

T1 1,5

T2 [3, 4,5]

T3 0,5

T4 [4, 5]

T5 (serviço da sentinela) 0,1

Durante o desenvolvimento do sistema verificou-se que este bloqueava frequentemente sem que a sentinela se re-inicializasse.

a) Explique o que se passa.

b) Indique como pode ser corrigida esta situação.

Resolução a)

O ciclo principal por vezes demora mais de 10 ms.

9,6 ms ≤ T1 + T2 + T3 + T4 + T5 ≤ 11,6 ms

b)

Há duas alternativas:

• alargar o período da sentinela para, por exemplo, 12 ms;

• incluir mais uma chamada à tarefa da sentinela – T5 – no ciclo principal.

Neste caso a nova chamada seria preferencialmente inserida entre as chamadas a T2 e T3. O ciclo principal demoraria:

9,7 ms ≤ T1 + T2 + T5 + T3 + T4 + T5 ≤ 11,7 ms . O tempo máximo entre chamadas a T5 seria:

max (T1+T2, T3+T4) = max (6 ms, 5,5 ms) = 6 ms .

Exercício 006

Pretende-se construir uma balança electrónica que dialoga com o exterior por comunicação série assíncrona a 19200 baud.

(14)

Um sensor piezoeléctrico gera uma tensão eléctrica proporcional ao peso a medir. Esta tensão é convertida num valor digital por um conversor analógico-digital integrado no microcontrolador da balança. Este microcontrolador inclui igualmente timer e UART. O sistema deve efectuar medições de peso com intervalos de 20 ms.

Sempre que recebe um pedido por comunicação série o sistema envia a média das 3 últimas medições efectuadas, indicando igualmente se o peso está estável. A resposta não deve demorar mais do que 80 ms.

a) Este sistema deve ser considerado um sistema de tempo real?

b) Proponha, justificando sucintamente, uma arquitectura para o software do sistema. c) Indique em que tarefas organizaria o software e qual seria o papel de cada uma.

Resolução a)

Embora sejam especificados vários tempos de resposta com limitações temporais, não é evidente, por falta de contexto da aplicação, que a sua violação não possa ocorrer sem falhas graves. Por outro lado os requisitos temporais, tirando a necessidade em manter a comunicação a 19200 baud, não são muito apertados pelo que não se considera este sistema de tempo-real.

b)

Arquitectura round-robin com interrupções. É a arquitectura mais simples com interrupções.

A existência de interrupções neste caso simplificará a construção da aplicação, nomedamente o serviço dos timers e do canal série.

c) Tarefas:

T1: Serviço do canal série assíncrono T2: Leitura do peso

T3: Cálculo da informação de peso a enviar.

Interrupt handlers:

H1: Transmissão de caracter pelo canal série. (Desdobrável, eventualmente, em duas rotinas de interrupção, uma para a recepção, a outra para a transmissão.) H2: Relógio de “tempo real”. Marca os períodos de leitura do peso.

H3: Leitura do peso. Rotina conveniente se o conversor analógico-digital se sincronizar com o processador por interrupção.

(15)

Considere o seguinte programa de um sistema embebido que interage com 4 dispositivos externos:

/* Rotinas de interrupção */

void interrupt handle_device_A (void); {

… /* Serve o dispositivo A */ Insert_in_queue (function_A); }

void interrupt handle_device_D (void); { … /* Serve o dispositivo D */ Insert_in_queue (function_D); } … /* Ciclo principal */ void main (void); {

while (TRUE) {

call Get_from_queue (); /* Chama a função à cabeça da lista e trata a informação do dispositivo

correspondente */ }

}

a) Que arquitectura é que este programa tem?

b) Quais são as principais vantagens e desvantagens desta arquitectura face às outras arquitecturas que conhece?

c) Em operação o sistema apresentava falhas intermitentes. Para resolver o problema identificaram-se melhor vários requisitos do sistema e mediram-se os tempos de resposta a seguir apresentados.

Requisitos do sistema − Tempo de latência da interrupção do dispositivo até ao início do tratamento da informação (entrada em

Process_information_from_X) [µs]: Dispositivo A Dispositivo B Dispositivo C Dispositivo D 1.000 1.600 4.000 10.000 Tempos de resposta do programa [µs]:

handle_device_A handle_device_B handle_device_C handle_device_D 100 50 40 35 Process_information_from_A Process_information_from_B Process_information_from_C Process_information_from_D 400 1000 500 200 Tempo de latência para o atendimento das interrupções [µs] 8

(16)

c.1) Em face destes valores justifique a ocorrência das falhas intermitentes calculando os tempos de latência para o tratamento da informação dos 4 dispositivos.

tempo de latência de X = t (entrada em Process_information_from_X) – t (pedido de interrupção do dispositivo X)

c.2) É possível alterar o programa inicial sem lhe modificar a arquitectura nem a estrutura interna das rotinas de interrupção e de processamento da informação, por forma a conseguir um funcionamento fiável? Justifique sucintamente. (Ignore os tempos de execução dos testes If (flag_X).)

c.3) Sugira modificações ao programa inicial, mantendo a arquitectura geral, por forma a eliminar as falhas intermitentes.

Resolução a)

Fila de espera de funções (function queue).

b)

Face às arquitectuas round-robin:

Vantagens: Possibilidade de controlar, mesmo dinamicamente, as prioridades relativas das tarefas.

Desvantagem: Maior complexidade do “sistema operativo” (sistema de suporte à execução).

Face aos sistemas operativos de tempo-real (RTOS):

Desvantagem: Uma tarefa mais prioritária tem que aguardar pela conclusão da tarefa que detém o controlo do processador.

Vantagem: Simplicidade.

c.1)

t_X = t_handle_device_X + t_ciclo_principal

t_ciclo_principal = max(t_Process_information_from_i) = 1000µs (tarefa B) tempo de latência de A = 100+1000=1100µs tempo de latência de C = 40+1000=1040µs tempo de latência de B = 50+1000=1050µs tempo de latência de D = 35+1000=1035µs A latência de A viola o requisito e, portanto, podem ocorrer situações em que o serviço de A não é devidamente completado.

(17)

Esta é uma limitação intrínseca da arquitectura, nas condições enunciadas não é possível melhorá-la.

c.3)

Mantém-se a arquitectura function-queue scheduling.

A única possibilidade de resolver o problema é decompôr as funções mais demoradas em módulos mais pequenos, se a aplicação o permitir. Neste caso é a tarefa B (Process_information_from_B) que levanta problemas pela sua duração pelo que deveria ser decomposta em duas tarefas, não podendo nehuma delas demorar mais do que 900µs:

/* Rotinas de interrupção */

void interrupt handle_device_B (void); { … /* Serve o dispositivo B */ Insert_in_queue (function_B1); Insert_in_queue (function_B2); } …

3.1 Escalonamento

Exercício 011 5

Uma aplicação constituída por três processos cooperantes executa-se num sistema operativo multitarefa com rate monotonic scheduling e com preempção. Os tempos de execução dos processos e os períodos de repetição dos eventos que são servidos pelos respectivos processos são indicados na tabela seguinte.

Processo Tempo de execução Período de repetição

P1 1 4

P2 2 6

P3 3 12

a) Desenhe o diagrama temporal do escalonamento dos processos.

b) Qual é a ocupação do processador ao executar esta aplicação? (Considere nulo o tempo de comutação de processos.)

c) Desenhe o diagrama temporal do escalonamento dos processos considerando que o sistema não tem preempção. Compare os sistemas com e sem preempção.

d) Considere agora o seguinte algoritmo dinâmico de escalonamento: “É lançado o processo cujo tempo de serviço estiver mais próximo do intervalo crítico”.

Desenhe o diagrama temporal do escalonamento dos processos (com preempção).

5 Adaptado do exemplo 6-5 de (Wolf2001).

(18)

Resolução a)

Considera-se que os pedidos são servidos no fim da execução do processo que lhes está associado.

Rate monotonic scheduling com preempção

P1

P2

P3

t 1 2 3 4 5 6 7 8 9 10 11 12

Processos pendentes (por prioridade decrescente):

P1 P2 P2 P3 P1 P3 P2 P2 P1 P3 - - P2 P3 P3 P3 P3 P3 P3 P3

b)

Do diagrama temporal conclui-se que a ocupação U = 10/12 ≈ 83,3% .

Também se chegava ao resultado calculando a soma das contribuições dos vários processos (Ui = tempo de execução i / período de repetição i):

U1 = 1 / 4 = 3 / 12 U2 = 2 / 6 = 4 / 12 U3 = 3 / 12

U = U1 + U2 + U3 = 10 /12 ≈ 83,3% .

c)

Rate monotonic scheduling sem preempção

P1

P2

P3

t 1 2 3 4 5 6 7 8 9 10 11 12

Processos pendentes (por prioridade decrescente):

P1 P2 P2 P3 P1 P1 P1 P2 P1 P1 - - P2 P3 P3 P3 P3 P2 P2 P3

d)

A escolha do processo a lançar é feita calculando a diferença entre o tempo da repetição do novo pedido e o tempo que falta para o serviço do pedido pendente.

(19)

Escalonamento dinâmico com preempção P1 P2 P3 t 1 2 3 4 5 6 7 8 9 10 11 12

Processos pendentes (por prioridade decrescente):

P1 = 4 - 1 = 3 P2 = 6 - 2 - 1 = 3 P1 = 4 - 0 - 1 = 3 P2 = 6 - 0 - 2 = 4 P1 = 4 - 0 - 1 = 3 - - P2 = 6 - 2 = 4 P3 = 12 - 2 - 3 = 7 P3 = 12 - 4 - 2 = 6 P3 = 12 - 6 - 1 = 5 P3 = 12 - 8 - 1 = 3 P3 = 12 - 3 = 9 P2 = 6 - 1 -2 = 3 P3 = 12 - 3 - 3 = 6 P3 = 12 - 5 - 2 = 5 P2 = 6 -1 - 1 = 4 P3 = 12 - 9 - 1 = 2 P3 = 12 - 1 - 3 = 8 P3 = 12 - 7 - 1 = 4

(20)

4 Optimização de Programas

4.1 Tempo de Execução

Quase sempre a redução do tempo de execução traduz-se na redução do consumo desde que, fora do período activo de execução, o sistema seja colocado num modo de baixo consumo (standby).

Tendo isto em conta rever, por exemplo, o exercício 013.

4.2 Consumo de Energia

Exercício 008

Num equipamento embebido com um microprocessador de 16 bits com cache mediram-se os seguintes valores relativos de consumo de energia: 6

Operação Consumo

Operações aritméticas e lógicas elementares (ex. soma de 16 bits, salto) 1

Multiplicação de 16 bits 3,6

Leitura na cache (de dados ou de instrução) 4,4

Escrita na cache 9

Acesso às E/S 10

Transferência com a memória de uma palavra de 16 bits 33 O processador tem uma arquitectura Load-Store (as operações aritméticas e lógicas só envolvem registos, todas as variáveis em memória têm que ser previamente carregadas para registos), sem flags e as instruções condicionais só comparam com zero. Todas as instruções têm 16 bits.

O sistema tem caches separadas para código e dados. A cache de dados tem 1k palavras de 16 bits com mapeamento directo e com blocos de 2 palavras; a política de escrita é

write-back. A cache de código tem a mesma organização da cache de dados. Todos os

barramentos são de 16 bits.

O espaço de endereçamento tem 64k palavras. Neste sistema executa-se o seguinte programa:

#define N 32

int a[N],b[N]; /* Inteiros de 16 bits */ register int i;

...

a[i] = 0;

for (i=1; i<N; i=i++) a[i] = b[i]-b[i-1];

que é compilado na seguinte sequência de instruções:

6 Adaptado de (Wolf2001).

(21)

Instrução

Ciclo: Load Rx ← b[i]

Load Ry ← b[i-1] Subtract Rz ← Rx – Rz Store a[i] ← Rz Add i ← i+1 Add Rw ← N-i JumpIfNotZero Ciclo

Considere que o código é alocado a partir do endereço 0h, sendo o código correspondente ao ciclo alocado a partir de 1000h, e os dados são alocados a partir de 8000h pela ordem em que são declaradas as variáveis.

A cache está inicialmente vazia.

a) Calcule o consumo de energia do sistema, medido em unidades relativas (a partir dos valores apresentados na tabela), ao executar esta secção do programa.

b) Optimize o programa de forma a reduzir o consumo de energia do sistema ao executá-lo.

Resolução a)

Cada instrução gera um acesso de leitura (opcode fetch), as instruções Load-Store geram adicionalmente um acesso a dados. Não sendo a especificação mais detalhada vamos assumir que só as instruções aritméticas e lógicas “simples” tem um consumo de 1, para além do consumo decorrente dos acessos gerados.

Nesta arquitectura – Processador ⇔ Cache ⇔ Memória – o processador só gera acessos à cache. Esta, ao servir as faltas resultantes dos pedidos do processador, pode gerar acessos à memória. O consumo de cada acesso da cache à memória é a soma dos consumos de uma transferência com a memória mais uma leitura, ou escrita, na cache.

O programa ao executar-se gera os rastos nas interfaces processador-cache e cache-memória incluídos na tabela seguinte.

(22)

Rasto do processador Rasto da cache 1 4,4 9 3 3 It er aç ã o Instrução E n d er e ço [ h ] A ce ss o R es p o st a d a c ac h e E n d er eç o [ h ] A c es so à m em ó ri a O p . A L U e le m en ta r L e it u ra n a ca c h e E sc ri ta n a c ac h e T ra n sf . co m m e m ó ri a a[0] = 0 W M 8000 R 0 2 1 8001 R 0 1 1 1 Ciclo: Load Rx, b[1] 1000 F M 1000 R 1 1 1 1001 R 0 1 1 1 8021 R M 8021 R 1 1 1 8020 R 0 1 1 1 Load Ry, b[0] 1001 F H 1 0 0 1 8020 R H 1 0 0 1 Subtract Rz,Rx,Ry 1002 F M 1002 R 1 1 1 1 1003 R 0 1 1 1 Store a[1],Rz 1003 F H 1 0 0 1 8001 W H 0 1 0

1 Add Ri,Ri,1 1004 F M 1004 R 1 1 1 1 Hit rate

1005 R 0 1 1 50%

1 Sub Rw,N,Ri 1005 F H 1 1 0 0 Acções 4 9 11 10

1 JumpIfNotZero Rw,Ciclo 1006 F M 1006 R 1 1 1 1 Consumo 4 40 99 330

1007 R 0 1 1 472,6 2 Ciclo: Load Rx, b[2] 1000 F H 1 0 0 2 8022 R M 8022 R 1 1 1 8023 R 0 1 1 2 Load Ry, b[1] 1001 F H 1 0 0 2 8021 R H 1 0 0 2 Subtract Rz,Rx,Ry 1002 F H 1 1 0 0 2 Store a[2],Rz 1003 F H 1 0 0 2 8002 W M 8002 R 0 2 1 Hit rate 8003 R 0 1 1 80%

2 Add Ri,Ri,1 1004 F H 1 1 0 0 Acções 4 9 5 4

2 Sub Rw,N,Ri 1005 F H 1 1 0 0 Consumo 4 40 45 132

(23)

It er aç ã o Instrução E n d er e ço [ h ] A ce ss o R e sp o st a d a ca ch e E n d er e ço [ h ] A ce ss o à m em ó ri a O p . A L U e le m en ta r L e it u ra n a ca c h e E sc ri ta n a c ac h e T ra n sf . co m m e m ó ri a 3 Ciclo: Load Rx, b[3] 1000 F H 1 0 0 3 8023 R H 1 0 0 3 Load Ry, b[2] 1001 F H 1 0 0 3 8022 R H 1 0 0 3 Subtract Rz,Rx,Ry 1002 F H 1 1 0 0

3 Store a[3],Rz 1003 F H 1 0 0 Hit rate

3 8003 W H 0 1 0 100%

3 Add Ri,Ri,1 1004 F H 1 1 0 0 Acções 4 9 1 0

3 Sub Rw,N,Ri 1005 F H 1 1 0 0 Consumo 4 40 9 0

3 JumpIfNotZero Rw,Ciclo 1006 F H 1 1 0 0 52,6 4 Ciclo: Load Rx, b[4] 1000 F H 1 0 0 4 8024 R M 8024 R 1 1 1 4 8025 R 0 1 1 4 Load Ry, b[3] 1001 F H 1 0 0 4 8023 R H 1 0 0 4 Subtract Rz,Rx,Ry 1002 F H 1 1 0 0 4 Store a[4],Rz 1003 F H 1 0 0 4 8004 W M 8004 R 0 2 1 Hit rate 4 8005 R 0 1 1 80%

4 Add Ri,Ri,1 1004 F H 1 1 0 0 Acções 4 9 5 4

4 Sub Rw,N,Ri 1005 F H 1 1 0 0 Consumo 4 40 45 132

4 JumpIfNotZero Rw,Ciclo 1006 F H 1 1 0 0 220,6 5 Ciclo: Load Rx, b[5] 1000 F H 1 0 0 5 8025 R H 1 0 0 5 Load Ry, b[4] 1001 F H 1 0 0 5 8024 R H 1 0 0 5 Subtract Rz,Rx,Ry 1002 F H 1 1 0 0

5 Store a[5],Rz 1003 F H 1 0 0 Hit rate

5 8005 W H 0 1 0 100%

5 Add Ri,Ri,1 1004 F H 1 1 0 0 Acções 4 9 1 0

5 Sub Rw,N,Ri 1005 F H 1 1 0 0 Consumo 4 40 9 0

5 JumpIfNotZero Rw,Ciclo 1006 F H 1 1 0 0 52,6

O consumo de energia no ciclo é:

Ea = 472,6 + 220,6 + 52,6 + 220,6 + 52,6 + ...

(24)

b)

Desdobrando o ciclo reduz-se o número total de instruções que são executadas, como tal o programa deverá executar-se mais depressa e o sistema consumir menos energia. Todavia o aumento da taxa de faltas compulsivas na cache de código poderá anular ou inverter este efeito.

Como o número de iterações é impar (31) o ciclo deve ser desdobrado após a iteração inicial (com i = 1). Rasto do processador Rasto da cache 1 4,4 9 3 3 It er aç ã o Instrução E n d er eç o [ h ] A ce ss o R es p o st a d a c ac h e E n d er eç o [ h ] A c es so à m em ó ri a O p . A L U e le m en ta r L e it u ra n a ca ch e E sc ri ta n a c ac h e T ra n sf . co m m e m ó ri a a[0] = 0 W M 8000 R 0 2 1 8001 R 0 1 1 1 Load Rx, b[1] 1000 F M 1000 R 1 1 1 1 1001 R 0 1 1 1 8021 R M 8021 R 1 1 1 1 8020 R 0 1 1 1 Load Ry, b[0] 1001 F H 1 0 0 1 8020 R H 1 0 0 1 Subtract Rz,Rx,Ry 1002 F M 1002 R 1 1 1 1 1 1003 R 0 1 1 Hit rate 1 Store a[1],Rz 1003 F H 1 0 0 50% 1 8001 W H 0 1 0 Acções 2 7 9 8

1 Add Ri,Ri,1 1004 F M 1004 R 1 1 1 1 Consumo 2 31 81 264

1 1005 R 0 1 1 377,8 2 Ciclo: Load Rx, b[2] 1005 F H 1 0 0 2 8022 R M 8022 R 1 1 1 2 8023 R 0 1 1 2 Load Ry, b[1] 1006 F M 1006 R 1 1 1 2 1007 R 0 1 1 2 8021 R H 1 0 0 2 Subtract Rz,Rx,Ry 1007 F H 1 1 0 0

2 Store a[2],Rz 1008 F M 1008 R 1 1 1 Hit rate

2 1009 R 0 1 1 50%

2 8002 W M 8002 R 0 2 1 Acções 2 7 9 8

2 8003 R 0 1 1 Consumo 2 31 81 264

(25)

It er a çã o Instrução E n d e re ço [ h ] A ce ss o R e sp o st a d a ca c h e E n d e re ço [ h ] A ce ss o à m em ó ri a O p . A L U e le m en ta r L ei tu ra n a ca c h e E sc ri ta n a ca ch e T ra n sf . co m m em ó ri a

2 Load Rx, b[3] 100A F M 100A R 1 1 1

2 100B R 0 1 1 2 8023 R H 1 0 0 2 Load Ry, b[2] 100B F H 1 0 0 2 8022 R H 1 0 0 2 Subtract Rz,Rx,Ry 100C F M 100C R 1 1 1 1 2 100D R 0 1 1 2 Store a[3],Rz 100D F H 1 0 0 2 8003 W H 0 1 0

2 Add Ri,Ri,1 100E F M 100E R 1 1 1 1 Hit rate

2 100F R 0 1 1 60%

2 Sub Rw,N,Ri 100F F H 1 1 0 0 Acções 4 9 9 8

2 JumpIfNotZero Rw,Ciclo 1010 F M 1010 R 1 1 1 1 Consumo 4 40 81 264

2 1011 R 0 1 1 388,6 3 Ciclo: Load Rx, b[4] 1005 F H 1 0 0 3 8024 R M 8024 R 1 1 1 3 8025 R 0 1 1 3 Load Ry, b[3] 1006 F H 1 0 0 3 8023 R H 1 0 0

3 Subtract Rz,Rx,Ry 1007 F H 1 1 0 0 Hit rate

3 Store a[4],Rz 1008 F H 1 0 0 75% 3 8004 W M 8004 R 0 2 1 Acções 2 7 5 4 3 8005 R 0 1 1 Consumo 2 31 45 132 3 Add Ri,Ri,1 1009 F H 1 1 0 0 209,8 3 Load Rx, b[5] 100A F H 1 0 0 3 8025 R H 1 0 0 3 Load Ry, b[4] 100B F H 1 0 0 3 8022 R H 1 0 0 3 Subtract Rz,Rx,Ry 100C F H 1 1 0 0

3 Store a[5],Rz 100D F H 1 0 0 Hit rate

3 8005 W H 0 1 0 100%

3 Add Ri,Ri,1 100E F H 1 1 0 0 Acções 4 9 1 0

3 Sub Rw,N,Ri 100F F H 1 1 0 0 Consumo 4 40 9 0

3 JumpIfNotZero Rw,Ciclo 1010 F H 1 1 0 0 52,6

(26)

Eb = 377,8 + (377,8 + 388,6) + 14 × (209,8 + 52,6)

= 1144,2 + 14 × (209,8 + 52,6) ≈ 4818 unidades de consumo .

Apesar de diminuir o número de instruções executadas o consumo aumenta porque aumenta a extensão do código executado em cada iteração, aumentando o número de faltas compulsivas. O número relativamente reduzido de iterações não permite atenuar este efeito.

O desdobramento só seria vantajoso a partir de um número mais elevado de iterações, N: Ea ≥ Eb

472,6 + N × (220,6 + 52,6) 1144,2 + (N – 1) × (209,8 + 52,6) 273,2 N + 472,6 262,4 N + 881,8

N ≥ 38

Exercício 012

Um equipamento de monitorização ambiental, instalado em locais remotos, recolhe periodicamente dados com informação meteorológica e com a concentração de certas substâncias na atmosfera e no solo, transmitindo essa informação por rádio para um centro de controlo. O equipamento recolhe dados de 16 sensores de ½ em ½ hora, devendo ter a capacidade de reter a informação recolhida durante 2 semanas para o caso de ocorrer uma falha prolongada do sistema de comunicações.

a) Escolha a configuração mais adequada para o controlador do equipamento.

A: Processador de 8 bits com interrupções, 16 MB de memória não volátil, 2 MB de RAM, controlador de acesso directo à memória (DMA), conversor A/D com

multiplexer de canais, temporizador e controlador de comunicações.

B: Processador de 8 bits com interrupções, 16 MB de memória não volátil, 2 MB de RAM, controlador de acesso directo à memória (DMA), conversor A/D com

multiplexer de canais, temporizador.

C: Processador de 8 bits com interrupções, 16 MB de memória não volátil, 2 MB de RAM, conversor A/D com multiplexer de canais, temporizador e controlador de comunicações.

D: Processador de 8 bits com interrupções, 16 MB de memória não volátil, 2 MB de RAM, controlador de acesso directo à memória (DMA), conversor A/D com

multiplexer de canais, conversor D/A, temporizador e controlador de comunicações.

E: Processador de 8 bits com interrupções, 16 MB de memória não volátil, 2 MB de RAM, conversor A/D com multiplexer de canais, 3 temporizadores (relógio de tempo real, recolhas e comunicações) e controlador de comunicações.

F: Processador de 8 bits, 16 MB de memória não volátil, 2 MB de RAM, conversor A/D com multiplexer de canais, conversor D/A, temporizador e controlador de comunicações.

b) O consumo do equipamento varia em função do seu estado operacional de acordo com a tabela seguinte:

(27)

Operação Duração relativa

(no ciclo principal)

Consumo [U – unidade de potência]

Repouso (standby) 97% 0,1 U

Medição dos sensores 1% 10 U

Preparação para transmissão 1% 10 U

Transmissão de dados 1% 100 U

Calcule o consumo do equipamento por ciclo de medida e transmissão de dados. c) Está-se a considerar a utilização de um algoritmo de compressão de dados para reduzir

a quantidade de informação a transferir. Avaliaram-se 4 algoritmos cujas características são indicadas na tabela seguinte.

Algoritmo Taxa de compressão

Dados comprimidos / Dados originais

Agravamento do tempo de execução

Preparação para transmissão com compressão / Preparação para transmissão sem compressão

Z1 90% 1,1

Z2 75% 1,3

Z3 60% 1,5

Z4 57% 1,9

Considere que o tempo de transmissão é proporcional à quantidade de dados a transferir.

Qual é o algoritmo que minimiza o consumo da estação remota?

Resposta

a) Configuração C. b) 1,3 U.

c) O algoritmo Z3 minimiza o consumo de energia.

Exercício 013

Optimize o programa seguinte de modo a reduzir o consumo do equipamento onde se executa. n = ... ; ... m = ... ; ... p = ... ; ... /* m,n,p,z[],a[],b[] inteiros */ for (i=0;i<n*m;i++) { z[i] = p*a[i]+(p/2)*b[i]; } Resposta

Se reduzirmos o número de instruções que são efectivamente executadas conseguiremos muito provavelmente reduzir o consumo do equipamento. Neste caso vamos passar operações complexas para fora do ciclo e reduzir o seu número dentro do ciclo. Desta forma também conseguiremos melhorar o desempenho.

(28)

q = n*m;

for (i=0;i<q;i++) {

z[i] = p*(a[i]+b[i]/2); }

No programa original executavam-se 3 multiplicações por iteração – n*m, p*a[],

(p/2)*b[] – agora executa-se uma – p*().

4.3 Ocupação de Memória

(a inserir) Comment [L2]: IDEIAS 1)

Armazenamento de executáveis compactados (tipo Symbian do Nokia Communicator). Comparar .exe com .zip 2)

Compactação de dados num data logger.

Comprimir de uma forma expedita valores de temperatura e pressão atmosférica.

(29)

5 Concepção e Desenho de Sistemas

Exercício 009 7

Pretende-se desenvolver um computador de bordo para automóveis que deve indicar: 1. o consumo instantâneo,

2. o consumo médio, e

3. uma previsão da autonomia do veículo face ao combustível disponível e ao padrão de consumo até ao momento.

O sistema tem uma entrada de alarme (proveniente de outro circuito); se essa entrada for activada, deverá ser imediatamente gerado um sinal sonoro e afixada uma mensagem no

display do sistema.

Entradas: Sensor que indica o nível de gasolina no depósito, sensor que indica o consumo

de combustível do motor em cada instante, sensor que gera um impulso por cada 1/4 de volta das rodas, entrada de alarme, botão de pressão para o utilizador seleccionar a informação mostrada no display ou para indicar que tomou conhecimento de um alarme.

Saídas: Display LCD comum, pequena sirene para assinalar alarmes.

Outros aspectos a ter em conta: A monitorização do consumo instantâneo deve ser

efectuada de 10 em 10 ms; a leitura do respectivo valor demora 10 µs. O cálculo do consumo médio é simples demorando um tempo pouco significativo em termos do processador. A previsão da autonomia é muito complexa (é muito "inteligente" e precisa) demorando 2s a calcular novo valor.

A informação visualizada no display não deve ser actualizada a ritmo superior a 2Hz (T ≥ 500ms). A afixação de uma mensagem de alarme deve ser instantânea do ponto de vista do utilizador. A sirene de alarme toca intermitentemente durante 5s após o que se desliga (a mensagem continua afixada no display). Em caso de alarme, se o utilizador premir o botão de pressão, o sinal sonoro e a mensagem devem desaparecer instantaneamente (do ponto de vista do utilizador).

a) Justifica-se o uso de um sistema operativo de tempo-real? Porquê?

b) É conveniente usar interrupções? Se sim, indique quantas, como as ordenaria em termos de prioridades e que acções executariam.

c) Considerando uma decomposição do sistema em tarefas, indique quais usaria, qual o papel de cada uma e que prioridade teriam.

Resolução a)

Pelo que é referido não é necessário um sistema operativo de tempo-real, não há deadlines muito restritivos a respeitar.

7 Adaptado de (Nunes2000).

(30)

b)

Todavia a utilização de interrupções simplificará bastante a organização e o desenvolvimento da aplicação. Por exemplo, o cálculo da autonomia pode ser realizado num único fluxo de controlo enquanto as interrupções associadas aos eventos externos continuam a ser atendidas.

O nível de gasolina pode ser medido por amostragem uma vez que não varia rapidamente (à escala temporal do controlador).

A atribuição de prioridades, da mais para a menos elevada, é a seguinte:

Interrupção Prioridade Acção Justificação

Alarme 1 Detecta e regista um sinal externo de alarme.

Não se pode perder a notificação de alarme. Rotação

das rodas

2 Detecta e regista o impulso de ¼ de volta.

Deve evitar-se perder impulsos de rotação porque tem um efeito cumulativo no erro da distância percorrida. Consumo

instantâneo

3 Lê o consumo instantâneo. A perda esporádica de uma medida não é grave. Botão de

pressão

4 Detecta o botão carregado. Interacção ao ritmo humano.

c)

A lista de tarefas, começando pela tarefa com prioridade mais elevada, é a seguinte:

Tarefa Prioridade Função

Sinaliza alarme 1 Avisa no display e por activação da sirene a recepção de um alarme.

Botão 2 Lê o estado do botão e desliga o aviso do alarme ou comuta a informação no display.

Consumo instantâneo

3 Mostra o consumo instantâneo.

Consumo médio

4 Calcula o consumo médio.

Display 5 Visualiza os consumos e a autonomia.

(31)

6 Referências

(Nunes 2000) Renato Nunes. Exames de Arquitectura de Sistemas Computacionais. Instituto Superior Técnico, 2000.

(Nunes 2002) Renato Nunes. Exames de Arquitectura de Sistemas Computacionais. Instituto Superior Técnico, 2002.

(Wolf 2001) Wayne Wolf. Computers as Components – Principles of Embedded

Referências

Documentos relacionados

O equipamento possui at´e 10 sa´ıdas el´etricas com capacidade de fornecimento individual de at´e 150 mA e at´e 10 sa´ıdas ´opticas para fibra tipo multimodo e conector ST..

O uso de fibra de bambu refletiu positivamente no estudo, porém para as concentrações aplicadas e os parâmetros de textura analisados, não houve diferença

Vários trabalhos têm demonstrado que a mortali- dade por síndrome ascítica é maior nos machos do que nas fêmeas, acreditando-se que este fato esteja relacionado com a maior

Tanto em sua paisagem física como em sua paisagem humana, o Mediterrâneo encruzilhada, o Mediterrâneo heteróclito apresenta-se em nossas lembranças como uma imagem coerente, como

Mas, como patrocinador, ele também não deixa de ser só um torcedor, que tem de torcer para o time ir bem, mas que pode cobrar com um pouco mais de peso se o resultado não

Em média, a Vivo forneceu a melhor velocidade de download para os seus clientes em 2020... A Vivo progrediu em especial a partir de abril

Esta realidade exige uma abordagem baseada mais numa engenharia de segu- rança do que na regulamentação prescritiva existente para estes CUA [7], pelo que as medidas de segurança

Se você vai para o mundo da fantasia e não está consciente de que está lá, você está se alienando da realidade (fugindo da realidade), você não está no aqui e