Buscar

5. Memória e Desvio - POLI-USP - Engenharia Elétrica

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PSI3441 – Arquitetura de Sistemas Embarcados
Escola Politécnica da Universidade de São Paulo
Prof. Gustavo Rehder – grehder@lme.usp.br
Prof. Sergio Takeo – kofuji@usp.br
Prof. Antonio Seabra – acseabra@lsi.usp.br 
2017
- Registradores, Memória
- Instruções de Desvio
PSI3441 – Arquitetura de Sistemas Embarcados
- Registradores
3
Registradores no ARM Cortex M0+
Arquitetura “Load-Store”
Memória
(Grande e Lenta)
Registrador de 
Propósito Geral
(Pequena e Rápida)
C
o
n
tr
o
le
Operando 2
ALU
Registrador de Dados
Endereço da Memória
Contador de Programa
Registrador de Instrução
Operando 1
Operação
0
1
2
3
4
5
6
7
8
9
R0
R1
R2
R3
R4
Socrative
4
Registradores de Propósito Geral – ARM Cortex M0+
32 Bits
Normalmente usado com 
sistemas operacionais 
Algumas instruções (Thumb –
16 bits) só conseguem acessar 
esses registradores 
Guarda o endereço de 
retorno de uma função
Indica o topo ou 
fundo do Stack
Depende do 
modo de 
operação do 
processador
Indica o endereço da instrução atual. Pode ser lido ou escrito. 
A escrita serve para fazer desvios (loops while, for, if)
5
Program Status Register (xPSR)
• Formado por 3 registradores
– Aplicação (APSR) – Contém flags do ALU (Bits 28-31)
– Interrupção (IPSR) – Contém o número da ISR (Interrupt Service 
Routine) em execução (Bits 0-5)
– Execução (EPSR) – Contém o bit T - estado do Thumb (Bit 24)
6
APSR
• N (Bit 31) – Flag setado resultado Negativo
• Z (Bit 30) – Flag setado resultado Zero ou de 
mesmo valor em uma comparação
• C (Bit 29) – Flag setado “Carry” (vai 1) do 
resultado de soma
• V (Bit 28) – Flag setado oVerflow do resultado 
de soma ou subtração
7
Operações com os Flags do PSR
• ADC Rd, Rn, Op2 ;Rd=Rn+Op2+C Não atualiza flags
• ADCS Rd, Rn, Op2 ; Rd=Rn+Op2+C Atualiza flags
• ADD Rd, Rn, Op2 ;Rd=Rn+Op2 Não atualiza flags
• ADDS Rd, Rn, Op2 ;Rd=Rn+Op2 Atualiza flags
• AND Rd, Rn, Op2 ;Rd=Rn&Op2 Não atualiza flags
• ANDS Rd, Rn, Op2 ;Rd=Rn&Op2 Atualiza flag
• ASR Rd, Rm, Rn ;Rd=Rm>>Rn Não atualiza flags
• ASRS Rd, Rm, Rn ;Rd=Rm>>Rn Não atualiza flags
Outros – BIC/BICS, LSL/LSLS, LSR/LSRS, MOV/MOVS, ORN/ORNS, ORR/ORRS, 
ROR/RORS, RRX/RRXS, RSB/RSBS, SBC/SBCS, 
8
Link Register LR (R14)
• Guarda o valor do Program Counter (PC) quando 
uma função é chamada e permite o retorno da 
função para a próxima instrução a ser executada
PSI3441 – Arquitetura de Sistemas Embarcados
- Memória – RAM (Stack e Heap) e Flash 
(instruções/código, tabelas)
1
0
Memória no ARM Cortex M0+
Memória
(Grande e Lenta)
Registrador de 
Propósito Geral
(Pequena e Rápida)
C
o
n
tr
o
le
Operando 2
ALU
Registrador de Dados
Endereço da Memória
Contador de Programa
Registrador de Instrução
Operando 1
Operação
0
1
2
3
4
5
6
7
8
9
R0
R1
R2
R3
R4
8 Bits
32 Bits Socrative
1
1
Memória no ARM Cortex M0+
32 Bits
8 Bits
1
2
Tipo de dado e alocação na memória
1
3
Onde os dados são armazenados?
Código
1
4
Onde os dados são armazenados?
0x0000 0000
0x1FFF F000
0x0001 FFFF
0x2000 3000
/* Highest address of the user mode stack 
*/
_estack = 0x20003000; /* end of m_data */
__SP_INIT = _estack;
/* Generate a link error if heap and stack 
don't fit into RAM */
__heap_size = 0x00; /* required amount of 
heap */
__stack_size = 0x0400; /* required 
amount of stack */
Definição do Stack e Heap no CodeWarrior
Qual o valor do registrador SP ao ligar o 
µControlador?
1
5
Exemplo do ARM Cortex M0+ no CodeWarrior
Obs.: Mais informação sobre como é feita a divisão de 
memória no arquivo .map da pasta FLASH no CW 
0x0000 0000
0x1FFF F000
0x0001 FFFF
0x2000 3000
1
6
O que é o Stack?
• LIFO – Last-in First-out
• Armazenagem temporária
– Dados locais
– Endereços de retorno de funções
– Passar parâmetros entre funções
• Tamanho dos dados é pré-determinado
• Acesso rápido
• Gerenciamento de memória automático
• Instruções Push e Pop
Dados 
Existem só 
enquanto a 
função está 
sendo 
executada
1
7
Push e Pop
• push {R1} 
STR R1,[R13] ;armazena R1 no stack,
SUB R13,R13,#4 ;e decrementa Stack Pointer (R13) em 4 bytes 
• pop {R1}
ADD R13,R13,#4 ; incrementa SP
LDR R1, [R13] ;e carrega o valor do topo do stack para R1 
SP
SP
SP
SP
SP
SP
SP
SP
SP
SP (R13)
1
8
O que acontece?
Declaração de vetores ou matrizes muito grandes
char hugeArray[1000000000000000];
Operações Recursivas
int foo(int x)
{ 
if (x <= 0) return x;
return foo(x - 1); 
} 
Ou
1
9
Para que usar o Heap?
• Armazenagem de dados
– Variáveis globais
• Não é gerenciada automaticamente
• Alocação de memória é feita utilizando 
malloc() ou calloc()
• Memória alocada pode ser redimensionada 
utilizando realloc()
• É necessário desalocar a memória usando free()
• Memória pode se tornar fragmentada
PSI3441 – Arquitetura de Sistemas Embarcados
2017
- Instruções de Desvio
2
1
Branch (B) – Desvio incondicional
• B <Rótulo>
– Executa um desvio do fluxo sequencial das instruções
– Rótulo aponta para um endereço a partir do qual o 
programa continuará, isto é, o endereço do rótulo é 
copiado no Program Counter (PC)
– O endereço do desvio deve estar próximo (2 kb)
2
2
Branch (B) – Desvio incondicional
Exemplo:
MOV R0, #0 ; coloca 0 em R0
MAIN: ; Rótulo MAIN
SUB SP, SP,#4 ; Decrementa Stack Pointer
STR R0, [SP] ; Armazena R0 no Stack
B FUNC ; Desvio para função FUNC. PC Endereço de FUNC
MOV R1, #3 ; coloca 3 em R1
FUNC: ; Rótulo FUNC
ADD R0, R0, #1 ; Soma 1 ao valor de R0 e armazena em R0
B MAIN ; Desvio para MAIN
O que acontece com esse código? Qual o valor de R1? Stack Overflow !!
R1?
2
3
Branch and Link (BL) – Desvio incondicional 
com link de retorno
• BL <Rótulo>
– Executa um desvio do fluxo sequencial das instruções
– Rótulo aponta para um endereço a partir do qual o 
programa continuará, isto é, o endereço do rótulo é 
copiado no Program Counter (PC)
– Antes do desvio, o endereço do PC é copiado para o Link 
Register (LR)
– O endereço do desvio deve estar próximo (16 Mb)
2
4
Branch and Exchange (Bx) – Desvio incondicional
• Bx Rn
– Executa um desvio do fluxo sequencial das instruções
– O registrador Rn aponta para um endereço a partir do qual 
o programa continuará, isto é, o endereço do Rn é copiado 
no Program Counter (PC)
2
5
Exemplo: BL e Bx
O que acontece com esse código? Qual o valor de R1?
Exemplo:
MOV R0, #0 ; coloca 0 em R0
MAIN: ; Rótulo MAIN
SUB SP, SP,#4 ; Decrementa Stack Pointer
STR R0, [SP] ; Armazena R0 no Stack
BL FUNC ; RL =PC e PC Endereço de FUNC
MOV R1, #3 ; coloca 3 em R1
FUNC: ; Rótulo FUNC
ADD R0, R0, #1 ; Soma 1 ao valor de R0 e armazena em R0
Bx RL ; Desvio para MAIN Erro – Falta de instrução!!
R1=3
2
6
Exemplo: BL e Bx
Exemplo:
MOV R0, #0 ; coloca 0 em R0
MAIN: ; Rótulo MAIN
SUB SP, SP,#4 ; Decrementa Stack Pointer
STR R0, [SP] ; Armazena R0 no Stack
BL FUNC ; RL =PC e PC Endereço de FUNC
MOV R1, #3 ; coloca 3 em R1
LOOP: ; Rótulo LOOP
B LOOP ; Loop infinito
FUNC: ; Rótulo FUNC
ADD R0, R0, #1 ; Soma 1 ao valor de R0 e armazena em R0
Bx RL ; Desvio para MAIN
2
7
Exercício
• Comente cada linha do código e mostre como mudam os 
registradores e o stack ao executar este programa. Otimize o 
programa usando PUSH e POP.
LDR R13,=0xFF8 
LDR R0,=0x125 
LDR R1,=0x144 
MOV R2,#0x56
BL FUNC
ADD R3,R0,R1
ADD R3,R3,R2LOOP:
B LOOP
FUNC:
STR R0,[R13]
SUB R13,R13,#4
STR R1,[R13]
SUB R13,R13,#4
STR R2,[R13] 
SUB R13,R13,#4
MOV R0,#0 
MOV R1,#0 
MOV R2,#0
ADD R13,R13,#4
LDR R2,[R13]
ADD R13,R13,#4
LDR R1,[R13]
ADD R13,R13,#4
LDR R0,[R13]
BX LR
2
8
Auxílio
• R13  Stack Pointer (SP)
• R14  Link Register (LR)
• BL Program Counter (PC) = LR antes do desvio
• Bx Rn Copia o valor de Rn para PC
• push {R1} equivalente a: STR R1,[R13] 
SUB R13,R13,#4
• pop {R1} equivalente a: ADD R13,R13,#4
LDR R1, [R13] 
2
9
Push e Pop realmente otimizam o código?
• Quando ciclo de máquina cada instrução usa?
• http://infocenter.arm.com/help/index.jsp?topic=/c
om.arm.doc.set.cortexm/index.html

Continue navegando