pic18f84a e acesso a memoria cache c++

38
Universidade Federal do Rio Grande do Norte Centro de Tecnologia Departamento de Engenharia de Computação e Automação MICROCONTROLADOR PIC 16F84A E ACESSO A MEMÓRIA CACHE Primeira Avaliação Discente: Jaime Cristalino Jales Dantas Matricula: 2011008771 Disciplina: Arquitetura de Computadores Natal, 2 de outubro de 2015

Upload: jaimejales2008

Post on 09-Feb-2016

36 views

Category:

Documents


0 download

DESCRIPTION

PIC18F84A e Acesso a memoria cache c++Engenharia de computacao

TRANSCRIPT

Page 1: PIC18F84A e Acesso a memoria cache c++

   

Universidade Federal do Rio Grande do Norte Centro de Tecnologia

Departamento de Engenharia de Computação e Automação

MICROCONTROLADOR PIC 16F84A E ACESSO A MEMÓRIA CACHE

Primeira Avaliação

Discente: Jaime Cristalino Jales Dantas Matricula: 2011008771

Disciplina: Arquitetura de Computadores

Natal, 2 de outubro de 2015

Page 2: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

2  

Sumário Parte I – Microcontrolador PIC 16F84A  .......................................................................................................  3  

1 – Introdução  ..................................................................................................................................................................  3  2 – Pinagem PIC 16F84A  ..............................................................................................................................................  3  3 - Estrutura do microcontrolador PIC 16F84A  ......................................................................................................  5  4 - Instruções  ....................................................................................................................................................................  8  5 - Interrupções  .............................................................................................................................................................  13  

4.1 - Interrupções externas  ..........................................................................................................................................................  14  4.2 - Interrupções de overflow TMR0  .....................................................................................................................................  14  4.3 - Interrupções por mudança de estado PORTB  .............................................................................................................  15  4.4 - Interrupções de fim de escrita EEPROM  .....................................................................................................................  15  

Parte 2 – Acesso à memória cache  .................................................................................................................  16  1 – Análise das configurações da cache  ....................................................................................................................  16  2  – Analise dos resultados  ...........................................................................................................................................  21  3 – Algoritmo  .................................................................................................................................................................  25  

Bibliografia  .........................................................................................................................................................  38  

Page 3: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

3  

Parte I – Microcontrolador PIC 16F84A

1 – Introdução

O microcontrolador pode ser analisado como um minicomputador que possui as básicas funções

de um computador convencional, porém com um tamanho muito pequeno. Muitos produtos possuem

microcontroladores que gerenciam e controlaram determinadas funções deles. Para isso, nos chamamos

de sistemas embarcados qualquer produto que tenha uma eletrônica que usa microcontroladores. Um

microcontrolador é um chip computacional que possui pinos de entrada e saída de dados, pinos de

controle, memoria, CPU, etc. A Microchip possui diversos tipos de microprocessadores divididos em

diferentes famílias, e o PIC 16F84A é um tipo de microcontrolador da famílias 16 da Microchip.

O microcontrolador PIC 16F84A tem sido uns dos microcontroladores mais usados no mundo, e

ele possui uma CPU, memoria flash, memoria RAM, I/O, uma memoria permanente pra guardar o

programa, e outros dispositivos auxiliares, tais como clock, conversos A/D, etc.

2 – Pinagem PIC 16F84A

Figura 1 - Pinagem do PIC 16F84A

Page 4: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

4  

A discrição e função de cada pino é mostrado na tabele a seguir  

Tabela 1 - Discrição de pinos do PIC 16F84A

NOME PINO DESCRIÇÃO OSC1/CLKIN 16 Entrada para o cristal oscilador/clock externo OSC2/CLKOUT 15 Saída para o cristal oscilador/clock externo 𝑴𝑪𝑳𝑹 4 Master Clear (reset) externo RA0 17

Porta de I/O digital RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 Porta de I/O digital ou entrada de clock para o

contador

Pode ter Pull-up interno

habilitado por

software

RB0/INT 6 Porta de I/O digital / Interrupção externa RB1 7

Porta de I/O digital RB2 8 RB3 9 RB4 10 Porta de I/O digital ou interrupção na mudança de

estado RB5 11

RB6 12 Porta de I/O digital, interrupção na mudança de estado, ou clock da programação serial

RB7 13 Porta de I/O digital, interrupção na mudança de estado, ou data da programação serial

VSS 5 GND - Tensão de referência negativa e I/O VDD 14 Vcc - Alimentação positiva (+5 Volts) e I/O

Page 5: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

5  

3 - Estrutura do microcontrolador PIC 16F84A

O microcontrolador PIC 16F84A é um microcontrolador de 8 bits que utiliza a arquitetura RISC.

Ela é baseada em registradores, com o barramento de memória de dados separado do barramento de

memória de programa. Este conceito permite ter um conjunto de instruções simples, mas extremamente

poderoso que enfatiza as operações bit, byte e de registradores. A estrutura completa do

microcontroaldor PIC 16F84A pode ser vista no diagrama abaixo:

 Figura 2 - Diagrama PIC 16F84A

Page 6: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

6  

No diagrama acima, podemos nomear os blocos agrupados em:

1 – CPU (central processing unit)

2 – Modulo de entradas e saídas

3 – Barramento de endereço da memória de programa

4 - Memória principal de dados do programa

5 – Barramento de dados (para comandos de instrução)

6 – Barramento de dados principal central E/S e memoria principal e de dados

7 – Barramento de endereço para memoria principal de dados

8 – Endereços extraídos do comando de instrução

9 - Dado explicito extraído do comando de instrução

10 – Barramento de instrução

Para uma rápida analise, podemos simplificar esse diagrama acima em um diagrama simplificado

em que blocos foram agrupados. Essa análise pode ser analisada em comparação com a arquitetura de

Von Neumann, já que os elementos do microcontrolador estão dispostos de forma similar a essa

arquitetura. Vale salientar que a arquitetura do PIC 16F84A possui barramentos específicos que

interligam o CPU com os elementos de memória (principal e de programa). Para a análise da estrutura

do microcontrolador PIC 16F84A, utilizaremos o diagrama da figura abaixo:

Page 7: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

7  

Figura 3 – Estrutura simplificada PIC 16F84A

Os componentes básicos do PIC 16F84A estão listados abaixo:

Memória Flash: É a memória que fica armazenado o programa, e é escrita e apagada e eletronicamente

com o uso de software.

Memória EEPROM: É a memoria não volátil do microcontrolador, ou seja, mesmo que a alimentação

seja cortada, os dados não são perdidos. É utilizada para guardar dados internos que não podem ser

perdidos.

Memoria RAM: É a memoria volátil do microcontrolador, e é utilizada na execução do programa.

Quando a alimentação é desligada, os dados presente nessa memoria são perdidos.

Porto A e Porto B: São as I/O do microcontrolador com seus periféricos. O porto A possui 5 pinos de

I/O e o porto B possui 8 pinos de I/O.

Contador / Temporizador: É um registro de 8 bits no interior do microcontrolador PIC que roda

independentemente do programa que é instalado nele. No final de quatro ciclos de clock, ele incrementa

esse contador ate o máximo de 255, que é a máxima representação de 8 bits, e quando ele chega a esse

valor, o contador é zerado a contagem reiniciado do zero.

Unidade de Processamento Central (CPU): É responsável pela interconexão de todos os blocos

internamente no microcontrolador e também pela execução do programa.

Page 8: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

8  

4 - Instruções

O ciclo de instrução de um microcontrolador é composto por dois passos, o passo de busca

chamado de “fetch” e o passo de execução da instrução. Esses dois passos se dividem em diversos

passos que pode dependem de alguns fatores. A lista geral de passos é:

1- Busca a instrução na memoria

2- Decodificação da instrução

3- Calculo do endereço do operando

4- Busca do operando

5- Operação do dado

6- Calculo do endereço do operando

7- Armazenação do operando

Dependendo se ha ou não interrupções, esse ciclo pode mudar um pouco. O processador ira

checar ao fim do ciclo de instrução se houve interrupções.

O microcontrolador PIC 16F84A possui um conjunto de 35 instruções. Procurou-se o otimizar o

numero de instrução o máximo possível, aumentando assim a rapidez e a simplicidade de arquitetura do

microcontrolador PIC 16F84A. Entretendo, isso também trousse uma limitação na programação, pois

existe apenas 35 diferente instruções, ou seja, em alguns casos é necessário desenvolver analises não

convencionais para solucionar um problema.

Cada instrução é composta por uma “word” de 14 bits dividida em OPCODE, a qual especifica o

tipo de instrução e um ou mais operadores que especificam a operação da instrução. As operações

podem ser divididas em orientada a byte, a bit e literais e controle. A descrição do OPCODE é mostrada

na tabela abaixo:

Tabela 2 - Campos do OPCODE

Campo Descrição

f Registrador de endereço; Referência a um registrador

w Registrador temporário para as operaçõe na ULA (acumulador)

b Refere-se ao bit específico dentro de um byte

Page 9: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

9  

k Uma constante que pode ser escrita na forma decimal, hexa, ou binária

x Ultilizado pelo Microchip software tools

d Local onde é armazenada o resultado da operação

PC Contador de programa TO Bit de "Time-out" PD Bit de "Power-down"

Na operação orientada a byte, ‘f’ representa um registrador de arquivo e ‘d’ representa o

designador de destino. O registrador designador de arquivo especifica qual registrador de arquivo será

usado pela instrução. Já o designador de destino especifica onde o resultado da operação sera gravado.

Se ‘d’ for zero, o resultado é colocado no registrador W. Caso contrario (d=1), o resultado é colocado no

registrador de arquivo especificado na instrução.

Na operação orientada a bit, ‘b’ representa um campo de bit designador que seleciona o numero

de bits afetados pela operação, enquanto ‘f’ representa o endereço do arquivo o qual o bit é localizado.

Nas operações literais e controle, ‘k’ representa uma constante de 8 ou 11 bits, ou um valor

literal.

Graças ao recurso de “pipeline”, todas instruções são executadas com um único ciclo de

instrução, a não ser que um teste condicional é verdadeiro ou o contador do programa é mudado como

resultado de uma instrução. Os microcontroladores PIC usam o recurso de “pipeline” para aumentar a

velocidade de execução das instruções. O pipeline é uma técnica utilizada por processadores que dividir

a execução das instruções em partes e cada uma destas partes pode ser executada em paralelo em um

formato semelhante a uma linha de montagem de carros. Para o microcontrolador PIC 16F18A, pode-se

visualizar a execução das instruções como sendo dividida em dois estágios: busca (fetch) e executa

(execute).

Um ciclo de instruções consiste de quatro ciclos. A busca e execução da instrução são feitas em

linha, de tal forma que a busca leva um ciclo de instrução e a execução leva outro ciclo. Contudo, devido

a característica de “pipeline”, cada instrução é executada efetivamente em um ciclo, pois

simultaneamente ocorrem a execução de uma instrução e a busca a instrução seguinte. Se uma instrução

causa a alteração do Contador de Programa (PC) então dois ciclos são necessários para completar a

instrução.

Page 10: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

10  

Conjunto de instruções do PIC 16F84A

Tabela 3 - Instruções PIC 16F84A

INSTRUÇÃO ARGUMENTO DESCRICAO

ADDLW k Soma a constante k ao valor memorizado no acumulador W e coloca o resultado no acumulador.

ADDWF f,d Soma o valor contido no acumulador W com o valor contido no registrador enderecado pelo para metro f.

ANDLW k Efetua o AND bit a bit entre o valor contido no

acumulador W e o valor constante k. O resultado sera memorizado no acumulador.

ANDWF f,d Efetua o AND bit a bit entre o valor contido no

acumulador W e o valor contido no registrador enderec ado pelo parametro f.

BCF f,b Zera o bit b do registrador no enderec o f. BSF f,b Coloca em 1 no bit b do registrador que esta no endereco f.

BTFSC f,b Testa o bit b contido no registrador no enderec o f e pula a pro xima instrucao se este valer 0.

BTFSS f,b Testa o bit b contido no registrador do enderec o f e pula a instrucao seguinte se este for 1.

CALL k

Chama uma subrotina memorizada no enderec o k. O parametro k pode ser especificado utilizando-se

diretamente o valor nume rico do enderec o ou entao o relativo label.

CLRF f Zera o valor contido no registrador enderec ado pelo parametro f.

CLRW Zera o valor contido no registrador W.

CLRWDT

Utilizada quando programarmos o PIC 16F84A com a opcao Watchdog. Nesta modalidade o microcontrolador

PIC habilita um timer que, uma vez transcorrido um determinado tempo, efetua o reset do mesmo. Para evitar o reset do nosso programa deveremos executar ciclicamente

a instrucao CLRWDT para zerar o timer antes deste tempo. Se nao zerarmos o WDT neste tempo, o circuito de

watchdog interpretara este como um bloco de programa em execuc ao e efetuara o reset para bloquea-lo.

COMF f,d Efetua o complemento do valor contido no registrador enderecado pelo para metro f.

DECF f,d Decrementa o conteu do do registrador endereçado pelo parametro f.

Page 11: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

11  

DECFSZ f,b Decrementa o valor de registrador do enderec o f e se o resultado for zero pula a pro xima instrucao.

GOTO k Determina o desvio incondicional do programa em execucao para o enderec o k. O parametro k pode ser

especificado utilizando-se diretamente um valor nume rico do endereco ou entao o relativo label.

INCF f,d Incrementa o conteu do do registrador no enderec o f.

INCFSZ f,b Incrementa o valor do registrador f e se o resultado for zero pula a pro xima instrucao.

IORLW k Efetua o OR inclusive entre o valor contido no acumulador W e o valor da constante k.

IORWF f,d Efetua o OR inclusive entre o valor contido no acumulador

W e o valor contido no registrador enderec ado pelo parametro f.

MOVLW k Passa ao acumulador W um valor constante k.

MOVVF f,d Copia o conteu do do registrador enderec ado pelo parametro f para o para metro de destino d.

MOVWF f Copia o conteu do do registrador W no registrador de parametro f.

NOP Esta instrucao nao executa nenhuma operac ao mas e util para inserir atrasos de um ciclo de maquina ou mais.

RETFIE Esta instrucao deve ser colocada no te rmino de cada subrotina de controle de interrupc oes para retornar o

