A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

PSI3441 – Arquitetura de Sistemas Embarcados

Apresentações semelhantes


Apresentação em tema: "PSI3441 – Arquitetura de Sistemas Embarcados"— Transcrição da apresentação:

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?


Carregar ppt "PSI3441 – Arquitetura de Sistemas Embarcados"

Apresentações semelhantes


Anúncios Google