Linguagem C, transbordando dados

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Linguagem C, transbordando dados

Mensagempor hemasc » 12 Nov 2013 09:41

Pessoal, não sei dizer bem ao certo o termo, mas estou projetando com o CCS e tem uma variável que em nenhuma parte do programa eu jogo um valor diferente de 0 ou 1, mas do nada aparece um 135 dentro dela.
Eu já li em linguagem C sobre sobrescrever dados ou transbordamento de dados.

Alguém já se deparou com isso?
Sabem algum recurso que devo utilizar para evitar isso?
Editado pela última vez por hemasc em 17 Nov 2013 10:33, em um total de 1 vez.
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP

Re: Linguagem C, transbordando dados

Mensagempor styg » 12 Nov 2013 10:15

Bom eu não uso CCS, parece que tem suas particularidades, não é um C puro né.. Tu tá usando ponteiro ou interrupções no teu código? Se puder postar o código ajuda.
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Re: Linguagem C, transbordando dados

Mensagempor Red Neck Guy » 12 Nov 2013 11:50

Possíveis causas:
Se a variável problemática for local o que pode estar ocasionando isso é o transbordo do cstack. Por exemplo, vc chama uma função aí todas as variáveis locais dela serão criadas nessa pilha. Agora se vc chamar mais memoria for utilizada do que está disponível o contexto de quem chamou antes é bagunçado.


Caso a tua variável seja global o que pode estar acontecendo é algum acesso indireto através de uma operação com ponteiros que está resultando em um valor que você não previu, ou então, o inde ador de alguma matriz quevocê está utilizando esta passando do tamanho dela.
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: Linguagem C, transbordando dados

Mensagempor andre_luis » 12 Nov 2013 18:57

hemasc escreveu:Eu já li em linguagem C sobre sobrescrever dados ou transbordamento de dados.
Alguém já se deparou com isso?


Existem inúmeras possibilidades, mas todas recaem no erro de programação.
É preciso ver o trecho do programa onde está ocorrendo isso.


+++
"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: Linguagem C, transbordando dados

Mensagempor vtrx » 12 Nov 2013 21:05

Se voce utiliza esta variavel como 0 ou 1,deve ser definida como Bolena.
Código: Selecionar todos
#define BOOLEAN short int
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Linguagem C, transbordando dados

Mensagempor Rodrigo_P_A » 12 Nov 2013 21:23

Tem vários problemas na frase: Pic , CCS..... eu já perdi muito tempo com isso, vai por mim.

Na minha opinião o maior problema dos PICS são as ferramentas nada confiáveis, principalmente este CCS.

Dizem que os Hitech são melhores, e parece que a Microchip comprou a linha de compiladores deles, tenta ver se é melhor mesmo.
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Linguagem C, transbordando dados

Mensagempor tcpipchip » 13 Nov 2013 08:16

Ola Rodrigo

Sim, HITECH desde os anos 1990 é considerado excelente para o PIC...a propaganda deles na CIRCUIT CELLAR sempre foi o tamanho do código gerado....!!!!
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Linguagem C, transbordando dados

Mensagempor hemasc » 13 Nov 2013 20:21

Boa noite senhores!

styg, infelizmente não tem como postar o código, mais de 25 mil linhas

Aquino, revisei todas as variáveis novas que criei e nenhuma estoura o valor.

andre_teprom, mesmo se eu definir como boolean ou int1, ainda entrará valor errado nela

Estou eliminando algumas coisas no programa e vendo se chego ao ponto que faz isto ocorrer.

Em relação ao CCS, só encontrei um bug que tive que me virar... foi para utilizar as duas portas seriais de um PIC, mas os novos projetos serão migrados para os compiladores da Microchip, no caso C18 e C30, isso já algo discutido faz tempo hehehe.

Logo que tiver uma resposta eu posto aqui.

Obrigado a todos pelas considerações.
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP

Re: Linguagem C, transbordando dados

Mensagempor vtrx » 13 Nov 2013 21:51

Se sua variável estiver contida em subrotinas,declare como volatile,ainda mais usando CCS que tem 'vida própria'.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Linguagem C, transbordando dados

Mensagempor hemasc » 18 Nov 2013 15:01

pessoal, estou usando um SD card no projeto e notei que quando coloco o mmcsd_init(); no meio do programa, ou seja, dentro da repetição infinita - for( ; ; ) - vira o caos... variáveis ficam malucas... do nada surgem valores sem explicação dentro delas...
me passa a impressão de que se o mmcsd_init();
vou tentar fazer esta inicialização do card no braço e ver o resultado dos bugs sem o comando mmcsd_init();
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP

Re: Linguagem C, transbordando dados

Mensagempor andre_luis » 18 Nov 2013 19:53

hemasc escreveu:p...notei que quando coloco o mmcsd_init()... dentro da repetição infinita...vira o caos...


Essa rotina deve ser executada somente uma vez, e de preferencia no inicio do programa.


+++
"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: Linguagem C, transbordando dados

Mensagempor hemasc » 19 Nov 2013 14:06

sim, executada apenas uma vez... no início do programa...
o problema é, se o SD Card for retirado do equipamento, terei que executá-la novamente... acabei criando algo do tipo

main()
{

inicializa:

mmcsd_init();

for( ; ; )
{
if(sem_sdcard) goto inicializa;
}

ao menos está funcionando....
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP

Re: Linguagem C, transbordando dados

Mensagempor ze2 » 19 Nov 2013 14:49

gozado... parece que fica menos mau assim...
main()
{

for( ; ; )
{
if(sem_sdcard) mmcsd_init();
}

enfim cada mania com seu lôco
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Re: Linguagem C, transbordando dados

Mensagempor hemasc » 19 Nov 2013 15:05

então zé.... assim está dando bug... colocando valores sem sentido dentro das variáveis...
conforme é dito no tópico, notei que ao colocar mmcsd_init() dentro da repetição infinita dá uns bug e fora dela não....
enfim... foi a única solução que bolei... e estou testando...
até o momento, está funfando...
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP

Re: Linguagem C, transbordando dados

Mensagempor ze2 » 19 Nov 2013 15:49

é que os cara mete o pau neste tal de goto. até hoje não sei porquê.
mas bacana!...do jeito que voce fez parece que é meio que como que dar um reset. (a não ser que voce inicializa + coisas acima do inicializa( ) )

enfim, felicidades & sucessos!
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Próximo

Voltar para PIC

Quem está online

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

cron

x