controle ao programa principal.

RETLW k Retorna o controle de uma rotina ao programa principal. A diferenca desta em relac ao a instrucao RETURN e que

retflw permite retornar, atrave s do acumulador W, o valor k ao programa principal.

RETURN Esta instrucao deve ser inserida no termino de cada subrotina para retornar a execucao ao programa principal.

RLF f,b

Rotaciona o bit contido no registrador do enderec o f para a esquerda (ou seja do bit menos significativo para o mais

significativo) passando pelo CARRY do registrador STATUS.

RRF f,b

Rotaciona o bit contido no registrador do enderec o f para direita (ou seja do bit mais significativo para o menos

significativo) passando pelo bit CARRY do registrador STATUS .

SLEEP Bloqueia a execuc ao do programa em andamento e coloca o PIC em standby.

SUBLW k Subtrai a constante k do valor memorizado no acumulador W.

Page 12: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

12  

SUBWF f,d Esta instrucao subtrai o valor contido no registrador W do valor contido no registrador enderec ado pelo para metro f.

SWAPF f,d Troca o valor dos quatro bits mais significativo (D7-D4) contido no registrador do enderec o f com os quatro bits

menos significativo(D3-D0) do mesmo.

XORLW k Efetua o OR exclusivo entre o valor contido no acumulador W e o valor constante k.

XORWF f,d Efetua o OR exclusivo(XOR) entre o valor contido no

acumulador W e o valor contido no registrador enderec ado pelo parametro f.

Page 13: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

13  

5 - Interrupções

O microcontrolador PIC 16F84A possui quatro fontes de interrupções: Interrupções externas no

pino RB0/INT; Interrupções de overflow TMR0; Interrupções por mudança de estado PORTB; E

interrupções de fim de escrita EEPROM.

Quando uma interrupção ocorre ela fica como pendente, e no próximo ciclo de busca o

processador ira tratar essa interrupção. Quando a interrupção é tratada, o processador suspende a

execução do programa que esta sendo executado e salva seu contexto. Depois o processador irá

armazenar no contador do programa o endereço inicial de uma rotinha de tratamento de interrupção.

O registrador de controle de interrupções (INTCON) grava todas as interrupções como bits de

flag, e também armazena o bit de habilitação de interrupção global (GIE). O GIE habilita ou desabilita

todas as interrupções de uma só vez, e ele é resetado no RESET.

Quando uma interrupção é tratada, o bit GIE é limpado para desabilitar qualquer interrupção

futura, o endereço de retorno é colocado numa STACK e o PROGRAM COUNTER (PC) é carregado

com 0004h. Para interrupções externas (RB0/INT or PORTB) a latência será três à quatro ciclos de

instrução. A latência depende quando a interrupção ocorre e é a mesma para um ou dois ciclos. A fonte

da interrupção pode ser determinada através dos bits de flag. O bit de flag deve ser limpado através de

software antes da reabilitação do “sistema” de interrupções para evitar infinitas interrupções. Uma

interrupt flag é um bit que indica qual foi o tipo de interrupção.

Portanto, o INTCON pode habilitar ou desabilitar os bits de interrupções independentemente (4

tipos de interrupções). A figura a seguir mostra como funciona o quadro de interrupções do PIC 16F84A

Page 14: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

14  

Figure 4 - Lógica de interrupção

4.1 - Interrupções externas

Esse tipo de interrupção é gerado por um sinal externo conectado ao pino RB0/INT. Portando,

essa porta serve como entrada para um sinal que pode ser processado internamento do microcontrolador.

Interrupções externas no pino RB0/INT é elevado (de 0 para 1) quando o bit INTEDG é setado e baixa (

de 1 para 0) quando o bit INTEDG é limpado. Quando uma borda válida (subida ou descida) aparece no

pino RB0/INT, o bit INTF é setado. Esse tipo de interrupção pode ser desabilitada limpando-se o bit de

controle INTE. O bit de flag INTF deve ser limpo através de software via Rotina de Serviço de

Interrupção antes de habilitar essa interrupção. A interrupção externa pode ligar o processador do modo

“SLEEP” se o bit INTE for setado antes dele entrar no modo “SLEEP”. O status do bit GIE decide se as

conexões do processador para o vetor de interrupção também ligaram ou não.

4.2 - Interrupções de overflow TMR0 Esse tipo de interrupção ocorre quando o contador TMR0 estoura. Esse contador é geralmente

utilizado para contar o tempo, e ele pode ser incrementado tanto pelo clock como por um sinal externo.

Um overflow em TMR0 ira setar o bit T01F. A interrupção pode se habilitada ou desabilitada setando ou

limpando o bit de habilitação T01E.

Page 15: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

15  

4.3 - Interrupções por mudança de estado PORTB

Essa interrupção acontece na borda de subida e descida, o seja, na mudança de estado.

Geralmente é utilizado para criar sincronismo com a rede elétrica (50 Hz ou 60 Hz). A interrupção pode

habilitar ou desabilitar setando o bit de habilitação RBIE.

4.4 - Interrupções de fim de escrita EEPROM Esse tipo de interrupção é utilizado para sinalização de fim de escrita de um programa na

memoria EEPROM do microcontrolador PIC. Devido o tempo de escrita na EEPROM ser muito longo,

esse método é muito importante para evitar erros na escritas de programas no PIC. Essa interrupção

pode ser habilitar ou desabilitada setando ou limpando o bit de habilitação EEIE.

Page 16: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

16  

Parte 2 – Acesso à memória cache

1 – Análise das configurações da cache  

Cada “word” na arquitetura computacional estudada representa 1 byte, que por sua vez é o

mesmo que 8 bits. Portanto, temos que:

1  𝑤𝑜𝑟𝑑 = 8  𝑏𝑖𝑡𝑠 A memória cache é representada de um conjunto que espaços que nós chamamos cada um desses

espaços como uma linha de uma pilha. Cada linha da memoria cache contem um campo para o

endereço “tag” e outro campo para o dado em si. O dado armazenado na memória cache é

geralmente um bloco de vários endereços, e não apenas um endereço. Sendo assim, cada linha da

cache pode armazenar um bloco de n “words”. Para sabermos quantas linhas uma memória cache

possui, basta dividir o número total de “words” pelo número de “words” que cada linha armazena.

Portanto, temos que:

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎

A memoria principal armazena apenas uma “word” de 8 bits em cada endereço dela. No

mapeamento direto, nos temos que o a quantidade de “linhas” da memoria principal é muito maior

que a quantidade de linhas da memoria cache. O nosso problema consistia em uma memória

principal de 1024 posições e uma memória cache que variava segundo os casos descritos a seguir.

1.1 Caso 1: Cache com 128 words

Nesse caso, a memória cache é composta por 128 “words”.

Tamanho da memória cache em bits:

1  𝑤𝑜𝑟𝑑 = 8  𝑏𝑖𝑡𝑠   ∴ 128  𝑤𝑜𝑟𝑑𝑠 = 8 ∗ 128  𝑏𝑖𝑡𝑠   → 𝟏𝟎𝟐𝟒  𝒃𝒊𝒕𝒔

Quantidade de linhas:

Caso A: Linha com 4 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

1284 = 𝟑𝟐  𝒍𝒊𝒏𝒉𝒂𝒔

Page 17: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

17  

Tamanho do endereço das “words” em bits:

2!"#$% = 𝑄𝑡𝑑𝑃𝑜𝑠𝑖çõ𝑒𝑠

2!"#$% = 4  𝑤𝑜𝑟𝑑𝑠

𝒏𝑩𝒊𝒕𝒔 = 𝟐  𝒃𝒊𝒕𝒔 Logo, para acessar uma “word” em uma linha da cache com 4 “words” por bloco, se faz

necessário um endereço de 2 bits para diferenciar a “word” nessa linha.

Analisando o mapeamento da memória principal para esse caso, veremos que cada 4 endereços

da memória principal representa um bloco, que será armazenada em uma linha da memória cache.

Os endereços 0!" ao 3!" serão colocados na linha 0!" da memoria cache, já que ela comporta um

bloco de 4 “words”. Quando chegar no endereço 127!", ele armazena esse endereço na ultima

posição da memória cache, a posição 31!". A memória cache pode armazenar até 32 blocos

simultâneos, logo o próximo endereço da memoria principal será armazenado na posição 0!" da

cache. Caso já haja um outro bloco nessa linha da cache, ele será removido e colocado o novo bloco

atualizando a respectiva “tag”. Logo, a linha 0! da memória cache armazena um conjunto

predefinido de possíveis “tags” da memória principal (a “tag” da cache é igual a “tag” da memória

principal). Para esse caso, a representação do endereço da “word” será de 2 bits, já que são 4

“words” por bloco. Logo, a memória cache vai endereçar cada “word” a partir da do endereço de

dois bits reservado para o campo “word”. Vale salientar, que toda essa sequencia de tag, endereço da

“word” e mapeamento da memória principal na cache é obtida do endereço completo de um

elemento na memoria principal.

Caso B: Linha com 8 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

1288 = 𝟏𝟔  𝒍𝒊𝒏𝒉𝒂𝒔

Tamanho do endereço das “words” em bits:

2!"#$% = 𝑄𝑡𝑑𝑃𝑜𝑠𝑖çõ𝑒𝑠

2!"#$% = 8  𝑤𝑜𝑟𝑑𝑠

𝒏𝑩𝒊𝒕𝒔 = 𝟑  𝒃𝒊𝒕𝒔 Logo, para acessar uma “word” em uma linha da cache com 8 “words” por bloco, se faz

necessário um endereço de 3 bits para diferenciar a “word” nessa linha.

Page 18: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

18  

Para esse caso e os demais casos, o mapeamento na da cache na memória principal será análogo

a análise descrita acima mudando o tamanho do bloco e a quantidade de linhas da cache.

Caso C: Linha com 16 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

12816 = 𝟖  𝒍𝒊𝒏𝒉𝒂𝒔

Tamanho do endereço das “words” em bits:

2!"#$% = 𝑄𝑡𝑑𝑃𝑜𝑠𝑖çõ𝑒𝑠

2!"#$% = 16  𝑤𝑜𝑟𝑑𝑠

𝒏𝑩𝒊𝒕𝒔 = 𝟒  𝒃𝒊𝒕𝒔 Logo, para acessar uma “word” em uma linha da cache com 16 “words” por bloco, se faz

necessário um endereço de 4 bits para diferenciar a “word” nessa linha.

Caso A: Linha com 32 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

12832 = 𝟒  𝒍𝒊𝒏𝒉𝒂𝒔

Tamanho do endereço das “words” em bits:

2!"#$% = 𝑄𝑡𝑑𝑃𝑜𝑠𝑖çõ𝑒𝑠

2!"#$% = 32  𝑤𝑜𝑟𝑑𝑠

𝒏𝑩𝒊𝒕𝒔 = 𝟓  𝒃𝒊𝒕𝒔 Logo, para acessar uma “word” em uma linha da cache com 32 “words” por bloco, se faz

necessário um endereço de 5 bits para diferenciar a “word” nessa linha.

1.2 Caso 2: Cache com 256 words

Nesse caso, a memória cache é composta por 256 “words”.

Tamanho da memória cache em bits:

1  𝑤𝑜𝑟𝑑 = 8  𝑏𝑖𝑡𝑠   ∴ 128  𝑤𝑜𝑟𝑑𝑠 = 8 ∗ 256  𝑏𝑖𝑡𝑠   → 𝟐𝟎𝟒𝟖  𝒃𝒊𝒕𝒔

Quantidade de linhas:

Caso A: Linha com 4 words

Page 19: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

19  

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

2564 = 𝟔𝟒  𝒍𝒊𝒏𝒉𝒂𝒔

O tamanho do endereço das “words” em bits segue o mesmo raciocínio da cache acima de 128

words com 4 words por linha. Logo, para acessar uma “word” em uma linha da cache com 4

“words” por bloco, se faz necessário um endereço de 2 bits para diferenciar a “word” nessa linha.

As configurações seguintes segue o mesmo raciocínio aplicado na cache de 128 words.  

𝒏𝑩𝒊𝒕𝒔 = 𝟐  𝒃𝒊𝒕𝒔

Analisando o mapeamento da memória principal para esse caso, veremos que cada 4 endereços

da memória principal representa um bloco, que será armazenada em uma linha da memória cache.

Os endereços 0!" ao 3!" serão colocados na linha 0!" da memoria cache, já que ela comporta um

bloco de 4 “words”. Quando chegar no endereço 255!", ele armazena esse endereço na ultima

posição da memória cache, a posição 63!". A memória cache pode armazenar até 64 blocos

simultâneos, logo o próximo endereço da memoria principal será armazenado na posição 0!" da

cache. Caso já haja um outro bloco nessa linha da cache, ele será removido e colocado o novo bloco,

atualizando a respectiva “tag”. Logo, a linha 0! da memória cache armazena um conjunto

predefinido de possíveis “tags” da memória principal (a “tag” da cache é igual a “tag” da memória

principal). Para esse caso, a representação do endereço da “word” será de 2 bits, já que são 4

“words” por bloco. Logo, a memória cache vai endereçar cada “word” a partir do endereço de dois

bits reservado para o campo “word”. Vale salientar, que toda essa sequencia de tag, endereço da

“word” e mapeamento da memória principal na cache é obtida do endereço completo de um

elemento na memoria principal.

Caso B: Linha com 8 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

2568 = 𝟑𝟐  𝒍𝒊𝒏𝒉𝒂𝒔

𝒏𝑩𝒊𝒕𝒔 = 𝟑  𝒃𝒊𝒕𝒔 Para esse caso e os demais casos, o mapeamento na da cache na memória principal será análogo

a analise descrita acima mudando o tamanho do bloco e a quantidade de linhas da cache.

Caso C: Linha com 16 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

25616 = 𝟏𝟔  𝒍𝒊𝒏𝒉𝒂𝒔

Page 20: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

20  

𝒏𝑩𝒊𝒕𝒔 = 𝟒  𝒃𝒊𝒕𝒔

Caso A: Linha com 32 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

25632 = 𝟖  𝒍𝒊𝒏𝒉𝒂𝒔

𝒏𝑩𝒊𝒕𝒔 = 𝟓  𝒃𝒊𝒕𝒔 1.3 Caso 3: Cache com 512 words

