collapse

* Links de Robótica

* Posts Recentes

Ideias para construir um quadrúpede simples por Njay
[Hoje às 03:04]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]


Amplificador audio por beirao
[12 de Novembro de 2017, 23:43]


Power_OK Enermax por edeweld
[12 de Novembro de 2017, 17:15]


Driver motor por beirao
[11 de Novembro de 2017, 17:40]


Preciso de uma fonte de corrente constante ? por samc
[09 de Novembro de 2017, 14:18]


Pressoestato 0-10V por artur36
[07 de Novembro de 2017, 23:22]

Autor Tópico: estranho...  (Lida 2678 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
estranho...
« em: 13 de Agosto de 2009, 16:11 »
Código: [Seleccione]
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...

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.300
Re:estranho...
« Responder #1 em: 13 de Agosto de 2009, 16:29 »
tem k saír.. n precisa do break..

mostra mais do código..

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re:estranho...
« Responder #2 em: 13 de Agosto de 2009, 16:57 »
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

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re:estranho...
« Responder #3 em: 13 de Agosto de 2009, 17:22 »
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í...

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re:estranho...
« Responder #4 em: 13 de Agosto de 2009, 17:44 »
Código: [Seleccione]
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.

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.300
Re:estranho...
« Responder #5 em: 13 de Agosto de 2009, 17:47 »
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..)
« Última modificação: 13 de Agosto de 2009, 17:50 por ricardo-reis »

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.235
    • Tiago Rodrigues
Re:estranho...
« Responder #6 em: 13 de Agosto de 2009, 17:59 »
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.

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re:estranho...
« Responder #7 em: 13 de Agosto de 2009, 18:07 »
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
« Última modificação: 13 de Agosto de 2009, 18:09 por Tyran »

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.300
Re:estranho...
« Responder #8 em: 13 de Agosto de 2009, 18:09 »
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?..

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.235
    • Tiago Rodrigues
Re:estranho...
« Responder #9 em: 13 de Agosto de 2009, 18:10 »
Nada como submeter a questão a quem poderá resolver: http://gcc.gnu.org/ ;)

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.136
    • Tróniquices
Re:estranho...
« Responder #10 em: 13 de Agosto de 2009, 19:23 »
e se comentares a linha "RF12_send...", e sem o if().. break, já pára?

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re:estranho...
« Responder #11 em: 13 de Agosto de 2009, 19:52 »
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:
Código: [Seleccione]
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...
« Última modificação: 13 de Agosto de 2009, 21:48 por Tyran »

Offline inmotion.pt

  • Mini Robot
  • *
  • Mensagens: 23
Re:estranho...
« Responder #12 em: 14 de Agosto de 2009, 05:19 »
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 :)

Código: [Seleccione]
// 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

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.136
    • Tróniquices
Re:estranho...
« Responder #13 em: 14 de Agosto de 2009, 09:26 »
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++.

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.300
Re:estranho...
« Responder #14 em: 14 de Agosto de 2009, 12:08 »
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