Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouLuís Sampaio Castro Alterado mais de 6 anos atrás
1
PSI3441 – Arquitetura de Sistemas Embarcados
Registradores, Memória Instruções de Desvio Escola Politécnica da Universidade de São Paulo Prof. Gustavo Rehder – Prof. Sergio Takeo – Prof. Antonio Seabra – 2017
2
PSI3441 – Arquitetura de Sistemas Embarcados
Registradores
3
Registradores no ARM Cortex M0+ Arquitetura “Load-Store”
Socrative Memória (Grande e Lenta) Registrador de Propósito Geral (Pequena e Rápida) Controle Operando 2 ALU Registrador de Dados Endereço da Memória Contador de Programa Registrador de Instrução Operando 1 Operação R0 R1 R2 R3 R4 1 2 3 4 5 6 7 8 9
4
Registradores de Propósito Geral – ARM Cortex M0+
Algumas instruções (Thumb – 16 bits) só conseguem acessar esses registradores 32 Bits Indica o topo ou fundo do Stack Normalmente usado com sistemas operacionais Depende do modo de operação do processador Guarda o endereço de retorno de uma função 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
9
PSI3441 – Arquitetura de Sistemas Embarcados
Memória – RAM (Stack e Heap) e Flash (instruções/código, tabelas)
10
Memória no ARM Cortex M0+
32 Bits Socrative 8 Bits Memória (Grande e Lenta) Registrador de Propósito Geral (Pequena e Rápida) Controle Operando 2 ALU Registrador de Dados Endereço da Memória Contador de Programa Registrador de Instrução Operando 1 Operação R0 R1 R2 R3 R4 1 2 3 4 5 6 7 8 9
11
Memória no ARM Cortex M0+
32 Bits 8 Bits
12
Tipo de dado e alocação na memória
13
Onde os dados são armazenados?
Código
14
Onde os dados são armazenados?
0x 0x1FFF F000 0x0001 FFFF 0x Definição do Stack e Heap no CodeWarrior /* Highest address of the user mode stack */ _estack = 0x ; /* 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 */ Qual o valor do registrador SP ao ligar o µControlador?
15
Exemplo do ARM Cortex M0+ no CodeWarrior
0x1FFF F000 0x0001 FFFF 0x Obs.: Mais informação sobre como é feita a divisão de memória no arquivo .map da pasta FLASH no CW
16
O que é o Stack? Tamanho dos dados é pré-determinado Acesso rápido
Dados Existem só enquanto a função está sendo executada 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
17
Push e Pop push {R1} pop {R1}
SP SP SP SP SP (R13) SP SP SP SP push {R1} STR R1,[R13] ;armazena R1 no stack, SUB R13,R13,# ;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
18
O que acontece? Declaração de vetores ou matrizes muito grandes
char hugeArray[ ]; Ou Operações Recursivas int foo(int x) { if (x <= 0) return x; return foo(x - 1); }
19
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
20
PSI3441 – Arquitetura de Sistemas Embarcados
Instruções de Desvio 2017
21
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)
22
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?
23
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)
24
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)
25
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 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 O que acontece com esse código? Qual o valor de R1?
26
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
27
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 STR R0,[R13] SUB R13,R13,#4 STR R1,[R13] SUB R13,R13,#4 STR R2,[R13] LDR R0,=0x125 LDR R1,=0x144 SUB R13,R13,#4 MOV R0,#0 MOV R2,#0x56 BL FUNC ADD R3,R0,R1 ADD R3,R3,R2 LOOP: 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 B LOOP FUNC:
28
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]
29
Push e Pop realmente otimizam o código?
Quando ciclo de máquina cada instrução usa?
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.