Stack do 8051

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Stack do 8051

Mensagempor mastk » 09 Dez 2006 23:59

Ola pessoal, estudei o 8051 nesse semestre na escola, mas uma coisa q ficou em duvida é o stack dele, como funciona? tipo vc só tem um nivel? se ele aloca na RAM o PC, deve ocupar 2 bytes certo? como posso fazer pra apagar um nivel da pilhar? ou gerar um stack overflow proposital e não sobre ecrita em registradores q estão sendo utilizados?
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor Ricardo_Franco » 10 Dez 2006 11:23

O SP (Stack Pointer), é apenas um apontador de endereços, utilizado para quando houver um desvio do programa, seja no código do programa (instrução LCALL), seja por interrupção, (interna ou externa). o PC (Program Counter) saber exatamente onde ele estava antes do evento. o SP é um registrador de apenas um Byte, mas reserva dois endereços da RAM (2 Bytes), pois o PC é um registrador de 16 bits (2 Bytes). A pilha do SP é a propria memoria RAM Se por acaso for manipulado um endereço em que o SP guardou informações o mesmo não sabera voltar corretamente ao ponto da chamada de desvio de programa. O comando ORG (origem) pode definir a partir de que ponto o SP começa a acumular os endereços, assim desvinado dos registradores mais usados (R0, R1 ... R7 do BANK 0)

Se não me engano é mais ou menos dessa forma que ele funciona.
espero ter ajudado

Ricardo Franco
Ricardo_Franco
Byte
 
Mensagens: 305
Registrado em: 11 Out 2006 20:53
Localização: Campinas - SP

Mensagempor brasilma » 10 Dez 2006 14:22

Olá Mast,

Como o colega já esplicou o Stack é apenas um indice que aponta para a memória RAM onde são guardados os endereços de retorno das subrotinas (CALL / RET) e outros valores que não se deseja que sejam modificados (PUSH / POP).

Quem define sua posição é o programador, no caso do assembler, ou o próprio compilador, no caso do C, Basic, Pascal.

Ele pode ter quantos níveis a memória permitir.

Quando ele armazena um endereço de retorno, 2 bytes são utilizados, pois o PC é um registrador de 16bits.

Não é necessário apagar um nível da pilha, basta retroceder o endereço do Stack em 2 bytes.

Overflow ocorre qdo o endereço da pilha excede o limite que determinou para ele, sobrescrevendo dados ou atingindo o fim da RAM.

Abraços,
MArcos.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor gabriel_paz » 12 Dez 2006 00:06

Oi Mastk.

Para iniciar a pilha de outro endereço, pois no processo de RESET é carregado no registrador SP 07H, basta fazer o seguinte:

MOV SP,#XXH, lembrando que esse registrador aponta apenas a RAM interna do 8051, e que não existe nenhum recurso pronto de harware para sinalização do estouro da pilha.

Um abraço.

Gabriel
Avatar do usuário
gabriel_paz
Bit
 
Mensagens: 38
Registrado em: 11 Out 2006 21:48
Localização: São Paulo - Brasil

Mensagempor mastk » 12 Dez 2006 10:30

Valeu, galera. Interresante q esse meodo parece bem melhor q ter o stack a parte.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor fabiorike » 28 Dez 2006 15:12

Boa Tarde pessoal,
Eu estou tentando usar a memoria Ram do AT89S8253.
Eu estou gravando um texto nele, mas nao hora de ler o começo sair um uns caracteres nada a ver e depois começa o texto, o meu texto tem os exatos 256bytes, eu posso usar os 256bytes ou devo deixar alguns bytes para o PC, e como eu posso fazer isso?
Obrigado
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor zachary » 28 Dez 2006 15:57

Olá Fabio!

Se no seu programa você usa instruções de desvio tipo CALL, manipulação de stack tipo PUSH/POP, rotinas de interrupção ou usa os registradores R0...R7, voce precisa reservar as devidas areas da memória RAM interna ou os valores lá gravados serão alterados quando você usar algum dos recursos que citei anteriormente.

Não conheco os recursos do AT89S8253, mas alguns controladores possuem memória RAM EXTERNA no próprio chip (Ex: AT89C51ED2). Caso o micro que você está usando tenha esse recurso, sugiro que você use essa memória.

Espero ter ajudado.

ZAC
Avatar do usuário
zachary
Nibble
 
Mensagens: 87
Registrado em: 08 Dez 2006 12:22
Localização: Porto Alegre - RS

Mensagempor fabiorike » 28 Dez 2006 16:20

Olá Zachary, Boa Tarde!

Obrigado pela dica, é isso mesmo pois eu estou usando alguns call e praticamente todos os registradores, eu vou dar uma olhada nete controlador que vc falou.
Obrigado
Ate mais
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x