Ajuda para zerar RAM

Software e Hardware para uC STM

Moderadores: andre_luis, 51

Ajuda para zerar RAM

Mensagempor Guri » 07 Dez 2019 17:55

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...? :)
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Ajuda para zerar RAM

Mensagempor ze » 07 Dez 2019 19:48

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í...
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: Ajuda para zerar RAM

Mensagempor Guri » 07 Dez 2019 20:58

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:
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Ajuda para zerar RAM

Mensagempor brasilma » 08 Dez 2019 12:24

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
" 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

Re: Ajuda para zerar RAM

Mensagempor andre_luis » 08 Dez 2019 14:15

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.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Ajuda para zerar RAM

Mensagempor Guri » 08 Dez 2019 18:01

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:
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Ajuda para zerar RAM

Mensagempor Guri » 08 Dez 2019 18:05

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:
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Ajuda para zerar RAM

Mensagempor Guri » 08 Dez 2019 18:10

SÓ UM ADENDO....

ZÉ, SE VOCÊ NÃO ENTENDE, IMAGINA EU.... :mrgreen:
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Ajuda para zerar RAM

Mensagempor barboza » 08 Dez 2019 22:55

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.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: Ajuda para zerar RAM

Mensagempor Guri » 08 Dez 2019 23:36

Oi barbosa.


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

Vou ver se acho alguma coisa.
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Ajuda para zerar RAM

Mensagempor ze » 09 Dez 2019 17:29

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.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: Ajuda para zerar RAM

Mensagempor Guri » 10 Dez 2019 13:26

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:
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais


Voltar para STMicroelectronics

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes

x