Buscar una cadena coincidente en la otra cadena

-3

Tengo un problema con la función strstr , recibo caracteres de UART con interrupt & Guardarlos en la matriz de longitud n (matriz de búfer). Luego, en el bucle principal, reviso el búfer con la función strstr de string.h para encontrar una secuencia especial de caracteres (por ejemplo, "hola"). Funciona bien por primera vez, pero a veces no funciona y sin recibir esa serie de actos de cadena como cuando se encuentran coincidencias.

Código de muestra:

Controlador de interrupciones, cuando se recibe un carácter, lo guarda en el búfer:

Código:

void USART1_IRQHandler(void)
{
    /* RXNE handler */
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
        Rx_Buffer[Counter_Num1]=(char)USART_ReceiveData(USART1);
        Counter_Num1++;
        if(Counter_Num1==100)
        {
            Counter_Num1=0;
        }
    }
}

bucle principal: en algunas coincidencias primarias funciona bien (cuando escribo "hola", devuelve "1234") pero después de algunos intentos, devuelve "1234" permanentemente sin coincidencias

Código:

while(1)
{
    //--------------------------------------
    do
    string_pointer = strstr (Rx_Buffer, "hello");
    while(string_pointer==NULL);

    USART_SendData(USART1, '1');
    delay_ms(50);

    for(loop_counter=0;loop_counter<100;loop_counter++)
    {
        Rx_Buffer[loop_counter]=' ';
    }

    string_pointer=NULL;
    USART_SendData(USART1, '2');
    delay_ms(50);
    USART_SendData(USART1, '3');
    delay_ms(50);
    USART_SendData(USART1, '4');
    delay_ms(50);
    //-----------------------------------

}

Estoy usando stm32 & keil.

    

1 respuesta

2

Paso 1: haz que tu do {} while () haga un bucle do {} while () en lugar de un bucle do e infinite while () si quiere que ese comportamiento sea predecible.

Paso 2: Deje de sobrescribir su cadena de 100 lugares con espacios para dejarla en blanco, ya que las funciones internas de str buscan un '\ 0' para detener. Así que ahora entran en un recuerdo desconocido una vez que has tenido una coincidencia. Ponlo todo en '\ 0'. Google Memset ().

Paso 3: Inicialice realmente la matriz cuando comience a '\ 0' con memset (felizmente no muestra todo su código, pero asumiré aquí), o similar, para que realmente sepa lo que sucederá.

Paso 4: considera lo que sucede cuando comienzas a enviar un mensaje de bienvenida cuando el bucle se encuentra en el conteo 98. También es posible que desees administrar la numeración al coincidir.

    
respondido por el Asmyldof

Lea otras preguntas en las etiquetas