LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: SJD22 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:
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:
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.
-
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?
-
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?
-
Claro que sim, tens isto tudo:
http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html (http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html)