Colección de citas famosas - Mensajes de felicitación - ¿Qué causa que el puerto serie reciba códigos confusos?

¿Qué causa que el puerto serie reciba códigos confusos?

Los caracteres confusos son normales porque se están comunicando. Por supuesto, pueden aparecer datos inesperados en la recepción del hardware. Por ejemplo, algunos modos de modulación definitivamente producirán códigos confusos y las señales de interferencia electromagnética lo suficientemente fuertes también pueden causar errores en los datos. Hay algunas tonterías, pero no existe el concepto de "redundancia". Si se siente "redundante", es solo que su protocolo de comunicación no está implementado.

El protocolo del puerto serie generalmente tiene el siguiente formato: palabra de inicio (multibyte), longitud del área de datos (generalmente 1 o 2 bytes según sea necesario), suma de comprobación (multibyte), área de datos (multibyte). byte).

Esto es válido para todos los paquetes. La palabra inicial es generalmente una combinación de secuencia de bytes que no se usa en todos los datos de comunicación normales, y la suma de verificación generalmente usa CRC (esto es más confiable, hay muchos códigos fuente en Internet).

Los protocolos de recepción y subcontratación son un trabajo un poco más complejo de codificar (el código en sí no es complejo, por lo que es necesario pensar de manera más compleja). Debe definir un valor de indicador de "estado de aceptación". Cada byte debe cambiar el valor de estado para indicar qué bytes recibirá la próxima vez, como por ejemplo: byte inicial 1, byte inicial 2,..., la longitud del área de datos es. 65438+ bytes. Byte de suma de verificación 1, byte de suma de verificación 2..., área de datos (ya en el área de datos, debido a que ya se conoce la longitud, solo se acumula el búfer, una bandera es suficiente). Una vez acumulados los bytes en el área de datos, se calcula una suma de verificación. Si no se cumplen los resultados dados por el protocolo anterior, se reinicia el valor del indicador del "estado de aceptación" (byte 1 de la palabra de inicio de recepción) y se repite el proceso anterior a partir del byte 2 de la palabra de inicio anterior (recepción simulada). El proceso anterior requiere que usted sea experto en codificar y manipular buffers binarios.

Muchas personas usan punteros de estructura de datos como buffers de envío, seguidos de un sizeof() para enviar directamente al extremo receptor, cuántos bytes de datos se esperan directamente y esperar allí o aceptar por tiempo ( protocolo especificado) ¿Cuántos segundos lleva?) Estos son comportamientos completamente poco comunicativos y causarán problemas tarde o temprano. Si tiene estas prácticas en su código, le recomiendo cambiarlas lo antes posible.

La recepción de la comunicación serie la maneja la computadora de la siguiente manera: el puerto serie recibe los datos bit a bit, pero el hardware y el software subyacentes de la PC ya son capaces de almacenar e identificar estos bits y conviértalos de acuerdo con el protocolo estándar. Convierta a bytes. Sin embargo, el tiempo para recibir un byte es mucho más lento que el del programa de PC. Entonces, para su programa, los datos recibidos son en realidad una secuencia infinita de bytes que vienen lentamente hacia usted y solo puede ver uno a la vez. Cualquier byte no es nada especial respecto de cualquier otro byte. Pueden ser parte de un paquete o de varios paquetes, algunos de los cuales pueden ser errores, o incluso todos. Depende de su programa diferenciarlos. Sólo comprendiendo estas realidades podrás diseñar tus protocolos y procedimientos.