Después de 60, el puntero uart_point apuntará a la siguiente dirección de memoria consecutiva de UART [59]. Suponiendo que la dirección de UART [0] es 0x0000, el compilador asignará un bloque de memoria continuo, es decir, 0x0000 ~ 0x0059. Cuando el valor del puntero es 0x0059, que apunta a la última variable UART [59], agregar 1 cambiará el valor del puntero a 0x0060. Esta dirección de memoria no pertenece a la UART y el compilador puede asignarla a otras variables. Si cambia su valor mediante un puntero, es obvio que su UART tendrá algunos problemas desconcertantes en tiempo de ejecución, y los fenómenos pueden ser diversos e imposibles de rastrear. La solución es definir una variable global para representar la cantidad de caracteres recibidos y detectar si la cantidad de caracteres recibidos excede el estándar en la interrupción de recepción del puerto serie. Cuando la cantidad de caracteres alcanza el valor especificado, descarte el exceso si lo hay. datos, de la siguiente manera:
1: Defina el número de buffers seriales #define UARTCHARNUM 60
2 Defina UART[UARTCHARNUM] y la variable de indicación del número de caracteres inuartnum.
3. Defina una serie de funciones operativas, como devolver el número actual de caracteres recibidos y restablecer el número de caracteres.
4. Compruebe si el número de caracteres recibidos alcanza el valor especificado en la interrupción de recepción del puerto serie. Si es así, descarte los caracteres sobrantes.
Otras declaraciones. . .
if(inuartnum & lt; UARTCHARNUM)
{
UART[inuartnum]= SBUF;
inuartnum++;
}
Eso es lo que hago. Debo recordar agregar una prueba para el puntero de la variable de memoria para evitar errores impredecibles. Los compiladores como Keil C temporalmente no pueden detectar automáticamente dichos errores, por lo que debe encontrar la manera usted mismo.