Memoria RAM dinâmica

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Memoria RAM dinâmica

Mensagempor rafael l » 09 Jul 2012 09:05

É recomendável que se use variáveis locais em bloco de programa, ou seja, uma subrotina, afim de se economizar memoria que no caso seriam alocadas dinamicamente.
Eu programo em Basic, entendo pouco de ASM, analisei a saída em ASM, mas pelo que notei as variáveis locais reservam um espaço na memoria como as variáveis globais ao meu entender não apresenta nenhuma vantagem.
Gostaria de saber como funciona a memoria RAM de PIC.
É como em um PC, onde o programa é carregado na RAM durante a execução?
Pelo que li, a memoria RAM do PIC seria usada para variáveis enquanto que memoria flash para instruções, estaria certo esta afirmação?
rafael l
Bit
 
Mensagens: 8
Registrado em: 19 Jun 2012 21:19

Mensagempor tcpipchip » 09 Jul 2012 10:09

Sim, pq o PIC(12)(16)(18) nao tem STACK para parametros ou preservar contexto...apenas para guardar endereço de retorno ou apontar para tabelas.
Tem como colocar uma memoria externa...e dar um jump para lá....(microcontroller mode)...mas...pode ser uma 6264, por exemplo....para ligar o add bus, data bus e control bus.
Rodar externamente, teoricamente é mais rapido do que chamar da EPROM ou FLASH interna.
Corrijam me se eu estiver errado.
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Memoria RAM dinâmica

Mensagempor diogo_18sp » 09 Jul 2012 10:15

Memória RAM:
É um tipo de memória que pode ser gravada, apagada, regravada, mas, que tem um porém, desligando a alimentação dela todos os dados se perdem. É muito utilizada para gravar informações temporárias que serão utilizadas em um programa. Não mantém a gravação sem alimentação.



Memória FLASH: É a suprasumo das memórias, mais rápida de gravação e a regravação muito mais fácil. Permite uma infinidade de usos. Desde a gravação de áudio e vídeo digitalizado até um programa em um PIC. Mantém os dados e a gravação mesmo sem alimentação.
diogo_18sp
Byte
 
Mensagens: 117
Registrado em: 14 Jan 2008 18:12
Localização: Amparo ,SP

Mensagempor rafael l » 09 Jul 2012 10:38

Olhei melhor a saída em ASM, realmente as variáveis locais são declaradas igual as globais (reserva um espaço da RAM do PIC na inicialização), a diferença é que e zerada (CLRF) no inicio da subrotina.
Acredito que unica forma de economizar memoria e reutilizar a variável evitando uma nova declaração.
rafael l
Bit
 
Mensagens: 8
Registrado em: 19 Jun 2012 21:19

Mensagempor xultz » 09 Jul 2012 11:03

Rafael, a diferença entre uma variável global e local, é que a global aloca posição da RAM, e fica alocada prá sempre. A local, é alocada na RAM, porém quando a rotina é encerrada, o compilador pode alocar aquele endereço para outra variável em outra função. Note que ele pode, nem sempre ele faz isso, é comum ele só fazer quando não tiver mais memória prá usar.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor ze » 09 Jul 2012 15:30

os pic10/12/16 que (acho que) conheço não rodam na memória externa. bom pelo menos até hoje de manhã. Como tudo evolui tão rápido...
Algo em comum. Também comecei com basic nos anos 80 e assembly na seqüência (trema para sempre). No entanto, em minha insignificância e ignorância, creio não ser esta a linguagem ideal para mc´s...As duas. Espero que não espere 30 anos para percebê-lo. Ah e se eu fosse voce , nem lia o comentário acima. Considere o do xuts.
abç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor rafael l » 09 Jul 2012 16:44

xultz escreveu:Rafael, a diferença entre uma variável global e local, é que a global aloca posição da RAM, e fica alocada prá sempre. A local, é alocada na RAM, porém quando a rotina é encerrada, o compilador pode alocar aquele endereço para outra variável em outra função. Note que ele pode, nem sempre ele faz isso, é comum ele só fazer quando não tiver mais memória prá usar.


Escrevendo de outra forma, somente ira reutilizar uma posição de uma variável local caso seja necessário.

