LusoRobótica - Robótica em Português
Software => C/C++ => Tópico iniciado por: dio123 em 20 de Setembro de 2020, 17:45
-
Boa tarde,
Estou a refazer um projeto que tinha feito atmega328 e estou a fazer upgrade e mudar mircro para stm32f103.
Agora cheguei a um ponto que preciso de comprar 2 strings mas não percebo porque não esta a dar no stm32, ou seja rx_buffer tem \r\nOK\r\n zeros até ao fim.
strcmp diz que é diferente já exprimentei strncmp para os primeiro 6 mas diz que não é igual.
uint8_t rx_buffer[120];//buffer uart1
if (strcmp(rx_buffer,"\r\nOK\r\n")== 0) {
LCD_puts(&lcd, "hardware ok");
}
-
A rotina de escrita no LCD esta a funcionar ? :)
Compilei este codigo, funcionou:
#include <iostream>
#include <cstring>
int main()
{
char rx_buffer[120];
strcat(rx_buffer, "\r\nOK\r\n");
if(strcmp(rx_buffer,"\r\nOK\r\n") == 0) {
std::cout << "hardware ok";
}
}
faz debug / dump dos valores em byte de cada posicao na trama recebida
-
A dúvida que fiquei no código original é se tens mesmo os 0x00 após a string. Micros e compiladores diferentes iniciam a memória de forma diferente, e assumir que um array está a zero só porque foi acabado de declarar é perigoso.
No caso do KammuitierSpule o 0x00 está mesmo lá porque usou o strcat e não deixa margem de erro.
-
A dúvida que fiquei no código original é se tens mesmo os 0x00 após a string.
Bem observado. Se for uma variável estática sim, mas no snippet do dio não sabemos se é estática ou local...
-
Boa noite,
Já resolvi a questão de não estar a dar o resultado correcto.
Ontem estive de volta da coisa e o problema era apenas acrescentar char *
ficou assim:
if(strcmp((char *)rx_buffer,"\r\nO1K\r\n") == 0) {