Página 1 de 1

keil no modo IDLE

MensagemEnviado: 18 Ago 2008 11:32
por gafar
Pessoal,
recentemente tive que usar o 89C2051 e AT90S2313 (sei que este não é daqui mas é compativeis pino a pino) no modo idle com um supercap. O problema surgiu que após delisgar e religar, os 2 não retiam informação.
Para o 89C2051 usei o keil e no AT90S2313 o codevision.
Após muita dor de cabeça, a conclusão foi que os compiladores ao gerarem os código fontes, eles incluem subrotinas de limpeza de registros e memória.
Para solucionar isto, no Codevision editei o fonte, apaguei as subrotinas e recompilei com o Studio AVR.
No Keil não tive tanta sorte, tive que refazer o programa do velho assembler por não conhecer o montador que use o arquivo gerado por ele.
E possível eliminarmos isto no C, pois não conheço muito da linguagem. Li em um fórum lá fora, que isto é normal e o cara aconselhava quem fosse usar neste modo deveria fazer em assembler.
Agradeço qualquer dica neste sentido.

MensagemEnviado: 18 Ago 2008 13:03
por helton
O que vc quis dizer com "desligar e ligar" novamente ?...tirar alimentacao, e manter os valores nos registradores (RAM) ?....Nao seria mais conveniente utilizar uma ROM(flash, eeprom) para armazenar esses valores ?

MensagemEnviado: 18 Ago 2008 14:09
por gafar
Helton,
O 89C2051 não tem flash ou EEPROM, outra coisa é a quantidade de liga e desliga é muito grande, coisa de 1 por minuto, durante anos a fio.

MensagemEnviado: 18 Ago 2008 14:50
por helton
entao, vc precisa de um supercap para manter a tensão de alimentacao (5V) no processador...porque (eu acredito) que o fabricante NAO garante os valores da RAM apos um RESET...

MensagemEnviado: 19 Ago 2008 08:12
por barboza
As rotinas de inicialização da RAM no Keil ficam no arquivo startup.a51 que é adcionado ao projeto no momento da criação (se vc escolher).

Como o Helton disse, os valores não são garantidos, mas após o power up da alimentação, a mudança entre IDLE e NORMAL não deve afetar o conteúdo da RAM.

Se esta transição passa pelas rotinas de inicialização, você deverá implementar um flag de teste ou verificar se você consegue saber pelo hardware do MCU quem esta gerando a interrupção de reset e inicializar ou não suas variaveis/RAM.