Olhei a saída em ASM e as variáveis globais tem a diretiva (EQU), mas não é usada no programa, as variáveis locais não tem a diretiva, Acredite que assim o algorítimo do compilador faz a otimização caso seja necessário.

Eu escrevi no tópico anterior:
zerada (CLRF) no inicio da subrotina
Erro meu pois eu estava com "iniciar variáveis" ativo, variáveis locais não são zeradas no inicio de uma subrotina.

Também comecei com basic nos anos 80 e assembly na seqüência (trema para sempre). No entanto, em minha insignificância e ignorância, creio não ser esta a linguagem ideal para mc´s...As duas. Espero que não espere 30 anos para percebê-lo.

Sim ja fiquei tentado a mudar pra ASM, embora tenha pouca experiencia nesta linguagem deve se levar muito tempo para resolver um problema em ASM, na minha atividade profissional isso não seria bom. No meu ponto de vista não existe uma linguagem ideal para MCU.
rafael l
Bit
 
Mensagens: 8
Registrado em: 19 Jun 2012 21:19

Mensagempor mastk » 27 Jul 2012 14:46

Ola Rafael.

Ate aonde eu saiba o unico PIC que pode ter memoria externa sao PIC18, PIC24 ou PIC32.

As familias citadas sao todas MCU e nao tem barramento externo.

A instrucao CLRF, se nao me falha a memoria, faz 3 anos que nao toco em PIC e quero que esse tempo aumente, apaga os Flags da CPU, flag que indicam CARRY em um instrucao de soma, subtracao, shift e similares, zero e outros. Essa intrucao eh chamada a fim que os novos calculos e operacao nao sejam bagucando em funcao dos execultados anteriormente.

Alocar variaveis locais eh uma boa ideia e pode ser feito, se estiver programando em C ou liguagens de mais alto nivel.

As primeiras perguntas:

NAO, o codigo NAO eh carregado na RAM.
Sim, um barramento para dados apenas RAM e um apenas para INTRUCOES (FLASH).
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor EvandrPic » 27 Jul 2012 17:01

A instrução CLRF apaga o registrador declarado após a instrução e seta o flag Z (1 ->Z).
CLRF: Limpa o registrador F.

Exemplo:
Código: Selecionar todos
 CLRF   PORTA   ; Antes da instrução o PORTA = B'10011110'
                ; Após a instrução ficou PORTA = B'00000000' e Z=1

As instruções BSF e BCF é que são usadas para setar e resetar flags, respectivamente.
BSF: Seta um bit do registrador F.
BCF: Limpa um bit do registrador F.

Exemplo:
Código: Selecionar todos
 BCF   STATUS,C   ; Limpa o carry ( 0 -> C)



mastk escreveu:A instrucao CLRF, ... , apaga os Flags da CPU, flag que indicam CARRY em um instrucao de soma, subtracao, shift e similares, zero e outros. Essa intrucao eh chamada a fim que os novos calculos e operacao nao sejam bagucando em funcao dos execultados anteriormente.
EvandrPic
Dword
 
Mensagens: 2116
Registrado em: 31 Mar 2010 15:05

Mensagempor mastk » 27 Jul 2012 20:58

Minha memoria me traiu, obrigado Evandro :o
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor EvandrPic » 27 Jul 2012 21:13

De nada... :wink:
mastk escreveu:Minha memoria me traiu, obrigado Evandro :o
EvandrPic
Dword
 
Mensagens: 2116
Registrado em: 31 Mar 2010 15:05

Mensagempor jchaves13 » 29 Ago 2012 21:59

rafael l escreveu:Olhei melhor a saída em ASM, realmente as variáveis locais são declaradas igual as globais (reserva um espaço da RAM do PIC na inicialização), a diferença é que e zerada (CLRF) no inicio da subrotina.
Acredito que unica forma de economizar memoria e reutilizar a variável evitando uma nova declaração.

Ainda estou a pesquisar mcus, sou da época de 8085/Z80, mas esse comportamento deve ser basic. Quanto à RAM dinâmica é "coisa de hardware", mas não se opõe à flash como diro acima, cada uma tem seu "nicho", não se pode *ainda* usar flash como memória de dados em um programa, há boatos de uma nova flash/RAM, mas com outro nome!
jchaves13
 
Mensagens: 1
Registrado em: 22 Nov 2010 10:33


Voltar para PIC

Quem está online

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

cron

x