collapse

* Posts Recentes

Resmas de Trotinetes por KammutierSpule
[19 de Fevereiro de 2019, 17:39]


[Material] Compra de material por papamoscas
[15 de Fevereiro de 2019, 17:05]


Motor com travão por Alfredo Garcia
[13 de Fevereiro de 2019, 22:56]


Porta Arduino Baixando tensao por mauriciosouza100
[08 de Fevereiro de 2019, 13:39]


Fábricas de componentes electrónicos em Portugal? por SerraCabo
[07 de Fevereiro de 2019, 13:54]


Sistema embarcado movido a energia solar por Njay
[06 de Fevereiro de 2019, 15:01]


Tentanto reaver alguns conhecimentos de eletronica por filjoa
[06 de Fevereiro de 2019, 02:58]


bma180 avr por vasco
[03 de Fevereiro de 2019, 21:40]


3D Prusa hephestos da BQ por josecarlos
[30 de Janeiro de 2019, 18:43]


Gerador de lixo radioeléctrico III por SerraCabo
[29 de Janeiro de 2019, 19:40]

Autor Tópico: Erro em String  (Lida 964 vezes)

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

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Erro em String
« em: 26 de Dezembro de 2011, 23:50 »
Boa noite,

estou aqui com um erro no meu código que me está a fazer comichão. Estou a usar o AVR Studio.

O código é este:

Código: [Seleccione]
String mensagem = String();
for(int i = 0; i < tamanhoMensagem; i++) mensagem += String(data[i]);
SerialUSB.println("Mensagem: " + mensagem);

A variavel "tamanhoMensagem" neste caso tem 89 e a "data" tem os dados. A funcão "println" da classe "SerialUSB" envia para o computador.

O codigo de cima faz-me reset ao MCU ou outras vezes bloqueia. Porquê? Estou a usar as bibliotecas do Arduino, neste caso a WString.h.

No entanto, se eu mudar o código para:

Código: [Seleccione]
for(int i = 0; i < tamanhoMensagem; i++) SerialUSB.print(data[i]);

ou seja, não guardo em nenhuma variavel e imprimo directamente para o computador, então já dá tudo bem.

Alguem me consegue explicar o porquê disto?

Obrigado.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.602
  • Helpdesk do sitio
Re: Erro em String
« Responder #1 em: 27 de Dezembro de 2011, 03:10 »
DIria que é a stack a rebentar, e ainda por cima a usar a classe String do Arduino...
Para além do facto de que os dois excertos de código não são de todo iguais, tens um ; depois do for no primeiro exemplo, por isso primeiro corre o for, só no fim do for iterar é que é feito o comando do SerialUSB.blablabla, enquanto que no segundo esse SerialUSB.blablabla já está a ser executado dentro do for e a ser iterado.
Arrays de chars e todas as funções nativas para usar strings que o avr-libc/C standart te oferecem não são suficientes?
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: Erro em String
« Responder #2 em: 27 de Dezembro de 2011, 09:34 »
Sim, eu sei que o codigo nao é igual. Era um exemplo de que um funciona e o outro nao.

Já topei que quando faço SerialUSB.println() cujo argumento é uma concatenação de strings ele dá asneira... Ou seja, no caso do primeiro código não posso ter SerialUSB.println("Mensagem: " + mensagem); mas sim em separado, ou seja SerialUSB.print("Mensagem: "); SerialUSB.println(mensagem);.

senso, o avr-libc/C oferece as funçoes uteis para manipular strings tipo concatenação, substring, trim, endsof, etc?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.602
  • Helpdesk do sitio
Re: Erro em String
« Responder #3 em: 27 de Dezembro de 2011, 13:53 »
Avr fanboy