Nesse caso, a memória cache é composta por 512 “words”.

Tamanho da memória cache em bits:

1  𝑤𝑜𝑟𝑑 = 8  𝑏𝑖𝑡𝑠   ∴ 128  𝑤𝑜𝑟𝑑𝑠 = 8 ∗ 512  𝑏𝑖𝑡𝑠   → 𝟒𝟎𝟗𝟔  𝒃𝒊𝒕𝒔

Quantidade de linhas:

Caso A: Linha com 4 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

5124 = 𝟏𝟐𝟖  𝒍𝒊𝒏𝒉𝒂𝒔

𝒏𝑩𝒊𝒕𝒔 = 𝟐  𝒃𝒊𝒕𝒔

O mapeamento da memória cache da memória principal será análogo ao descrito no caso 2,

mudando apenas a quantidade de linhas da cache.

Caso B: Linha com 8 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

5128 = 𝟔𝟒  𝒍𝒊𝒏𝒉𝒂𝒔

𝒏𝑩𝒊𝒕𝒔 = 𝟑  𝒃𝒊𝒕𝒔

Para esse caso e os demais casos, o mapeamento na da cache na memória principal será análogo a

analise descrita acima mudando o tamanho do bloco e a quantidade de linhas da cache.

Caso C: Linha com 16 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

51216 = 𝟑𝟐  𝒍𝒊𝒏𝒉𝒂𝒔

𝒏𝑩𝒊𝒕𝒔 = 𝟒  𝒃𝒊𝒕𝒔

Page 21: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

21  

Caso A: Linha com 32 words

𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =

51232 = 𝟏𝟔  𝒍𝒊𝒏𝒉𝒂𝒔

𝒏𝑩𝒊𝒕𝒔 = 𝟓  𝒃𝒊𝒕𝒔

2 – Analise dos resultados

Foi criado um programa usando a linguagem C++ que faz a simulação de acesso a memoria

cache. Os parâmetros da memoria principal do nosso problema fora inseridos no programa, que é de

1024 posições. Foi criado métodos para automatizar o processo de acesso a memoria cache e cálculo

da taxa de falhas de acesso para cada configuração de cache descrita no problema.

A saída do nosso programa é representado na figura 5 a seguir.

 Figure 5 - Saída do programa

A partir dos resultados apresentados acima foi montado uma tabela com a taxa de falha de acesso

da memória cache para cada configuração estão descrito na tabela seguir.

Page 22: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

22  

Tabela 4 - Taxa de falhas de acesso

Tamanho  da  Cache  

Words  por  Linha  

Quantidade  de  Acessos  

Quantidade  de  Falhas  

Percentual  de  Falhas  

128  

4   10000   8681   86.81%  8   10000   8788   87.88%  16   10000   8729   87.29%  32   10000   8748   87.48%  

256  

4   10000   7488   74.88%  8   10000   7495   74.95%  16   10000   7500   75.00%  32   10000   7475   74.75%  

512  

4   10000   5067   50.67%  8   10000   4980   49.80%  16   10000   5012   50.12%  32   10000   5020   50.20%  

   

 O gráfico 1 abaixo representa a falhas de acesso de uma memoria cache de 128 palavras com

quatro diferentes configurações de linhas: linha com 4 “words”; linha com 8 “words”; linha com 16

“words”; e linha com 32 “words”.

 Gráfico 1 - Erro de acesso cache de 128 words

Page 23: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

23  

   

Podemos perceber que o efeito de mudança de words por linha na cache tem nenhum ou

pouquíssimo efeito na taxa de falhas de acesso da memoria. Portanto, concluímos que o tamanho do bloco da cache (quantidade de words por linha) não tem relação direta na taxa de falhas de

acessos da cache.

Quando analisamos o gráfico 2 a seguir, que estão todas as configurações de cache possíveis no

problema, podemos concluir que o único parâmetro que contribuirá diretamente para a diminuição

ou aumento nas falhas de acesso será o tamanho da memoria cache, que pode ser medida em

“words” ou bytes, sendo cada “word” um byte de memoria para essa arquitetura especifica.

 Gráfico 2 - Falhas de acesso para varias configurações de cache

No gráfico 2, podemos perceber que quando aumentamos o tamanho da memória cache, as falhas

de acessos também diminuem. Isso condiz com a realidade pois quando aumentamos o tamanho da

cache, adicionaremos mais linhas a ela, e consequentemente, mais endereços da memoria principal.

Portando a relação de falhas de acesso com aumento da memória cache é inversamente proporcional.

Page 24: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

24  

No gráfico abaixo estão esboçados os acertos para as diferentes configuraçōes de memória cache.

Gráfico 3 - Acertos de Acesso

Podemos concluir também que quanto maior o tamanho da cache, mais acertos de acessos ela

terá, e melhor sera o desempelho do conjuto memória principal e cache. Entretando, existe um limite de

temanho máximo de memória cache que podemos usar de forma que para valores de cache maiores que

esse tamanho máximo, a taxa de acertos sera constante.

Page 25: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

25  

3 – Algoritmo // Created by Jaime Dantas on 2015-09-28. // Copyright © 2015 Jaime Dantas. All rights reserved. // Programa de Acesso a Memoria Cache em Linguagem C++ #include <iostream> #include <stdlib.h> #include <math.h> using namespace std; //funcao de decodificacao de enderecos da memoria void decodificadorMemoria(int address, int *TAG, int *linha, int nWords_Cache, int nWords_por_Linha){ unsigned int aux;//essa variavel vai servir como temporaria para manoseio na funcao /*OBS: o nWordsCache eh o tamanho da cache em words, ja o nWords_por_Linha e a quantidade de words que cada linha da cache pode armazenar*/ //manipulacao de linha aux = address & (nWords_Cache - nWords_por_Linha);//pega a posicao do dado armazenado na linha da cache (Observe que cada linha da cache pode ter uma ou mais word) *linha = aux >> (int) log2(nWords_por_Linha);//pega a linha da cache para depois fazer o deslocamento (ele ja converte para inteiro) //manipulacao de tag aux = address & (1024 - nWords_Cache);// **a memoria principal tem 1k** *TAG = aux >> (int) log2(nWords_Cache);//pega a TAG fa memoria cache e depois faz o deslocamento (ele ja converte para inteiro) } //funcao de busca na memoria para TODOS os cados passados pelo usuario double buscaMemoria(int nWords_Cache, int addresses[], int nWords_por_Linha){ /*OBS: o nWordsCache eh o tamanho da cache em words, ja o nWords_por_Linha e a quantidade de words que cada linha da cache pode armazenar, e o addresses sao TODOS os enderecos passado pelo usuario que estao sendo ultilizados na consulta*/ int nLinhas, TAG, linha, n; int address_analizado, TAG_analizada, linha_analizada;//sao para percorrer todos os enderecos, funcionam como variaveis auxiliares temporarias. //variaveis para fazer as estatisticas de falhas long int contador;//contador de acessos long int nFalhas;//contador de numero de falhas double taxaErro_de_Acesso;// vai se o nFalhas/contador //inicializacao de variaveis pra nao pegar lixo nFalhas = 0; contador = 0; n=0; nLinhas = nWords_Cache/nWords_por_Linha;//calcula o total de linhas da memoria cache int validade_cache[nLinhas], tag_cache[nLinhas];//eses velores verificam a validade e a tag da cache para cada acesso.

Page 26: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

26  

//inicializacao do vetor de validade da cache: ele vai comecar com tudo zero, pois inicialmente a cache esta totalmente vazia while (n<nLinhas) { validade_cache[n] = 0; n++; } for (int i=0; i<10000; i++) {//agora ele vai percorrer todas as 10000 enderecos passado pelo usuario address_analizado = addresses[i];//joga o "i" endereco para ser analizado contador = i+1;//pega quantos lacos o for executou +1 decodificadorMemoria(address_analizado, &TAG, &linha, nWords_Cache, nWords_por_Linha); //agora a tag e linha ja estao disponiveis para analise TAG_analizada = TAG;//para analise linha_analizada = linha;//para analise //analise para saber se a linha eh valida for (int i=0; i<nLinhas; i++) { if (validade_cache[linha_analizada] == 0) {//portanto nao encontrou essa linha, eh uma falha de acesso nFalhas = nFalhas + 1; validade_cache[linha_analizada] = 1; //pois agora essa posicao da memoria foi trazida para memoria cache tag_cache[linha_analizada] = TAG_analizada;//atualiza a nova tag da cache traz o dado da RAM para a cache } else { if (tag_cache[linha_analizada] != TAG_analizada ){//portanto tambem eh uma falha ja q o endereco que esta na cache eh diferente do pedido nFalhas = nFalhas + 1; tag_cache[linha_analizada] = TAG_analizada;//atualiza a nova tag da cache e traz o dado da RAM para a cache } } } } //calculos estatisticos: taxaErro_de_Acesso = (double) nFalhas/ (double) contador; return taxaErro_de_Acesso; } int main(int argc, const char * argv[]) { //todos os enderecos passados pelo usuario int endereco[] = {359, 966, 105, 115, 81, 255, 74, 236, 809, 205, 186, 939, 498, 763, 483, 326, 124, 706, 84, 1016, 795, 488, 487, 909, 886, 346, 302, 611, 563, 927, 201, 922, 870, 306, 13, 951, 561, 88, 163, 346, 293, 349, 261, 791, 88, 745, 94, 212, 427, 178, 205, 198, 667, 692, 84, 529, 14, 386, 116, 577, 289, 317, 476, 135, 624, 489, 62, 161, 577, 225, 508, 871, 574, 769, 638, 663, 490, 732, 875, 918, 911, 56, 92, 554, 748, 176, 59, 763, 562, 175, 316, 852, 492, 792, 987, 92, 258, 26, 254, 835, 251, 762, 682, 826, 507, 297, 465, 998, 5, 316, 892, 916, 373, 984, 446, 97, 137, 505, 860, 699, 680, 153, 527, 149, 945, 491, 241, 179,

Page 27: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

27  

517, 495, 1015, 768, 233, 673, 570, 741, 970, 11, 715, 976, 328, 583, 868, 701, 543, 291, 798, 680, 796, 635, 356, 453, 788, 883, 602, 709, 350, 843, 889, 867, 315, 880, 612, 548, 529, 158, 265, 476, 170, 980, 428, 498, 539, 272, 175, 59, 563, 973, 739, 336, 584, 71, 789, 348, 955, 367, 34, 281, 186, 923, 125, 501, 779, 737, 26, 284, 895, 291, 760, 41, 248, 164, 539, 787, 437, 714, 846, 1000, 664, 562, 312, 224, 633, 77, 573, 564, 444, 607, 846, 631, 506, 971, 108, 261, 684, 134, 545, 555, 426, 282, 597, 674, 446, 112, 437, 883, 827, 260, 860, 467, 822, 148, 691, 431, 226, 240, 996, 670, 847, 818, 277, 329, 765, 386, 590, 425, 520, 112, 980, 946, 394, 553, 596, 840, 666, 10, 700, 469, 270, 536, 936, 68, 684, 603, 499, 910, 844, 471, 557, 667, 265, 834, 997, 6, 196, 563, 431, 717, 675, 388, 639, 45, 941, 212, 886, 583, 222, 562, 28, 492, 74, 964, 560, 758, 544, 35, 645, 364, 507, 178, 7, 772, 1012, 1004, 779, 185, 544, 186, 902, 195, 574, 517, 241, 492, 729, 103, 51, 951, 665, 80, 419, 739, 20, 979, 473, 564, 1015, 94, 928, 498, 272, 936, 246, 261, 916, 1, 446, 436, 188, 324, 632, 762, 841, 873, 230, 547, 976, 282, 474, 617, 362, 894, 332, 382, 849, 805, 947, 840, 900, 851, 314, 148, 763, 561, 409, 656, 562, 855, 68, 750, 155, 700, 489, 997, 549, 719, 520, 501, 1001, 994, 94, 339, 864, 426, 722, 690, 208, 645, 506, 84, 472, 821, 232, 212, 358, 642, 868, 920, 473, 936, 647, 629, 613, 112, 602, 138, 831, 98, 640, 809, 68, 734, 124, 933, 137, 846, 599, 345, 467, 81, 429, 940, 902, 661, 128, 236, 279, 996, 133, 753, 908, 780, 358, 497, 892, 960, 636, 699, 34, 252, 484, 102, 986, 609, 11, 99, 431, 610, 444, 899, 692, 873, 815, 570, 511, 943, 807, 790, 915, 940, 519, 799, 696, 877, 273, 564, 813, 909, 239, 847, 137, 724, 950, 99, 309, 961, 199, 740, 548, 643, 615, 216, 493, 406, 786, 1004, 325, 569, 770, 216, 485, 266, 1016, 157, 119, 265, 721, 933, 150, 961, 756, 287, 661, 682, 386, 970, 620, 585, 686, 144, 205, 278, 360, 698, 684, 122, 678, 1010, 692, 424, 202, 153, 690, 194, 311, 810, 459, 8, 719, 609, 969, 451, 896, 606, 110, 259, 552, 730, 844, 215, 874, 25, 493, 210, 723, 153, 332, 377, 139, 0, 802, 342, 154, 468, 536, 465, 254, 996, 473, 973, 581, 419, 401, 454, 1, 511, 713, 554, 217, 533, 769, 67, 559, 238, 277, 258, 391, 609, 636, 531, 610, 414, 873, 764, 882, 385, 205, 113, 357, 678, 62, 939, 73, 463, 369, 75, 974, 58, 629, 167, 591, 374, 234, 126, 612, 511, 385, 1003, 97, 1021, 510, 707, 411, 359, 447, 269, 745, 652, 382, 78, 306, 445, 1017, 380, 908, 362, 455, 859, 420, 60, 2, 1012, 434, 237, 114, 22, 748, 499, 1, 845, 496, 512, 528, 907, 871, 975, 153, 592, 603, 535, 671, 910, 980, 664, 266, 865, 3, 721, 700, 423, 781, 702, 411, 191, 939, 526, 213, 664, 1, 214, 485, 498, 726, 1014, 381, 574, 965, 534, 142, 545, 46, 813, 431, 2, 454, 697, 867, 457, 394, 543, 880, 151, 222, 268, 342, 137, 794, 555, 801, 795, 769, 263, 269, 472, 253, 651, 22, 194, 161, 164, 739, 207, 978, 146, 210, 408, 843, 53, 865, 213, 597, 721, 364, 819, 989, 706, 956, 759, 237, 734, 531, 1007, 997, 800, 455, 226, 427, 477, 420, 589, 641, 136, 796, 595, 282, 1006, 1003, 102, 36, 844, 315, 633, 542, 680, 428, 507, 362, 360, 243, 600, 70, 774, 583, 43, 550, 14, 269, 978, 491, 690, 543, 108, 826, 315, 704, 84, 298, 683, 186, 334, 504, 502, 967, 22, 158, 371, 529, 520, 731, 772, 96, 802, 522, 679, 845, 49, 693, 91, 3, 160, 781, 546, 269, 583, 861, 973, 667, 135, 632, 854, 469, 112, 332, 412, 134, 490, 783, 664, 1010, 491, 412, 83, 269, 935, 762, 90, 984, 432, 181, 987, 592, 962, 509, 861, 521, 346, 810, 165, 482, 419, 1019, 951, 531, 327, 340, 666, 817, 99, 306, 803, 590, 718, 886, 859, 629, 625, 950, 589, 33, 107, 552, 625, 46, 37, 463, 567, 384, 249, 732, 866, 668, 727, 793, 176, 30, 109, 842, 847, 209, 124, 627, 799, 842, 489, 635, 448, 90, 561, 13, 123, 668, 566, 749, 714, 603, 188, 258, 987, 437, 990, 829, 82, 694, 599, 258, 724, 708, 76, 548, 917, 200, 151, 693, 18, 640, 304, 466, 731, 865, 480, 854, 509, 22, 579, 200, 625, 767, 458, 589, 181, 424, 394, 263, 94, 993, 521, 819, 678, 597, 343, 571, 797, 494, 240, 815, 110, 544, 258, 841, 385, 738, 672, 895, 760, 227, 71, 361, 995, 529, 950, 152, 953, 321, 415, 24, 290, 936, 843, 968, 509, 162, 516, 282, 656, 756, 73, 766, 277, 331, 584, 662, 45, 232, 533, 805, 459, 604, 143, 430, 109, 69, 582, 39, 390, 997, 63, 681, 909, 906, 625, 394, 44, 117, 676, 700, 874, 750, 442, 127, 57, 2, 789, 103, 234, 299, 908, 694, 903, 27, 100, 1013, 97, 683, 28, 487, 656, 91, 144, 542, 997, 770, 936, 17, 887, 589, 717, 737, 315, 135, 864, 372, 138, 630, 475, 372, 929, 360, 42, 808, 387, 143, 797, 484, 826, 825, 972, 458, 916, 92, 1000, 889, 862, 913, 906, 726, 478, 599, 439, 793, 735, 280, 141, 873, 910, 617, 221, 815, 977, 264, 599, 340, 407, 373, 825, 209, 174, 773, 667, 67, 865, 644, 956, 704, 533, 839, 406, 1011, 414, 845, 780, 125, 101, 921, 998, 1011, 514, 196, 802, 467, 460, 378, 808, 867, 751, 609, 52, 925, 358, 719, 992, 199, 339, 925, 903, 872, 740, 285, 859, 130, 107, 615, 256, 208, 513, 230, 196, 3, 426, 998, 471, 886, 352, 255, 729, 79, 864, 781, 1005, 198, 477, 973, 397, 816, 874, 277, 665, 590, 562, 500, 721, 669, 92, 977, 878, 605, 183, 50, 608, 610, 24, 55, 472, 377, 310, 178, 456, 150, 959, 437, 348, 412, 387, 746, 205, 237, 1023, 870, 828, 561, 346, 525, 207, 438, 478, 61, 19, 661, 111, 628, 247, 135, 683, 720, 512, 994, 898, 969, 120, 833, 382, 469, 222, 769, 191, 427, 1007, 190, 273, 811, 751, 619, 312, 958, 34, 790, 1019, 53, 427, 106, 681, 675, 242, 341, 371, 754, 311, 245, 699, 431, 54, 58, 900, 276, 827, 67, 703, 810, 257, 976, 597, 1009, 572, 909, 943, 606, 675, 939, 659, 79,

