LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: Tyran em 13 de Agosto de 2009, 16:11
-
for ( i=0; i<11; i++)
{
....
if (i==10) break; /* sem isto não sai do ciclo :S */
}
Está-me a acontecer isso, mt estranho...
-
tem k saír.. n precisa do break..
mostra mais do código..
-
Pois sair devia pois devia, mas não está a sair....
estive a analisar o ficheiro lst mas infelizmente não percebo muito de assembly para avr... vou tentar fazer upload do hexadecimal dado pelo avr studio porque o lst desse está muito bem comentado com o assembly em baixo do c e pelo que estive a ver está a fazer a comparação de saída bem...
o código meto já, instalei o 7 e ainda estou a tentar aceder ao pc... senão passo para um pen lol
-
Sim, mostra aí o código todo ;)
Queremos perceber porque dizes que ele não está a saír. O erro pode não estar aí...
-
uint8_t checkSum;
const char message[] = "TiagoCastro";
uint8_t i;
DDRA |= _BV(6);
for ( i=0; i<11; i++)
{
/* grrr */
RF12_send( message[i]);
checkSum+=message[i];
if (i==10)
break;
}
PORTA |= _BV(6);
Como podem ver tenho um led no pina6 para saber quando sai do for... e sem o if (i==10) break; não sai.
-
uh? tão mas tás a programar em k, afinal?
EDIT: de qualquer forma, há uma coisa k n percebo.. tás a somar ao checksum (que é um inteiro) um caracter?? qual é a ideia?
EDIT 2: tenta pôr um delay dps de ligares o tal led.. (não percebo como o tás a fazer, mas deve ter a ver com a linguagem..)
-
Também sou da opinião que o ciclo está ok, não estou a ver o que possa estar a causar essa situação.
-
Em quê como? Aquilo tá em c...
É igual.... alias não, para ser igual teria de ser unsigned char, aquilo também é só uma soma desde que do outro lado seja feita com os tipos levados em consideração até podia ser feita para bits lol
Mas pois, não percebo o que causará, talvez seja algum bug do gcc...
EDIT: oh afinal estava era a ver o ficheiro lss quando tem de ser no lst lol, vou ver então se noto algo
-
já me explicaram k é c arduino com bocados de baixo nível..
já meteste aí o delay dps d'accionar o led, pra ver se ele lá passa ou n?..
-
Nada como submeter a questão a quem poderá resolver: http://gcc.gnu.org/ ;)
-
e se comentares a linha "RF12_send...", e sem o if().. break, já pára?
-
Não...
TigPT vou ver isso quando vier de jantar :)
Também não perdi mt tempo por aqui nisto ainda porque estive a fazer as malas lol mas ao fim de jantar vou ver se descubro, tmb so tenho isso pk depois vou uma semanica de férias lol se já tivesse o avr isp ainda podia perder uns minutinhos por dia da próxima semana :P
EDIT: se ficar assim:
for ( i=0; i<11; i++)
{
/* grrr */
RF12_send( 'T');
checkSum+='T';
}
funciona, pelo que o problema estará no message ?? mas ele envia bem os caracteres até certo ponto mesmo assim...
-
Bom dia TYran
Sem poder afirmar mais, a minha suspeita é que poderá ser problema de memória RAM. O GCC não consegue antecipar quanta memória será utilizada por uma função pelo que se for necessário mais RAM do que a disponível poderá acontecer um override nalgumas posições. É só uma suspeita minha e pode até nem ser esse o caso.
Existe uma rotina para poder determinar o tamanho da RAM que está disponível no micro e se conseguires incluir este código poderá dar uma luz sobre este problema. Se não for, aqui fica uma receita para saber a quantidade de RAM disponível Podes sempre fazer o Hello World com o ciclo for e piscar um LED até completar o ciclo. Se desta forma funcionar é melhor mesmo fazer um report ao ppl do GCC. Espero que ajude :)
// taken from http://forum.pololu.com/viewtopic.php?f=10&t=989#p4218
// modified to run on new Arduino IDE.
extern int __bss_end;
extern void *__brkval;
int get_free_memory()
{
int free_memory;
if((int)__brkval == 0)
free_memory = ((int)&free_memory) - ((int)&__bss_end);
else
free_memory = ((int)&free_memory) - ((int)__brkval);
return free_memory;
}
Boas férias se for esse o caso.
Filipe Valpereiro
http://inmotion.pt (http://inmotion.pt)
-
Mete o teu programa no simulador (AVR Studio da ATMEL, download gratuito) e faz debug passo a passo (abre o ficheiro .ELF), olhando para as variáveis a ver o que tá a acontecer. Esse código só por si não tem nenhum problema.
p.s. "c arduino" não existe, o arduino é programado em C, com uns pózinhos de C++.
-
n precisa de existir pra eu lhe chamar c arduino.. é a minha definição pra essa 'mistela' entre c e c++.. tu chamas-lhe pózinhos, eu chamo c arduino.. :P