Página 1 de 2
Linguagem C, transbordando dados

Enviado:
12 Nov 2013 09:41
por hemasc
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?
Re: Linguagem C, transbordando dados

Enviado:
12 Nov 2013 10:15
por styg
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.
Re: Linguagem C, transbordando dados

Enviado:
12 Nov 2013 11:50
por Red Neck Guy
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.
Re: Linguagem C, transbordando dados

Enviado:
12 Nov 2013 18:57
por andre_luis
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.
+++
Re: Linguagem C, transbordando dados

Enviado:
12 Nov 2013 21:05
por vtrx
Se voce utiliza esta variavel como 0 ou 1,deve ser definida como Bolena.
- Código: Selecionar todos
#define BOOLEAN short int
Re: Linguagem C, transbordando dados

Enviado:
12 Nov 2013 21:23
por Rodrigo_P_A
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.
Re: Linguagem C, transbordando dados

Enviado:
13 Nov 2013 08:16
por tcpipchip
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....!!!!
Re: Linguagem C, transbordando dados

Enviado:
13 Nov 2013 20:21
por hemasc
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.
Re: Linguagem C, transbordando dados

Enviado:
13 Nov 2013 21:51
por vtrx
Se sua variável estiver contida em subrotinas,declare como volatile,ainda mais usando CCS que tem 'vida própria'.
Re: Linguagem C, transbordando dados

Enviado:
18 Nov 2013 15:01
por hemasc
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();
Re: Linguagem C, transbordando dados

Enviado:
18 Nov 2013 19:53
por andre_luis
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.
+++
Re: Linguagem C, transbordando dados

Enviado:
19 Nov 2013 14:06
por hemasc
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....
Re: Linguagem C, transbordando dados

Enviado:
19 Nov 2013 14:49
por ze2
gozado... parece que fica menos mau assim...
main()
{
for( ; ; )
{
if(sem_sdcard) mmcsd_init();
}
enfim cada mania com seu lôco
Re: Linguagem C, transbordando dados

Enviado:
19 Nov 2013 15:05
por hemasc
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...
Re: Linguagem C, transbordando dados

Enviado:
19 Nov 2013 15:49
por ze2
é 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!