Page 28: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

28  

21, 317, 754, 263, 658, 101, 1018, 969, 346, 693, 376, 400, 751, 253, 677, 555, 320, 356, 341, 578, 309, 939, 563, 881, 824, 482, 463, 476, 397, 98, 555, 419, 415, 285, 682, 49, 386, 676, 1018, 732, 346, 371, 108, 73, 624, 785, 628, 944, 118, 970, 498, 427, 885, 37, 284, 685, 520, 747, 137, 917, 845, 692, 312, 237, 977, 995, 286, 339, 647, 281, 47, 993, 652, 156, 43, 252, 941, 671, 172, 35, 617, 671, 462, 478, 708, 746, 140, 204, 469, 277, 98, 291, 970, 410, 528, 923, 381, 814, 239, 5, 71, 286, 998, 723, 442, 17, 975, 360, 689, 124, 395, 282, 795, 858, 761, 479, 580, 901, 684, 26, 154, 782, 317, 100, 168, 845, 0, 550, 635, 239, 555, 707, 525, 529, 406, 968, 547, 358, 304, 212, 482, 699, 494, 253, 533, 231, 732, 90, 108, 392, 116, 263, 150, 433, 363, 319, 254, 363, 869, 889, 602, 400, 572, 104, 929, 979, 48, 452, 313, 352, 664, 795, 27, 135, 24, 561, 366, 756, 651, 475, 125, 767, 738, 275, 176, 77, 594, 430, 441, 439, 295, 19, 839, 868, 123, 745, 823, 171, 173, 112, 523, 838, 907, 551, 973, 931, 88, 315, 663, 739, 790, 788, 482, 504, 40, 658, 582, 634, 64, 1023, 50, 359, 18, 889, 203, 142, 610, 2, 313, 784, 114, 837, 598, 1021, 364, 547, 928, 452, 862, 568, 167, 629, 332, 649, 109, 372, 283, 691, 1007, 347, 690, 33, 706, 709, 922, 910, 851, 509, 912, 140, 269, 3, 977, 867, 0, 317, 390, 929, 769, 228, 473, 936, 857, 805, 561, 967, 154, 844, 634, 137, 167, 301, 170, 874, 1010, 68, 760, 837, 577, 648, 977, 846, 651, 931, 689, 652, 224, 55, 557, 994, 284, 6, 906, 117, 811, 444, 60, 965, 264, 695, 78, 432, 996, 248, 282, 982, 317, 18, 795, 894, 666, 748, 717, 294, 655, 382, 946, 880, 438, 479, 850, 722, 485, 732, 839, 272, 152, 900, 214, 417, 571, 292, 849, 543, 541, 107, 501, 858, 125, 272, 728, 791, 1020, 421, 61, 652, 804, 1007, 508, 218, 462, 334, 940, 947, 42, 755, 196, 195, 631, 410, 612, 178, 702, 437, 721, 219, 544, 198, 53, 669, 470, 782, 436, 467, 179, 498, 95, 983, 481, 603, 177, 944, 937, 93, 867, 979, 849, 39, 150, 456, 449, 762, 635, 128, 175, 332, 347, 719, 531, 401, 364, 1001, 159, 801, 444, 338, 275, 539, 298, 756, 118, 475, 676, 31, 569, 520, 1011, 394, 559, 137, 850, 1009, 900, 461, 113, 51, 794, 460, 771, 301, 861, 111, 278, 1020, 912, 723, 335, 163, 238, 633, 920, 357, 84, 572, 388, 653, 68, 375, 23, 628, 513, 874, 613, 389, 311, 726, 440, 81, 162, 187, 382, 0, 299, 661, 1020, 187, 360, 331, 351, 598, 964, 247, 955, 25, 819, 320, 678, 888, 695, 702, 492, 184, 552, 81, 573, 863, 807, 1014, 945, 969, 177, 303, 969, 476, 964, 966, 664, 300, 273, 1015, 899, 214, 238, 830, 239, 33, 126, 917, 921, 822, 595, 389, 1006, 123, 470, 556, 987, 253, 546, 908, 199, 723, 187, 144, 176, 128, 86, 840, 428, 360, 831, 303, 574, 45, 110, 813, 78, 236, 706, 1000, 34, 278, 365, 17, 401, 836, 573, 364, 65, 95, 248, 264, 818, 436, 409, 994, 564, 495, 810, 992, 855, 617, 272, 405, 662, 382, 194, 741, 618, 901, 717, 653, 155, 58, 670, 556, 894, 219, 921, 960, 314, 145, 200, 108, 581, 609, 79, 121, 81, 889, 90, 936, 483, 362, 318, 121, 744, 512, 862, 338, 389, 555, 991, 544, 614, 637, 77, 484, 856, 998, 420, 146, 119, 621, 255, 701, 206, 334, 822, 287, 199, 912, 200, 682, 250, 518, 804, 994, 6, 642, 309, 396, 174, 276, 940, 788, 914, 1017, 248, 746, 991, 669, 893, 87, 266, 124, 788, 472, 458, 586, 760, 657, 475, 960, 316, 725, 454, 96, 696, 460, 738, 1005, 856, 912, 257, 773, 676, 147, 766, 925, 894, 734, 570, 763, 821, 836, 887, 585, 284, 321, 147, 20, 978, 622, 980, 270, 324, 410, 366, 1020, 871, 81, 1001, 703, 993, 234, 452, 646, 382, 195, 547, 252, 929, 93, 1015, 726, 929, 878, 287, 189, 175, 434, 210, 129, 33, 166, 400, 357, 577, 766, 353, 424, 847, 330, 103, 817, 564, 556, 439, 946, 751, 986, 174, 656, 55, 165, 358, 984, 19, 645, 149, 194, 55, 359, 324, 88, 526, 724, 445, 79, 466, 798, 503, 290, 104, 606, 83, 669, 138, 522, 591, 889, 484, 766, 521, 539, 931, 879, 499, 951, 500, 648, 121, 556, 1008, 445, 644, 510, 145, 66, 589, 612, 864, 68, 902, 969, 674, 985, 614, 813, 483, 181, 678, 967, 947, 176, 482, 855, 31, 981, 782, 532, 605, 903, 64, 589, 325, 708, 75, 470, 774, 664, 58, 615, 732, 960, 560, 383, 921, 150, 172, 380, 331, 850, 323, 255, 2, 805, 86, 34, 762, 868, 566, 344, 747, 630, 933, 48, 314, 1009, 519, 65, 649, 577, 680, 358, 514, 216, 741, 411, 366, 913, 792, 697, 739, 91, 952, 742, 897, 14, 776, 635, 882, 318, 979, 606, 948, 889, 654, 238, 874, 149, 303, 499, 727, 983, 857, 217, 175, 574, 628, 541, 463, 396, 215, 179, 488, 143, 921, 361, 158, 673, 996, 16, 991, 952, 622, 915, 817, 253, 129, 667, 402, 433, 142, 105, 392, 1000, 322, 568, 550, 951, 85, 1014, 323, 300, 169, 811, 444, 66, 148, 602, 739, 121, 618, 706, 49, 217, 597, 866, 470, 726, 509, 872, 135, 651, 978, 528, 627, 276, 72, 154, 203, 157, 144, 527, 458, 313, 314, 902, 379, 463, 480, 94, 584, 74, 800, 633, 291, 373, 475, 761, 75, 984, 610, 211, 611, 564, 739, 215, 840, 811, 369, 20, 968, 513, 547, 402, 826, 861, 280, 181, 300, 760, 275, 884, 835, 51, 493, 102, 424, 968, 864, 499, 928, 450, 710, 516, 1014, 425, 731, 830, 212, 76, 850, 157, 589, 373, 559, 391, 211, 840, 572, 511, 576, 847, 372, 387, 898, 865, 490, 298, 810, 330, 797, 714, 780, 484, 206, 770, 909, 937, 576, 98, 1013, 403, 255, 578, 776, 814, 969, 987, 630, 517, 475, 183, 340, 847, 570, 214, 688, 36, 512, 474, 366, 286, 165, 122, 770, 371, 892, 655, 285, 445, 753, 274, 848, 1008, 853, 600, 799, 798, 564, 405, 292, 15, 588, 632, 862, 135, 847, 526, 171, 335, 1001, 538, 621, 142, 660, 367, 513, 529, 1023, 798, 974, 752, 49, 798, 737, 902, 374, 512, 676, 938, 917, 968, 953, 482, 577, 791, 617, 400, 294, 788, 735, 271, 302, 333, 413, 963, 700, 926, 468, 699, 701, 418, 428,

Page 29: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

29  

