Página 1 de 1

Ajuda para zerar RAM

MensagemEnviado: 07 Dez 2019 17:55
por Guri
Pessoal, não estou conseguindo zerar a RAM, usando C. Em ASM é tranquilo, mas em C não estou conseguindo desenvolver o conceito.

Eu quero que ao iniciar a rotina, seja feita a limpeza de todas as posições da RAM, como eu faço isso em C...? :)

Re: Ajuda para zerar RAM

MensagemEnviado: 07 Dez 2019 19:48
por ze
Tenta com uma das mais sinistras entidades do c: o ponteiro - que até hoje não entendo direito
Código: Selecionar todos
unsigned long *ponteiro=0x8000; //faz de conta que a ram vai de 0x4000 a 0x8000: consulte o d.s. do seu mc
while(ponteiro-->0x3fff) *ponteiro=0x00; // ou &ponteiro ... lembra que não entendo?

Vai cair no problema que ponteiro faz parte da ram. Talvez ela tenha que ser algo como tipo absolute - que entendo ainda menos - algo como fixo num endereço área de memória não manipulável pela rotina. Pensa aí...

Re: Ajuda para zerar RAM

MensagemEnviado: 07 Dez 2019 20:58
por Guri
Obrigado zé...pela dica.

Eu havia tentando fazer algo com os ponteiros, mas também não entendi direito como enviar um dado para o ponteiro, ...

Meio confuso,

Vou tentar entender e testar sua dica, apesar de eu também esta boiando... :lol:

Re: Ajuda para zerar RAM

MensagemEnviado: 08 Dez 2019 12:24
por brasilma
Depende das circunstâncias da limpeza, faz parte de todos meus programas em ASM uma limpeza inicial como abaixo (simples e rápido), em C pode ser similar!

; Limpa IRAM
MOV R0,#7FH
CLR A
CLRAM: MOV @R0,A
DJNZ R0,CLRAM

Re: Ajuda para zerar RAM

MensagemEnviado: 08 Dez 2019 14:15
por andre_luis
Guri escreveu:Eu quero que ao iniciar a rotina, seja feita a limpeza de todas as posições da RAM, como eu faço isso em C...? :)


Se colocar todas as variaveis dentro de um struct, ao menos no GCC tem uma diretiva de compilação que os alinha inline, e assim com um poucos comandos pode pegar o tamanho desse struct, e zerar da variavel da primeira posição até a ultima.

Re: Ajuda para zerar RAM

MensagemEnviado: 08 Dez 2019 18:01
por Guri
aluis-rcastro, dica interessante.

Vou testar hoje as duas dicas dos amigos...apesar do struct se ter que declarar todas as variáveis na estrutura é algo massante...

Se eu não estou enganado, em assembler bastaria pegar o inicio da RAM e o FINAL dela e varrer com um loop do inicio ao fim colocando ZERO ou outro valor e pronto...
Se ainda me lembro era algo do tipo endereçamento direto...

Eu tentei arranhar, antes de pedir ajuda aqui, utilizando os ponteiros, porém não entendi como se enviar um DADO para o endereço do ponteiro, apenas entendi como se LÉ o dado no endereço do ponteiro ou o seu próprio endereço, porém enviar o DADO para o endereço do ponteiro, não entendi...

:oops:

Re: Ajuda para zerar RAM

MensagemEnviado: 08 Dez 2019 18:05
por Guri
Eu acho que o "brasilma" esta utilizando um ponteiro e endereçando os dados para as posições do ponteiro.

O problema é justamente esse, eu não consegui compreender como enviar um dado para a posição do ponteiro! :evil:

Re: Ajuda para zerar RAM

MensagemEnviado: 08 Dez 2019 18:10
por Guri
SÓ UM ADENDO....

ZÉ, SE VOCÊ NÃO ENTENDE, IMAGINA EU.... :mrgreen:

Re: Ajuda para zerar RAM

MensagemEnviado: 08 Dez 2019 22:55
por barboza
Guri escreveu:Pessoal, não estou conseguindo zerar a RAM, usando C. Em ASM é tranquilo, mas em C não estou conseguindo desenvolver o conceito.

Eu quero que ao iniciar a rotina, seja feita a limpeza de todas as posições da RAM, como eu faço isso em C...? :)


Qual compilador/IDE esta usando?
Normalmente há uma diretiva nos parâmetros de compilação que já habilita tal a criação e configuração de tal rotina de limpeza de toda a RAM.

Re: Ajuda para zerar RAM

MensagemEnviado: 08 Dez 2019 23:36
por Guri
Oi barbosa.


Eu estou utilizando o mikroc pro pic, boa pedida...

Vou ver se acho alguma coisa.

Re: Ajuda para zerar RAM

MensagemEnviado: 09 Dez 2019 17:29
por ze
Guri escreveu:o mikroc pro pic,
.

Está contaminando o forum st :x
Penso que nem precisar zerar nada. A não ser que o sistema exija isso MESMO. Caminho do meio, vc pode zerar apenas aquelas que realmente precisa, algo como
unsigned char buffer[1024];
//...
for (i=0;i<1024;i++) buffer[i]=0;

Veja nos #includes do seu compilador como ele trata a ram. Algo como
static PORTA @0xAAAA
pra vc ter um referência de onde estão as coisas

Mas caso não deseje portar pra um mc de verdade, cogite fazer em asm mesmo.

Sobre ponteiros, me fez lembrar que certa feita o amigo @xults criou um algoritimo surreal. Baseando nele, fiz esta função pra gravar o valor de uma variável float na eeprom. Se ele achar que deve, deve participar
Código: Selecionar todos
float float0;
float *ponteiro;
 
ponteiro = &float0;
 
float0=3.141592;

//grava os pedaços na eeprom
eepw(0,*((unsigned char *)(ponteiro)+0));
eepw(1,*((unsigned char *)(ponteiro)+1));
eepw(2,*((unsigned char *)(ponteiro)+2));
eepw(3,*((unsigned char *)(ponteiro)+3));

float0=0; //destroi só pra teste

//reconstroi float0 a partir dos pedaços da eeprom
*((unsigned char *)ponteiro + 0)=eepr(0);
*((unsigned char *)(ponteiro)+1)=eepr(1);
*((unsigned char *)(ponteiro)+2)=eepr(2);
*((unsigned char *)(ponteiro)+3)=eepr(3);
 
pi=float0; //taí


Nem pense em entender e pense ainda menos em me pedir pra explicar. Só sei que me lembro vagamente que deu certo. Se algum dia entender, queira fazer a gentileza de me explicar com riqueza de detalhes e se puder, com desenhos, videos preferencialmente em 3d

Ah e fiz também com outras ainda sinistras entidades struct e union. Esta menos difícil de entender mas está fora do escopo do tópico.

Re: Ajuda para zerar RAM

MensagemEnviado: 10 Dez 2019 13:26
por Guri
Então, eu também estou tentando entender essa coisa de ponteiros...confesso que estou frio frio...

No momento vou fazer da forma tosca: x=0;....até entender uma forma melhor... :idea:

:cry: