HOME PROJETOS PROGRAMAÇÃO |
Aqui não é detelhado o mecanismo usado pelo hardware para processar desvios no fluxo do programa mas apenas o que é um stack.
O Stack ou pilha é uma região de memória onde dados podem ser armazenados temporariamente numa sequência tal que, o último dado a entrar deverá ser o primeiro a sair. Assim, como numa pilha de pratos, o último prato a ser colocado na pilha será o primeiro prato a sair da pilha. Logo, o primeiro prato que entrou, será o último a sair.
No PIC, o stack é uma região da memória que não faz parte da memória de programa tampouco da memória de dados. Essa memória também não pode ser acessada pelo programa. Sua função básica é auxiliar nas instruções de desvio como CALL ou de interrupções, armazenando os endereços de retorno que, mais tarde, deverão ser utilizados pelas instruções RETURN, RETFIE ou RETLW.
Toda vez que uma instrução CALL faz um desvio para uma subrotina ou uma interrupção causa um desvio para a respectiva rotina ISR, o endereço da instrução seguinte ao CALL ou da interrupção é copiado para topo do stack.
Quando uma instrução RETURN, RETFIE ou RETLW é executada para realizar o retorno da subrotina, o endereço que estava no topo do stack é retirado e colocado no registrador PC fazendo com que o fluxo normal do programa continue na instrução seguinte ao CALL que causou o desvio ou continue na instrução que estava para ser executada quando a interrupção ocorreu.
A família de microcontroladores PIC16F627A/628A/648A possui um stack de 8 níneis, o que limita o número de chamadas para subrotina feitas com instruções CALL aninhadas, isto é, se durante o fluxo normal de um programa fizermos um CALL para uma subrotina e esta fizer um CALL para uma segunda subrotina e, por sua vez, a segunda fizer um CALL para uma terceira e assim por diante, podemos deduzir que o número de chamadas aninhadas será limitado ao tamanho do stack.
Devemos dizer ainda que, quando o stack atingir o limite, o primeiro endereço que havia sido armazenado será descartado e nenhum erro vai ocorrer. Isso é muito perigoso pois jamais será possivel retornar ao ponto original, onde as chamadas começaram, assim, cabe ao programador ficar atento a esse particular.
Os microcontroladores da família PIC18F pussuem stack de 32 bytes, o que dá uma margem maior para usarmos chamadas aninhadas.
H P S P I N Desde 04 de Março de 2010 Atualização: 08 de Oct de 2024 |