750, 192, 141, 628, 566, 653, 280, 481, 546, 225, 410, 4, 802, 178, 621, 178, 472, 386, 913, 743, 688, 222, 132, 627, 923, 34, 71, 598, 735, 489, 2, 461, 681, 143, 65, 224, 796, 346, 705, 319, 571, 91, 323, 349, 269, 945, 527, 741, 307, 416, 460, 995, 639, 592, 599, 538, 627, 670, 112, 338, 136, 115, 800, 817, 258, 865, 17, 31, 187, 722, 350, 758, 814, 673, 83, 59, 594, 610, 801, 901, 3, 237, 873, 642, 830, 448, 156, 433, 94, 268, 771, 230, 383, 547, 24, 642, 389, 41, 673, 576, 764, 1023, 311, 554, 672, 394, 613, 243, 1005, 390, 120, 1008, 628, 993, 626, 434, 417, 782, 867, 512, 26, 614, 742, 410, 138, 766, 28, 527, 808, 701, 79, 548, 700, 390, 78, 348, 785, 691, 591, 766, 58, 712, 750, 686, 681, 352, 96, 75, 110, 963, 587, 136, 553, 305, 546, 691, 48, 574, 194, 856, 251, 274, 380, 951, 664, 458, 276, 425, 125, 867, 167, 183, 555, 917, 869, 213, 245, 965, 288, 355, 904, 875, 492, 434, 156, 14, 101, 204, 589, 296, 36, 840, 570, 416, 768, 210, 874, 20, 636, 1000, 887, 803, 159, 419, 697, 5, 632, 942, 970, 920, 274, 851, 771, 766, 261, 927, 780, 362, 108, 345, 658, 144, 162, 204, 561, 930, 415, 411, 950, 27, 387, 813, 830, 547, 208, 503, 552, 840, 422, 498, 736, 696, 325, 483, 438, 586, 387, 194, 949, 495, 540, 583, 639, 702, 788, 176, 608, 179, 588, 534, 206, 975, 323, 12, 498, 532, 516, 26, 348, 938, 525, 61, 610, 850, 544, 24, 413, 931, 218, 338, 402, 758, 921, 18, 436, 685, 194, 20, 864, 782, 554, 46, 734, 878, 59, 208, 386, 575, 235, 734, 489, 760, 795, 75, 586, 316, 99, 999, 223, 317, 313, 626, 52, 211, 644, 488, 896, 838, 509, 737, 597, 39, 783, 307, 917, 842, 515, 279, 393, 750, 1014, 882, 486, 785, 957, 49, 77, 32, 24, 301, 350, 338, 927, 402, 549, 547, 890, 421, 361, 375, 134, 958, 415, 918, 241, 308, 736, 757, 588, 106, 483, 578, 988, 970, 339, 922, 1019, 417, 954, 19, 718, 280, 357, 621, 682, 906, 144, 549, 304, 505, 924, 438, 440, 315, 332, 681, 624, 45, 414, 188, 151, 898, 766, 115, 844, 81, 13, 839, 498, 968, 858, 192, 224, 192, 813, 907, 74, 957, 432, 378, 439, 332, 817, 879, 648, 125, 536, 248, 170, 951, 436, 321, 825, 178, 437, 645, 259, 450, 460, 758, 394, 294, 950, 619, 486, 740, 502, 561, 673, 934, 939, 88, 242, 732, 967, 890, 858, 480, 114, 4, 407, 550, 326, 208, 728, 763, 853, 988, 189, 289, 722, 584, 583, 648, 179, 46, 364, 681, 607, 14, 591, 522, 102, 833, 231, 46, 700, 65, 526, 814, 69, 933, 341, 395, 117, 45, 134, 970, 9, 324, 235, 731, 908, 818, 356, 63, 864, 720, 744, 447, 734, 311, 970, 837, 120, 177, 883, 820, 242, 385, 611, 311, 294, 952, 707, 411, 997, 841, 357, 1007, 141, 592, 714, 25, 386, 46, 88, 227, 767, 832, 674, 477, 119, 620, 290, 240, 797, 149, 36, 15, 534, 647, 327, 828, 575, 10, 215, 549, 851, 572, 532, 993, 140, 222, 1018, 527, 269, 83, 754, 12, 915, 404, 489, 11, 1, 780, 251, 798, 929, 287, 814, 440, 935, 117, 244, 486, 127, 460, 11, 978, 8, 543, 947, 149, 766, 942, 676, 11, 1, 406, 23, 916, 810, 512, 927, 811, 268, 154, 586, 174, 442, 376, 614, 353, 493, 858, 839, 620, 294, 851, 574, 303, 370, 498, 452, 112, 416, 104, 123, 417, 510, 146, 309, 296, 659, 213, 84, 927, 367, 670, 77, 809, 22, 691, 138, 515, 526, 978, 111, 820, 805, 685, 99, 151, 159, 551, 264, 575, 655, 387, 992, 141, 534, 278, 438, 169, 491, 522, 72, 858, 168, 150, 644, 190, 841, 782, 705, 343, 736, 816, 140, 517, 477, 239, 669, 637, 791, 933, 188, 422, 296, 157, 564, 830, 435, 1002, 999, 926, 500, 48, 760, 668, 198, 380, 858, 15, 139, 539, 359, 875, 331, 499, 369, 808, 738, 14, 421, 505, 947, 610, 928, 219, 767, 468, 26, 178, 446, 1, 80, 946, 49, 840, 590, 247, 197, 424, 263, 336, 963, 622, 187, 270, 97, 556, 54, 835, 570, 476, 317, 493, 62, 221, 713, 829, 689, 739, 1007, 111, 740, 63, 33, 790, 903, 623, 13, 76, 23, 276, 412, 986, 898, 600, 232, 995, 132, 286, 807, 703, 762, 100, 172, 824, 321, 885, 629, 1010, 600, 612, 97, 317, 675, 130, 83, 555, 753, 96, 631, 776, 373, 20, 738, 247, 620, 970, 219, 752, 232, 2, 431, 995, 102, 604, 795, 423, 465, 401, 409, 42, 1013, 506, 359, 665, 636, 442, 196, 365, 538, 827, 117, 911, 847, 855, 135, 443, 801, 354, 172, 9, 356, 603, 1004, 458, 183, 776, 881, 649, 153, 266, 691, 142, 772, 26, 807, 384, 468, 1003, 749, 1006, 807, 866, 894, 630, 697, 5, 50, 474, 359, 222, 483, 715, 825, 464, 149, 1009, 216, 6, 634, 369, 272, 301, 511, 20, 327, 295, 404, 795, 274, 129, 777, 57, 995, 647, 688, 668, 652, 738, 118, 1011, 960, 601, 702, 761, 41, 851, 746, 257, 857, 356, 626, 105, 657, 114, 125, 984, 409, 529, 755, 683, 658, 509, 741, 629, 132, 405, 273, 785, 119, 391, 772, 55, 993, 451, 816, 10, 278, 539, 268, 112, 895, 894, 217, 529, 1008, 343, 489, 393, 872, 221, 53, 507, 730, 794, 112, 862, 175, 386, 623, 294, 777, 372, 349, 746, 823, 141, 757, 77, 680, 1, 189, 552, 895, 407, 57, 880, 750, 546, 249, 598, 767, 302, 81, 473, 72, 194, 312, 247, 580, 935, 541, 333, 283, 890, 56, 82, 8, 813, 160, 688, 814, 349, 216, 685, 756, 273, 541, 482, 820, 791, 57, 563, 69, 138, 13, 142, 332, 325, 389, 912, 236, 931, 222, 520, 797, 278, 602, 805, 67, 762, 470, 881, 88, 686, 542, 844, 960, 60, 303, 756, 851, 360, 295, 920, 498, 308, 38, 831, 633, 428, 719, 870, 335, 941, 366, 108, 195, 968, 914, 262, 707, 360, 119, 795, 22, 662, 615, 982, 722, 918, 714, 549, 254, 1010, 445, 753, 294, 484, 560, 928, 912, 255, 774, 223, 173, 116, 331, 368, 60, 221, 631, 767, 581, 750, 538, 604, 388, 130, 562, 86, 24, 253, 635, 279, 239, 57, 8, 533, 541, 568, 437, 429, 823, 187, 652, 996, 303, 983, 341, 364, 181, 972, 107, 762, 698, 646, 342, 63, 776, 905, 149, 800, 134, 785, 55, 373, 842, 63, 906, 359, 631, 320, 788, 431, 507, 416, 403, 811, 375, 744, 151, 556, 692, 258, 295, 367, 904, 637, 430, 656, 518,

Page 30: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

30  

579, 433, 652, 340, 488, 1, 158, 552, 908, 517, 159, 204, 281, 590, 711, 697, 994, 498, 49, 714, 649, 605, 383, 908, 900, 750, 788, 514, 156, 421, 8, 735, 854, 661, 52, 318, 662, 210, 870, 546, 728, 6, 750, 1009, 596, 438, 683, 566, 936, 732, 257, 562, 313, 640, 446, 190, 366, 210, 704, 522, 631, 712, 233, 461, 349, 285, 780, 1012, 496, 626, 534, 200, 632, 261, 185, 205, 699, 868, 771, 611, 576, 4, 149, 890, 644, 595, 56, 1010, 806, 760, 508, 413, 448, 742, 875, 798, 3, 631, 786, 499, 233, 296, 699, 866, 557, 885, 47, 232, 729, 818, 844, 282, 823, 993, 148, 443, 565, 204, 430, 347, 964, 938, 760, 388, 656, 611, 162, 660, 218, 948, 135, 452, 221, 835, 294, 778, 696, 341, 1011, 401, 135, 831, 683, 958, 800, 831, 378, 341, 11, 808, 688, 975, 722, 425, 340, 355, 12, 502, 1015, 231, 427, 126, 683, 648, 961, 977, 402, 633, 294, 389, 11, 429, 196, 694, 364, 997, 502, 742, 314, 513, 526, 1003, 465, 224, 404, 805, 579, 416, 283, 570, 647, 710, 697, 306, 334, 634, 259, 737, 244, 553, 102, 255, 983, 299, 949, 323, 272, 427, 41, 586, 941, 567, 565, 382, 791, 969, 163, 347, 362, 446, 917, 1009, 133, 590, 292, 467, 201, 551, 180, 445, 81, 283, 700, 40, 582, 625, 363, 854, 29, 404, 416, 970, 971, 982, 328, 738, 927, 491, 61, 265, 937, 979, 251, 46, 545, 543, 514, 746, 70, 694, 167, 151, 977, 867, 191, 535, 469, 554, 365, 498, 958, 782, 444, 905, 740, 772, 620, 643, 239, 681, 909, 152, 636, 136, 199, 158, 679, 713, 904, 749, 383, 48, 901, 337, 915, 68, 872, 360, 623, 214, 858, 557, 996, 278, 439, 712, 26, 35, 331, 265, 716, 216, 418, 329, 352, 617, 487, 7, 306, 367, 757, 689, 415, 634, 2, 307, 702, 875, 667, 301, 65, 502, 859, 37, 780, 274, 749, 807, 309, 56, 48, 1, 273, 466, 330, 625, 59, 817, 633, 365, 161, 366, 31, 576, 1000, 33, 883, 678, 908, 527, 980, 973, 5, 815, 1010, 785, 65, 735, 568, 374, 792, 617, 375, 41, 59, 706, 666, 119, 499, 275, 484, 660, 641, 515, 213, 617, 549, 72, 272, 433, 599, 228, 383, 604, 19, 369, 366, 84, 81, 934, 458, 873, 527, 833, 914, 587, 515, 556, 706, 1015, 832, 166, 651, 449, 682, 864, 43, 207, 937, 315, 640, 512, 543, 1023, 93, 562, 369, 459, 646, 450, 369, 80, 299, 897, 913, 189, 460, 405, 745, 142, 396, 553, 308, 23, 1003, 990, 888, 22, 173, 801, 337, 814, 289, 880, 813, 382, 418, 158, 841, 40, 608, 187, 120, 907, 60, 9, 72, 520, 414, 818, 662, 810, 347, 970, 834, 326, 937, 698, 348, 86, 475, 685, 900, 764, 541, 690, 123, 959, 848, 964, 999, 433, 127, 95, 316, 187, 105, 389, 707, 519, 183, 345, 306, 530, 292, 116, 857, 205, 814, 181, 291, 265, 867, 168, 5, 384, 858, 128, 320, 682, 69, 295, 91, 196, 391, 408, 384, 496, 797, 67, 1015, 980, 413, 297, 486, 705, 413, 319, 910, 203, 501, 177, 468, 344, 345, 474, 728, 179, 602, 24, 862, 671, 320, 953, 868, 711, 337, 228, 183, 110, 295, 174, 66, 708, 472, 553, 389, 885, 872, 275, 65, 349, 453, 533, 693, 798, 1007, 398, 978, 586, 422, 816, 233, 742, 745, 77, 429, 59, 305, 612, 169, 601, 787, 236, 285, 235, 789, 675, 96, 637, 950, 161, 987, 379, 695, 656, 154, 678, 30, 108, 240, 453, 924, 474, 171, 645, 551, 601, 704, 857, 189, 874, 434, 976, 86, 719, 187, 875, 370, 284, 488, 297, 445, 451, 676, 116, 84, 830, 795, 114, 938, 11, 567, 838, 485, 739, 460, 13, 316, 140, 870, 505, 1014, 280, 458, 76, 999, 645, 951, 346, 929, 416, 643, 351, 867, 295, 467, 951, 102, 238, 42, 16, 250, 609, 855, 735, 324, 291, 748, 640, 431, 594, 122, 422, 874, 580, 498, 850, 201, 426, 172, 107, 842, 815, 458, 685, 86, 925, 613, 188, 140, 655, 205, 390, 240, 36, 101, 565, 327, 850, 181, 758, 420, 303, 156, 271, 883, 655, 97, 61, 57, 269, 168, 899, 60, 626, 560, 146, 527, 149, 335, 667, 804, 540, 33, 21, 576, 135, 586, 903, 985, 767, 637, 381, 47, 794, 652, 930, 425, 749, 991, 482, 1018, 135, 357, 54, 761, 917, 201, 265, 43, 536, 932, 847, 52, 966, 868, 628, 77, 430, 507, 38, 174, 120, 419, 221, 914, 48, 127, 315, 797, 95, 797, 792, 230, 130, 846, 992, 24, 23, 233, 67, 559, 141, 914, 611, 83, 759, 215, 160, 165, 722, 198, 339, 843, 618, 560, 733, 666, 688, 25, 439, 783, 822, 207, 1013, 953, 30, 981, 977, 53, 190, 20, 613, 332, 934, 200, 415, 669, 416, 576, 835, 114, 774, 150, 957, 368, 711, 667, 10, 375, 692, 450, 134, 490, 657, 123, 419, 687, 81, 372, 741, 271, 392, 330, 603, 303, 530, 1019, 972, 946, 571, 783, 37, 321, 934, 994, 690, 621, 637, 700, 996, 305, 126, 106, 796, 784, 229, 191, 447, 310, 564, 164, 582, 956, 494, 161, 235, 1, 156, 184, 947, 727, 967, 984, 25, 877, 955, 715, 474, 568, 391, 446, 874, 518, 552, 646, 278, 782, 837, 725, 68, 377, 890, 650, 310, 360, 812, 545, 361, 968, 729, 285, 672, 673, 245, 697, 526, 176, 388, 1001, 745, 779, 423, 595, 273, 976, 217, 551, 734, 30, 253, 802, 408, 119, 429, 718, 479, 217, 239, 841, 161, 969, 102, 833, 618, 347, 506, 120, 524, 894, 97, 245, 650, 521, 840, 923, 473, 33, 451, 183, 63, 704, 985, 471, 823, 390, 165, 278, 607, 405, 95, 769, 350, 197, 578, 968, 545, 61, 64, 45, 955, 162, 290, 581, 683, 106, 481, 132, 139, 932, 315, 202, 612, 276, 674, 411, 667, 839, 689, 250, 220, 785, 1019, 570, 982, 574, 514, 503, 635, 579, 548, 566, 741, 838, 124, 400, 944, 605, 532, 59, 513, 847, 262, 101, 99, 936, 512, 766, 751, 177, 1017, 972, 962, 1012, 518, 921, 562, 9, 400, 173, 588, 949, 740, 305, 763, 864, 705, 684, 445, 213, 743, 958, 36, 1005, 35, 135, 917, 547, 902, 645, 724, 895, 593, 663, 883, 87, 560, 422, 96, 960, 595, 684, 885, 311, 989, 625, 151, 670, 285, 596, 883, 4, 530, 919, 1010, 565, 31, 903, 88, 933, 524, 813, 804, 93, 452, 663, 181, 1012, 61, 277, 948, 657, 962, 810, 968, 927, 411, 96, 574, 696, 692, 433, 700, 199, 329, 686, 764, 360, 566, 853, 269, 66, 642, 49, 160, 70, 712, 341, 58, 774, 618, 1006, 407, 556, 792, 351,

