Página 1 de 1
Memoria RAM dinâmica

Enviado:
09 Jul 2012 09:05
por rafael l
É 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?

Enviado:
09 Jul 2012 10:09
por tcpipchip
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.
Re: Memoria RAM dinâmica

Enviado:
09 Jul 2012 10:15
por diogo_18sp
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.

Enviado:
09 Jul 2012 10:38
por rafael l
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.

Enviado:
09 Jul 2012 11:03
por xultz
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.

Enviado:
09 Jul 2012 15:30
por ze
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ç

Enviado:
09 Jul 2012 16:44
por rafael l
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 subrotinaErro 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.

Enviado:
27 Jul 2012 14:46
por mastk
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).

Enviado:
27 Jul 2012 17:01
por EvandrPic
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.

Enviado:
27 Jul 2012 20:58
por mastk
Minha memoria me traiu, obrigado Evandro


Enviado:
27 Jul 2012 21:13
por EvandrPic
De nada...
mastk escreveu:Minha memoria me traiu, obrigado Evandro


Enviado:
29 Ago 2012 21:59
por jchaves13
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!