Page 31: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

31  

460, 179, 447, 10, 875, 116, 443, 552, 315, 772, 214, 55, 108, 780, 908, 377, 847, 526, 426, 1007, 596, 115, 324, 654, 889, 942, 637, 272, 475, 405, 623, 935, 585, 47, 945, 436, 163, 364, 988, 478, 113, 179, 533, 221, 959, 418, 599, 782, 944, 1, 765, 517, 116, 65, 147, 1005, 1008, 784, 253, 459, 166, 877, 370, 751, 924, 291, 163, 63, 655, 128, 541, 768, 307, 50, 990, 242, 468, 565, 1, 389, 566, 766, 906, 683, 832, 29, 664, 816, 814, 918, 251, 980, 771, 621, 707, 671, 912, 870, 734, 543, 998, 251, 288, 281, 301, 254, 524, 770, 819, 525, 135, 361, 267, 17, 20, 75, 46, 685, 891, 860, 579, 118, 816, 326, 739, 499, 997, 627, 346, 707, 147, 320, 958, 435, 602, 235, 689, 102, 1005, 484, 627, 116, 845, 894, 133, 866, 970, 180, 527, 837, 16, 82, 956, 833, 408, 671, 308, 381, 275, 654, 64, 422, 975, 1022, 857, 553, 233, 522, 655, 215, 1006, 258, 331, 827, 128, 465, 669, 74, 645, 172, 912, 661, 254, 844, 470, 662, 491, 779, 19, 766, 409, 83, 164, 360, 81, 1021, 913, 315, 519, 544, 530, 501, 802, 861, 305, 931, 302, 974, 1005, 947, 123, 893, 585, 377, 713, 31, 16, 181, 810, 35, 947, 196, 119, 88, 556, 200, 85, 446, 515, 605, 990, 21, 82, 769, 883, 387, 676, 161, 338, 657, 85, 461, 527, 670, 838, 216, 701, 854, 397, 488, 890, 321, 684, 1009, 409, 216, 185, 494, 662, 701, 75, 629, 722, 158, 374, 581, 545, 26, 743, 883, 683, 828, 320, 186, 474, 135, 403, 151, 989, 800, 639, 855, 97, 299, 840, 506, 516, 2, 1001, 154, 703, 52, 783, 401, 210, 133, 983, 756, 159, 702, 615, 843, 506, 936, 5, 980, 47, 408, 107, 12, 185, 747, 868, 282, 22, 684, 789, 538, 686, 766, 693, 365, 818, 452, 767, 5, 586, 726, 761, 745, 404, 352, 564, 910, 264, 570, 866, 311, 978, 973, 324, 139, 696, 168, 422, 719, 852, 187, 233, 515, 953, 926, 880, 747, 355, 623, 752, 941, 325, 489, 662, 729, 842, 203, 615, 82, 773, 457, 394, 727, 407, 718, 867, 79, 886, 265, 798, 714, 452, 8, 205, 381, 934, 62, 104, 265, 685, 857, 182, 1011, 322, 845, 716, 140, 24, 308, 223, 797, 765, 617, 500, 148, 311, 343, 228, 173, 608, 2, 887, 36, 10, 69, 417, 945, 131, 522, 186, 816, 355, 369, 803, 677, 190, 496, 818, 214, 804, 17, 1011, 545, 634, 487, 694, 945, 831, 922, 94, 415, 924, 981, 452, 935, 26, 869, 856, 157, 367, 18, 974, 722, 387, 753, 376, 577, 225, 170, 791, 5, 187, 778, 551, 821, 242, 221, 742, 49, 119, 836, 464, 19, 793, 916, 954, 820, 762, 786, 977, 105, 805, 927, 828, 168, 657, 180, 746, 882, 350, 513, 888, 537, 268, 415, 334, 510, 636, 52, 559, 755, 888, 1023, 774, 657, 916, 705, 453, 654, 467, 407, 759, 248, 310, 563, 417, 967, 743, 139, 826, 69, 652, 690, 606, 920, 81, 940, 406, 717, 992, 965, 448, 856, 965, 198, 490, 857, 903, 943, 487, 347, 326, 222, 595, 637, 786, 1012, 580, 505, 127, 382, 575, 780, 48, 157, 676, 129, 74, 59, 846, 42, 0, 270, 899, 965, 469, 365, 798, 348, 284, 261, 695, 611, 484, 267, 224, 246, 255, 804, 751, 383, 163, 302, 139, 211, 460, 815, 341, 534, 874, 163, 576, 875, 434, 451, 816, 903, 816, 591, 227, 77, 852, 923, 688, 312, 166, 912, 558, 421, 692, 286, 804, 855, 588, 943, 43, 24, 735, 384, 558, 585, 547, 111, 436, 981, 562, 229, 860, 355, 820, 64, 432, 648, 987, 96, 961, 129, 1008, 495, 550, 676, 781, 331, 508, 346, 250, 551, 370, 985, 935, 929, 547, 458, 16, 983, 416, 578, 188, 252, 933, 1008, 316, 341, 633, 279, 437, 570, 408, 421, 41, 959, 74, 823, 266, 582, 145, 516, 109, 515, 478, 20, 420, 1, 478, 436, 984, 894, 1015, 149, 123, 924, 133, 439, 242, 766, 719, 679, 312, 103, 77, 354, 38, 151, 153, 304, 733, 298, 821, 842, 813, 275, 862, 210, 276, 316, 646, 236, 187, 637, 385, 310, 538, 519, 749, 780, 261, 444, 435, 574, 548, 512, 928, 586, 663, 57, 891, 372, 355, 688, 190, 144, 963, 28, 354, 215, 345, 1001, 451, 532, 614, 837, 842, 128, 332, 567, 908, 593, 1012, 320, 143, 536, 832, 47, 98, 472, 104, 989, 844, 459, 653, 11, 604, 592, 39, 958, 807, 384, 935, 235, 916, 526, 48, 734, 654, 380, 278, 539, 973, 266, 859, 93, 802, 667, 140, 900, 115, 245, 866, 960, 704, 495, 971, 284, 64, 1010, 219, 871, 371, 130, 82, 263, 656, 130, 998, 287, 510, 252, 826, 460, 518, 661, 553, 296, 304, 693, 172, 420, 938, 14, 356, 619, 510, 303, 903, 574, 289, 98, 421, 660, 229, 504, 924, 885, 634, 898, 148, 121, 126, 974, 581, 644, 611, 110, 940, 916, 803, 88, 312, 718, 103, 668, 313, 613, 971, 192, 163, 236, 291, 584, 897, 520, 64, 797, 381, 699, 671, 530, 820, 797, 480, 377, 417, 68, 487, 333, 984, 266, 421, 272, 984, 524, 940, 273, 113, 887, 466, 276, 99, 757, 861, 996, 253, 925, 769, 634, 600, 416, 140, 396, 189, 621, 773, 606, 689, 236, 939, 649, 503, 337, 921, 463, 861, 837, 737, 975, 700, 179, 227, 799, 936, 64, 772, 165, 990, 517, 799, 566, 934, 940, 963, 99, 537, 712, 706, 202, 949, 621, 851, 428, 958, 748, 891, 796, 561, 604, 747, 237, 783, 974, 12, 695, 15, 784, 860, 1005, 278, 636, 547, 188, 552, 486, 287, 65, 175, 993, 267, 100, 591, 94, 528, 525, 842, 395, 297, 379, 1000, 20, 616, 759, 995, 628, 431, 1010, 389, 267, 991, 667, 903, 514, 855, 431, 1001, 118, 496, 152, 88, 763, 252, 679, 857, 780, 180, 675, 151, 478, 30, 127, 498, 646, 887, 469, 251, 294, 455, 640, 561, 422, 283, 441, 937, 114, 872, 914, 232, 345, 42, 320, 84, 294, 999, 942, 50, 156, 593, 201, 634, 624, 329, 108, 246, 192, 578, 497, 486, 9, 113, 23, 432, 396, 464, 345, 510, 313, 235, 743, 658, 277, 39, 742, 571, 15, 660, 621, 171, 230, 822, 805, 854, 127, 913, 76, 319, 467, 574, 805, 477, 687, 829, 909, 60, 269, 230, 570, 582, 465, 289, 216, 742, 329, 959, 289, 344, 595, 910, 515, 825, 708, 296, 655, 836, 185, 732, 131, 653, 282, 937, 106, 969, 742, 1015, 5, 1011, 221, 576, 570, 686, 865, 786, 404, 170, 721, 693, 514, 293, 579, 5, 94, 263, 301, 750, 75, 487, 458, 207, 116, 740, 120, 222,

Page 32: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

32  

685, 862, 213, 691, 849, 434, 243, 395, 96, 84, 158, 500, 255, 879, 169, 769, 148, 748, 775, 243, 1011, 52, 993, 63, 539, 427, 270, 655, 143, 390, 877, 828, 228, 66, 495, 53, 500, 738, 449, 596, 823, 607, 72, 54, 462, 241, 823, 611, 989, 574, 854, 977, 627, 823, 16, 142, 226, 286, 798, 369, 676, 651, 173, 904, 718, 669, 957, 194, 383, 382, 791, 182, 989, 863, 236, 428, 81, 36, 15, 46, 610, 869, 1023, 213, 668, 15, 356, 894, 301, 130, 239, 977, 781, 412, 857, 475, 57, 791, 670, 441, 149, 437, 623, 115, 276, 860, 543, 357, 896, 558, 404, 482, 403, 403, 696, 47, 419, 28, 941, 720, 158, 156, 674, 939, 568, 507, 391, 626, 274, 37, 43, 424, 474, 666, 539, 750, 502, 58, 84, 374, 616, 488, 857, 1019, 891, 529, 42, 286, 557, 983, 1007, 715, 115, 657, 630, 683, 140, 1021, 285, 415, 34, 328, 839, 508, 995, 354, 235, 473, 412, 319, 848, 4, 807, 681, 1023, 674, 186, 41, 961, 743, 0, 944, 434, 115, 577, 40, 798, 717, 38, 60, 108, 72, 388, 947, 581, 359, 277, 816, 833, 689, 111, 657, 693, 918, 314, 692, 568, 500, 733, 505, 219, 733, 425, 653, 848, 1002, 693, 623, 696, 731, 683, 804, 804, 47, 728, 361, 407, 1005, 153, 216, 671, 264, 873, 340, 158, 163, 9, 726, 663, 742, 208, 882, 452, 633, 511, 276, 612, 180, 899, 284, 912, 558, 64, 692, 606, 792, 29, 1013, 774, 182, 205, 421, 446, 54, 761, 604, 217, 770, 306, 880, 489, 514, 738, 941, 124, 225, 193, 736, 405, 69, 1020, 293, 627, 60, 985, 209, 853, 1014, 198, 603, 172, 403, 0, 618, 457, 761, 198, 674, 508, 505, 530, 997, 1019, 244, 914, 119, 469, 83, 855, 875, 152, 851, 144, 780, 912, 106, 989, 741, 96, 164, 320, 269, 567, 320, 887, 1, 57, 62, 675, 565, 567, 182, 538, 562, 426, 428, 682, 896, 512, 513, 747, 664, 341, 891, 420, 229, 997, 386, 970, 70, 550, 266, 339, 93, 586, 202, 94, 643, 264, 770, 185, 831, 952, 723, 370, 354, 128, 28, 226, 640, 541, 973, 280, 882, 841, 701, 87, 814, 63, 33, 884, 613, 299, 199, 706, 885, 402, 801, 505, 666, 547, 690, 474, 475, 389, 844, 829, 517, 872, 32, 133, 389, 1005, 414, 248, 822, 91, 335, 613, 154, 369, 473, 767, 668, 673, 449, 530, 51, 226, 11, 717, 773, 701, 167, 224, 66, 1011, 30, 584, 859, 62, 717, 225, 43, 107, 473, 866, 198, 808, 455, 352, 153, 928, 95, 822, 577, 545, 328, 628, 771, 339, 322, 521, 16, 489, 745, 82, 477, 775, 666, 312, 837, 360, 537, 881, 467, 1010, 723, 666, 795, 154, 1018, 948, 58, 90, 746, 636, 635, 50, 240, 382, 389, 562, 903, 405, 28, 625, 488, 505, 376, 130, 817, 190, 490, 331, 47, 958, 317, 770, 600, 88, 924, 594, 13, 982, 684, 759, 594, 295, 810, 835, 678, 175, 373, 557, 581, 401, 158, 45, 906, 535, 175, 700, 725, 666, 7, 772, 600, 324, 518, 176, 413, 418, 770, 426, 376, 431, 161, 971, 726, 971, 782, 380, 123, 131, 938, 704, 533, 72, 749, 415, 607, 924, 91, 308, 566, 98, 56, 142, 423, 574, 318, 836, 992, 65, 238, 345, 496, 399, 292, 198, 347, 50, 579, 470, 181, 493, 150, 714, 565, 899, 106, 149, 799, 197, 457, 342, 296, 514, 484, 719, 64, 803, 531, 33, 868, 769, 378, 340, 144, 670, 538, 491, 720, 93, 961, 901, 586, 87, 592, 128, 986, 698, 277, 762, 895, 734, 80, 167, 224, 564, 886, 289, 343, 393, 322, 187, 138, 700, 527, 283, 346, 42, 774, 42, 135, 712, 943, 722, 799, 511, 850, 762, 185, 103, 500, 57, 837, 580, 224, 38, 120, 87, 327, 464, 480, 649, 651, 619, 325, 155, 902, 671, 197, 652, 713, 332, 340, 632, 30, 116, 120, 880, 878, 305, 983, 354, 362, 797, 934, 587, 835, 30, 674, 138, 494, 130, 787, 122, 749, 88, 277, 627, 759, 474, 256, 448, 806, 596, 56, 837, 712, 176, 693, 566, 482, 653, 920, 844, 426, 830, 407, 237, 861, 57, 375, 331, 188, 138, 453, 937, 226, 730, 541, 985, 180, 797, 409, 987, 369, 465, 800, 58, 642, 469, 624, 100, 98, 521, 944, 524, 327, 328, 761, 164, 385, 112, 496, 573, 250, 949, 487, 476, 656, 4, 437, 836, 801, 846, 799, 146, 288, 575, 204, 930, 21, 829, 6, 119, 326, 950, 644, 653, 254, 381, 818, 640, 494, 290, 189, 744, 215, 676, 197, 871, 680, 634, 684, 457, 457, 459, 604, 745, 11, 808, 651, 32, 613, 657, 151, 939, 583, 795, 569, 838, 153, 363, 454, 647, 653, 643, 367, 868, 296, 564, 716, 976, 175, 376, 410, 632, 835, 1014, 353, 846, 798, 1004, 878, 388, 637, 6, 303, 196, 801, 872, 10, 954, 211, 464, 577, 864, 84, 945, 709, 380, 485, 401, 332, 660, 777, 742, 268, 588, 732, 621, 411, 507, 601, 265, 895, 214, 271, 174, 411, 49, 23, 421, 1003, 234, 886, 557, 75, 970, 478, 784, 326, 963, 161, 658, 600, 938, 377, 868, 502, 85, 466, 913, 592, 43, 155, 463, 258, 426, 638, 669, 475, 661, 66, 455, 895, 952, 1012, 970, 898, 466, 730, 200, 405, 891, 859, 1005, 805, 212, 850, 284, 297, 292, 173, 890, 335, 328, 329, 593, 755, 967, 238, 206, 604, 305, 661, 476, 233, 649, 422, 108, 91, 129, 308, 497, 1020, 143, 478, 802, 355, 304, 62, 653, 596, 235, 519, 932, 564, 848, 501, 295, 792, 740, 501, 372, 21, 139, 848, 254, 788, 247, 362, 880, 376, 671, 353, 372, 814, 831, 150, 146, 112, 212, 799, 708, 448, 294, 616, 1012, 118, 94, 283, 910, 834, 784, 259, 855, 923, 83, 85, 688, 330, 448, 544, 706, 95, 897, 55, 909, 704, 205, 31, 816, 418, 830, 501, 866, 100, 93, 854, 219, 187, 113, 105, 1021, 897, 364, 852, 797, 448, 938, 461, 778, 362, 1005, 461, 457, 878, 516, 342, 558, 721, 374, 351, 115, 180, 852, 981, 281, 945, 811, 500, 109, 924, 605, 106, 798, 970, 959, 571, 394, 873, 8, 148, 211, 1013, 609, 668, 867, 101, 1010, 401, 823, 360, 752, 938, 541, 580, 896, 822, 502, 683, 298, 611, 584, 903, 717, 358, 849, 652, 929, 219, 501, 937, 368, 712, 926, 977, 356, 769, 55, 343, 146, 878, 703, 899, 792, 220, 455, 664, 18, 957, 324, 316, 544, 908, 196, 238, 242, 21, 890, 147, 241, 368, 60, 609, 56, 986, 562, 413, 731, 617, 756, 877, 471, 435, 752, 240, 656, 184, 904, 674, 117, 204, 991, 662, 88, 163, 900, 330, 184,

Page 33: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

33  

766, 477, 425, 110, 537, 10, 167, 499, 573, 580, 206, 166, 312, 60, 638, 747, 812, 878, 379, 996, 758, 30, 90, 963, 1021, 752, 27, 160, 628, 358, 344, 370, 835, 770, 481, 349, 780, 648, 848, 329, 204, 31, 496, 516, 91, 110, 239, 903, 988, 619, 876, 722, 649, 966, 661, 646, 694, 689, 806, 298, 23, 126, 668, 858, 896, 125, 183, 653, 773, 8, 982, 977, 39, 454, 469, 130, 564, 709, 9, 528, 304, 885, 227, 953, 827, 888, 575, 497, 553, 357, 795, 576, 483, 440, 411, 356, 565, 594, 1009, 315, 602, 967, 268, 641, 398, 738, 771, 962, 423, 781, 467, 727, 642, 694, 656, 446, 558, 207, 943, 88, 564, 715, 664, 23, 131, 51, 379, 696, 646, 364, 1011, 224, 308, 256, 866, 706, 994, 613, 644, 393, 370, 87, 96, 1013, 781, 752, 435, 316, 959, 354, 404, 499, 45, 44, 522, 176, 96, 902, 873, 742, 242, 860, 966, 550, 92, 808, 232, 62, 398, 877, 455, 768, 964, 551, 757, 722, 279, 168, 14, 214, 523, 418, 713, 568, 462, 212, 745, 558, 90, 594, 276, 332, 430, 219, 883, 523, 3, 91, 585, 401, 968, 17, 146, 909, 568, 903, 607, 848, 48, 621, 38, 571, 15, 752, 115, 477, 964, 860, 12, 30, 430, 288, 362, 861, 507, 221, 360, 511, 313, 945, 912, 257, 962, 34, 142, 507, 938, 749, 331, 986, 346, 369, 533, 361, 97, 648, 839, 37, 485, 851, 67, 915, 115, 430, 752, 623, 651, 88, 110, 964, 10, 1022, 198, 972, 33, 340, 455, 971, 66, 786, 933, 412, 132, 442, 774, 229, 66, 589, 267, 551, 416, 334, 443, 531, 764, 171, 130, 392, 260, 240, 332, 270, 239, 530, 218, 272, 871, 674, 219, 937, 436, 128, 325, 568, 570, 75, 798, 636, 664, 41, 164, 56, 375, 607, 588, 116, 778, 718, 508, 14, 959, 840, 284, 174, 347, 503, 446, 194, 153, 665, 107, 589, 793, 432, 134, 339, 508, 932, 975, 148, 973, 115, 205, 324, 722, 793, 440, 477, 487, 948, 491, 422, 765, 776, 596, 88, 255, 18, 282, 408, 683, 389, 997, 452, 821, 107, 791, 305, 15, 743, 454, 988, 858, 659, 289, 557, 428, 729, 10, 915, 654, 501, 314, 395, 253, 910, 483, 508, 929, 765, 916, 588, 130, 890, 17, 951, 997, 808, 233, 1013, 527, 687, 977, 362, 322, 242, 919, 750, 972, 929, 641, 602, 406, 955, 997, 660, 842, 456, 144, 747, 197, 37, 311, 327, 927, 328, 254, 900, 113, 487, 889, 640, 150, 843, 1002, 472, 61, 897, 198, 9, 802, 840, 611, 185, 771, 584, 845, 589, 16, 989, 312, 213, 2, 624, 540, 929, 952, 795, 806, 41, 258, 671, 682, 409, 490, 660, 881, 552, 534, 56, 561, 312, 896, 149, 497, 643, 733, 318, 209, 750, 284, 521, 963, 286, 121, 480, 192, 50, 251, 998, 91, 509, 645, 773, 918, 112, 410, 776, 664, 944, 832, 201, 232, 704, 350, 730, 323, 60, 24, 532, 810, 308, 30, 749, 595, 151, 205, 787, 201, 456, 761, 293, 966, 382, 42, 860, 494, 452, 612, 134, 372, 420, 336, 605, 100, 686, 311, 424, 746, 335, 956, 532, 644, 986, 258, 215, 114, 463, 1002, 315, 920, 739, 608, 862, 97, 651, 698, 592, 79, 287, 726, 452, 707, 38, 33, 808, 725, 344, 208, 447, 679, 140, 980, 299, 103, 214, 514, 217, 677, 492, 532, 573, 207, 117, 411, 305, 768, 86, 897, 847, 373, 599, 275, 56, 638, 308, 864, 339, 652, 48, 786, 308, 189, 742, 607, 292, 956, 98, 509, 610, 590, 17, 159, 798, 134, 571, 79, 902, 657, 976, 726, 6, 551, 1001, 62, 165, 286, 927, 504, 938, 975, 267, 222, 140, 1009, 830, 432, 942, 928, 941, 528, 494, 959, 687, 268, 69, 234, 347, 972, 891, 299, 674, 897, 851, 651, 960, 1016, 937, 863, 497, 852, 814, 764, 50, 955, 749, 880, 363, 667, 784, 281, 171, 255, 216, 859, 523, 285, 69, 871, 233, 961, 146, 907, 834, 997, 535, 770, 990, 448, 609, 463, 276, 400, 203, 327, 331, 952, 183, 694, 596, 968, 975, 767, 199, 167, 602, 722, 453, 672, 569, 686, 609, 716, 570, 419, 689, 81, 166, 655, 529, 775, 94, 806, 151, 297, 109, 482, 226, 292, 153, 822, 236, 104, 565, 435, 272, 144, 134, 725, 816, 703, 387, 401, 395, 957, 820, 61, 14, 986, 716, 544, 738, 811, 326, 889, 84, 435, 348, 310, 727, 501, 108, 964, 605, 674, 375, 877, 818, 509, 578, 610, 189, 966, 1011, 584, 899, 807, 645, 914, 770, 338, 434, 484, 125, 760, 349, 209, 171, 697, 520, 898, 174, 628, 838, 780, 278, 190, 633, 72, 699, 188, 682, 888, 130, 669, 449, 5, 453, 70, 919, 199, 408, 329, 683, 533, 65, 8, 743, 236, 706, 239, 111, 880, 867, 949, 636, 122, 115, 246, 194, 815, 434, 877, 679, 564, 522, 104, 569, 975, 175, 465, 150, 583, 794, 833, 93, 860, 842, 836, 72, 524, 51, 183, 380, 918, 109, 1017, 16, 224, 239, 211, 15, 673, 64, 695, 213, 586, 799, 782, 538, 974, 223, 688, 534, 1018, 498, 627, 854, 316, 439, 926, 840, 490, 86, 196, 384, 195, 189, 401, 419, 428, 612, 435, 77, 676, 106, 290, 238, 905, 49, 776, 856, 272, 441, 366, 266, 939, 993, 96, 231, 408, 1023, 47, 898, 85, 243, 258, 280, 433, 659, 699, 861, 247, 110, 939, 923, 216, 205, 138, 98, 254, 914, 954, 527, 331, 296, 793, 246, 265, 890, 477, 673, 889, 524, 547, 974, 768, 805, 230, 177, 441, 929, 14, 688, 16, 953, 588, 232, 135, 726, 330, 389, 616, 260, 916, 948, 556, 686, 170, 821, 552, 648, 470, 417, 148, 1017, 367, 916, 799, 597, 69, 216, 502, 84, 904, 518, 13, 468, 751, 148, 170, 57, 538, 787, 318, 430, 711, 874, 92, 881, 672, 644, 505, 118, 37, 654, 112, 404, 546, 911, 1001, 616, 103, 480, 700, 1007, 998, 713, 452, 725, 862, 622, 783, 376, 385, 77, 806, 72, 951, 899, 954, 599, 519, 435, 718, 557, 65, 830, 961, 612, 717, 939, 204, 820, 395, 904, 803, 369, 593, 231, 71, 431, 854, 854, 807, 215, 931, 590, 288, 858, 465, 218, 434, 984, 653, 128, 517, 719, 958, 455, 307, 651, 370, 511, 447, 765, 391, 226, 110, 984, 458, 181, 392, 288, 11, 175, 503, 942, 765, 791, 777, 206, 1009, 187, 167, 639, 315, 684, 334, 249, 115, 641, 900, 485, 128, 323, 226, 519, 549, 337, 479, 1007, 518, 871, 271, 530, 23, 775, 448, 788, 542, 201, 995, 528, 388, 138, 143, 703, 822, 477, 952, 938, 94, 828, 399, 222, 127, 626, 741, 677, 963, 196, 660, 457, 44,

Page 34: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

34  

932, 987, 67, 683, 412, 855, 201, 613, 826, 729, 1002, 964, 872, 681, 763, 325, 610, 677, 419, 414, 52, 641, 542, 678, 358, 195, 617, 555, 855, 51, 599, 763, 14, 666, 422, 426, 497, 624, 16, 300, 329, 1018, 240, 178, 675, 1003, 503, 261, 656, 923, 676, 709, 540, 194, 363, 899, 389, 981, 430, 220, 8, 5, 984, 22, 671, 382, 449, 144, 1006, 465, 444, 312, 459, 685, 490, 110, 664, 993, 372, 297, 892, 24, 1006, 409, 218, 345, 284, 607, 302, 714, 827, 310, 719, 787, 333, 366, 146, 782, 510, 128, 223, 955, 440, 682, 616, 930, 792, 256, 900, 140, 553, 768, 164, 535, 153, 382, 881, 437, 989, 159, 127, 793, 470, 846, 556, 803, 188, 702, 561, 699, 831, 784, 630, 247, 442, 222, 154, 210, 478, 30, 351, 8, 798, 515, 543, 952, 898, 400, 365, 863, 560, 493, 632, 6, 315, 165, 809, 504, 867, 346, 179, 674, 106, 809, 922, 548, 7, 52, 758, 485, 82, 85, 493, 880, 601, 13, 808, 475, 413, 150, 314, 973, 643, 947, 979, 958, 88, 764, 438, 955, 86, 617, 606, 192, 402, 504, 740, 409, 556, 475, 895, 638, 560, 364, 494, 137, 377, 279, 612, 791, 429, 927, 740, 48, 850, 696, 1006, 938, 436, 421, 869, 523, 14, 451, 715, 417, 955, 432, 826, 487, 907, 697, 101, 443, 38, 596, 581, 415, 875, 169, 182, 280, 72, 923, 328, 922, 595, 310, 836, 7, 731, 682, 530, 746, 109, 222, 139, 41, 654, 965, 528, 537, 639, 630, 980, 677, 202, 537, 68, 53, 707, 251, 333, 779, 150, 661, 678, 745, 971, 490, 752, 679, 148, 259, 401, 258, 481, 540, 299, 111, 481, 827, 648, 96, 433, 604, 773, 635, 118, 842, 688, 825, 69, 1021, 580, 219, 658, 234, 964, 606, 725, 692, 261, 873, 951, 662, 107, 408, 178, 406, 519, 659, 210, 143, 756, 643, 748, 505, 255, 866, 323, 943, 667, 392, 941, 223, 611, 575, 458, 551, 157, 159, 220, 418, 8, 147, 56, 116, 556, 234, 522, 51, 894, 732, 195, 626, 352, 943, 107, 607, 785, 431, 526, 428, 823, 443, 651, 411, 1019, 85, 962, 152, 244, 158, 571, 253, 306, 627, 369, 862, 862, 891, 913, 732, 600, 84, 334, 952, 3, 441, 535, 788, 872, 37, 192, 672, 481, 844, 59, 476, 929, 1021, 628, 150, 156, 175, 403, 462, 803, 772, 300, 641, 639, 189, 349, 215, 274, 683, 143, 277, 100, 678, 42, 973, 716, 234, 621, 173, 54, 680, 649, 984, 677, 253, 110, 833, 429, 513, 271, 208, 261, 571, 849, 900, 761, 174, 92, 11, 857, 235, 288, 957, 914, 330, 906, 606, 565, 503, 779, 619, 159, 404, 579, 837, 657, 689, 646, 62, 178, 918, 270, 439, 465, 95, 316, 202, 269, 408, 213, 102, 643, 502, 36, 533, 832, 942, 115, 373, 422, 894, 993, 581, 274, 548, 394, 932, 214, 17, 994, 392, 935, 241, 832, 376, 336, 124, 579, 606, 532, 792, 708, 151, 270, 744, 685, 79, 663, 800, 452, 61, 671, 421, 642, 945, 970, 13, 853, 160, 30, 824, 552, 965, 41, 360, 317, 377, 484, 896, 983, 1016, 665, 668, 144, 935, 388, 829, 1014, 27, 605, 443, 88, 252, 864, 731, 174, 810, 744, 3, 970, 774, 827, 499, 715, 868, 859, 8, 222, 320, 905, 181, 312, 546, 849, 456, 457, 214, 261, 448, 241, 867, 891, 330, 95, 731, 37, 269, 518, 781, 273, 464, 531, 76, 963, 222, 945, 799, 230, 143, 95, 111, 324, 407, 657, 150, 864, 91, 364, 101, 539, 605, 968, 406, 935, 40, 113, 972, 309, 631, 729, 582, 72, 236, 659, 11, 458, 580, 810, 689, 723, 905, 800, 23, 289, 434, 173, 129, 525, 537, 230, 40, 119, 175, 446, 30, 215, 559, 1003, 524, 167, 708, 83, 239, 945, 742, 250, 379, 298, 37, 44, 1021, 942, 845, 20, 207, 255, 194, 336, 780, 731, 567, 820, 850, 742, 242, 881, 957, 801, 860, 457, 968, 544, 540, 183, 465, 258, 434, 845, 556, 471, 889, 553, 389, 710, 574, 597, 965, 768, 933, 721, 475, 476, 517, 302, 194, 759, 159, 127, 537, 1019, 585, 481, 539, 101, 665, 1005, 360, 75, 826, 916, 546, 691, 446, 935, 378, 1020, 508, 319, 764, 418, 17, 215, 894, 534, 517, 65, 270, 676, 192, 807, 671, 777, 264, 187, 879, 929, 168, 215, 1004, 994, 107, 526, 661, 553, 438, 15, 549, 946, 335, 289, 340, 352, 505, 211, 886, 1022, 276, 132, 675, 468, 939, 322, 222, 180, 509, 77, 85, 677, 292, 66, 647, 399, 592, 285, 953, 6, 300, 478, 953, 635, 768, 269, 987, 249, 480, 850, 247, 756, 982, 922, 201, 898, 221, 423, 54, 730, 500, 139, 384, 792, 205, 7, 167, 798, 292, 96, 804, 593, 575, 733, 204, 319, 1003, 168, 568, 459, 1018, 815, 192, 976, 714, 393, 850, 935, 816, 904, 641, 292, 20, 1, 60, 225, 9, 227, 1023, 301, 324, 804, 894, 899, 513, 75, 194, 492, 243, 762, 952, 237, 553, 120, 189, 243, 513, 16, 154, 305, 920, 796, 597, 940, 797, 657, 142, 806, 884, 141, 84, 184, 945, 978, 59, 435, 29, 253, 927, 272, 1015, 855, 509, 545, 975, 699, 788, 464, 715, 943, 769, 611, 715, 342, 528, 488, 999, 670, 271, 860, 811, 355, 20, 733, 309, 80, 144, 339, 333, 47, 611, 325, 903, 97, 870, 854, 796, 634, 295, 487, 553, 40, 74, 244, 383, 602, 733, 358, 248, 1004, 194, 36, 335, 215, 769, 644, 295, 913, 983, 628, 960, 571, 953, 839, 668, 799, 670, 440, 410, 965, 927, 963, 1005, 1001, 184, 364, 580, 917, 723, 828, 897, 917, 864, 208, 108, 609, 852, 403, 498, 812, 8, 435, 359, 961, 250, 3, 737, 920, 443, 123, 861, 346, 62, 843, 323, 246, 183, 903, 139, 906, 708, 12, 800, 548, 220, 908, 134, 49, 288, 632, 861, 296, 43, 196, 233, 294, 199, 970, 190, 642, 69, 28, 988, 132, 871, 287, 378, 30, 167, 518, 937, 875, 530, 713, 399, 751, 597, 533, 800, 885, 142, 637, 157, 185, 833, 391, 479, 8, 337, 670, 650, 407, 698, 614, 539, 545, 901, 917, 575, 44, 411, 488, 919, 942, 177, 295, 669, 775, 828, 445, 636, 970, 58, 794, 132, 891, 161, 611, 899, 498, 257, 525, 905, 955, 115, 420, 476, 1016, 314, 28, 37, 725, 516, 956, 643, 694, 227, 288, 445, 32, 733, 57, 1002, 791, 851, 110, 658, 1012, 722, 533, 487, 979, 34, 368, 911, 149, 789, 363, 142, 79, 391, 179, 804, 908, 111, 424, 578, 339, 712, 1023, 371, 422, 56, 349, 189, 908, 460, 848, 896, 158, 357, 359, 113, 392, 728, 0, 541, 493,

Page 35: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

35  

364, 683, 572, 755, 862, 352, 639, 974, 776, 193, 289, 465, 192, 660, 887, 249, 1009, 52, 133, 445, 900, 5, 603, 234, 365, 717, 626, 69, 717, 143, 562, 57, 827, 110, 813, 665, 462, 428, 615, 215, 622, 904, 680, 814, 540, 543, 39, 526, 595, 172, 971, 472, 178, 551, 706, 543, 244, 308, 612, 961, 451, 150, 1019, 254, 260, 808, 920, 722, 212, 511, 937, 834, 392, 593, 625, 932, 112, 664, 434, 708, 837, 382, 156, 1015, 933, 862, 534, 153, 146, 122, 90, 597, 272, 85, 852, 532, 893, 748, 230, 82, 235, 144, 916, 627, 737, 517, 536, 850, 158, 970, 534, 995, 328, 690, 986, 237, 528, 496, 390, 674, 618, 481, 247, 890, 566, 75, 398, 436, 823, 628, 518, 35, 772, 410, 662, 486, 928, 174, 312, 62, 121, 846, 33, 449, 512, 1019, 687, 16, 491, 53, 690, 85, 534, 937, 975, 77, 1013, 349, 513, 812, 977, 7, 847, 726, 417, 486, 188, 321, 660, 500, 383, 781, 322, 416, 207, 834, 411, 894, 850, 902, 947, 516, 987, 458, 429, 938, 535, 418, 263, 24, 207, 217, 31, 30, 943, 448, 516, 107, 770, 153, 607, 129, 934, 929, 546, 117, 739, 957, 1011, 565, 836, 935, 57, 799, 369, 486, 714, 904, 905, 977, 928, 88, 170, 959, 118, 89, 383, 635, 196, 129, 788, 803, 259, 698, 708, 805, 816, 423, 738, 803, 988, 550, 714, 21, 326, 59, 508, 16, 963, 389, 993, 867, 477, 140, 802, 595, 229, 162, 206, 426, 291, 994, 205, 550, 669, 914, 331, 461, 313, 46, 240, 278, 596, 955, 299, 922, 1014, 807, 938, 954, 172, 908, 797, 649, 24, 576, 221, 253, 738, 427, 679, 5, 398, 885, 556, 43, 775, 887, 504, 64, 933, 744, 342, 506, 675, 642, 404, 666, 425, 319, 596, 598, 203, 369, 223, 227, 945, 444, 480, 659, 872, 136, 665, 246, 1021, 197, 289, 772, 60, 793, 836, 994, 513, 155, 476, 165, 797, 880, 831, 198, 175, 403, 796, 378, 772, 1020, 605, 694, 440, 62, 329, 288, 198, 994, 534, 195, 167, 823, 967, 228, 592, 779, 198, 82, 934, 674, 247, 707, 530, 54, 906, 706, 457, 678, 60, 205, 674, 666, 899, 91, 728, 205, 379, 926, 175, 914, 97, 343, 713, 40, 571, 282, 819, 769, 364, 730, 419, 611, 413, 949, 665, 295, 631, 98, 974, 692, 303, 624, 334, 179, 715, 38, 384, 71, 964, 559, 985, 37, 902, 674, 77, 449, 956, 896, 194, 296, 602, 613, 907, 1016, 539, 548, 287, 146, 646, 237, 838, 950, 862, 148, 105, 553, 186, 489, 624, 126, 24, 585, 163, 927, 236, 240, 352, 168, 113, 547, 465, 715, 136, 348, 707, 675, 897, 995, 822, 519, 208, 636, 445, 46, 785, 550, 600, 971, 15, 200, 74, 40, 786, 237, 967, 1022, 478, 295, 166, 591, 842, 631, 282, 979, 980, 990, 630, 853, 961, 428, 348, 145, 41, 794, 192, 826, 320, 792, 773, 336, 992, 847, 376, 754, 61, 319, 752, 539, 614, 919, 106, 433, 526, 388, 388, 482, 354, 1018, 311, 291, 423, 660, 437, 464, 430, 629, 266, 750, 397, 15, 62, 365, 863, 438, 96, 924, 757, 848, 439, 348, 743, 545, 781, 246, 933, 145, 728, 264, 139, 16, 555, 562, 676, 992, 2, 82, 597, 268, 832, 994, 284, 895, 336, 123, 309, 432, 23, 43, 256, 462, 391, 1000, 1007, 148, 222, 916, 293, 950, 156, 432, 966, 712, 995, 618, 680, 997, 700, 254, 242, 509, 224, 526, 380, 560, 649, 689, 992, 672, 732, 225, 110, 99, 201, 93, 247, 423, 1009, 540, 349, 142, 973, 292, 854, 944, 910, 510, 917, 587, 764, 135, 72, 989, 661, 452, 525, 286, 117, 494, 958, 850, 719, 44, 949, 920, 137, 173, 319, 123, 713, 668, 265, 662, 960, 95, 582, 847, 605, 476, 410, 346, 611, 482, 311, 249, 934, 836, 535, 27, 306, 470, 877, 1, 514, 803, 921, 652, 976, 216, 775, 665, 885, 16, 304, 821, 111, 886, 644, 716, 338, 30, 38, 950, 512, 349, 175, 422, 162, 710, 450, 468, 156, 303, 470, 671, 82, 367, 299, 34, 584, 50, 700, 445, 66, 1004, 242, 177, 866, 887, 893, 181, 917, 932, 107, 406}; int tamanho_cache, words_por_linha; double taxa_de_erro; cout<<"Dados de analise de acessos a memoria cache com RAM de 1k: "<<endl; //---Caso 1: tamanho_cache = 128; words_por_linha = 4; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 2: tamanho_cache = 128; words_por_linha = 8; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;

Page 36: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

36  

//---Caso 3: tamanho_cache = 128; words_por_linha = 16; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 4: tamanho_cache = 128; words_por_linha = 32; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //-------------------------------------------------------- //---Caso 5: tamanho_cache = 256; words_por_linha = 4; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 6: tamanho_cache = 256; words_por_linha = 8; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 7: tamanho_cache = 256; words_por_linha = 16; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 8: tamanho_cache = 256; words_por_linha = 32; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //-------------------------------------------------------- //---Caso 9: tamanho_cache = 512; words_por_linha = 4; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 10: tamanho_cache = 512;

Page 37: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

37  

words_por_linha = 8; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 11: tamanho_cache = 512; words_por_linha = 16; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 12: tamanho_cache = 512; words_por_linha = 32; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; return 0; }

Page 38: PIC18F84A e Acesso a memoria cache c++

Microcontrolador  PIC  16F84A  -­‐  DCA-­‐UFRN  

38  

Bibliografia  [1] Cartolano , E., & Avegliano , P. (2004). Experiência Microcontroladores PIC. Escola Politécnica

Universidade de São Paulo, Departamento de Engenharia de Computação, São Paulo. [2] Microchip. Introdução aos Microcontroladores 16F84A . Microship. [3] Microchip. (2013). PIC16F84A Datasheet. Microchip Technology Inc , USA. [4] Oliveira , E., & Fideles, É. MICROCONTROLADORES PIC16F87x. Universidade Católica de

Goiás, Goiás. [5] Stallings, W. (2010). Arquitetura e Organização de Computadores 8a Edição. [6] Stallings, W. Top Level View of Computer Function and Interconnection. In: Computer

Organization and Architecture 8th Edition. [7] Wilmshurst, T. (2006). Designing embedded systems with PIC microcontrollers: principles and

applications. Newnes.