Procesamiento de datos en serie

1. Escriba los datos recibidos en el puerto serie que recibe la interrupción en el búfer de anillo, despierte el hilo de análisis (emita una notificación de tarea) o libere el semáforo.

2. Abra un hilo de análisis:

void AT_Parser()
{
    while(1)
    {
        1.等待任务通知;
          读环形缓冲区(将数据存起来);            
        2.常规解析(遇到\r\n才去解析);
          解析数据包:
                1)放入Data_Buf;
                2)唤醒“等待网络数据的线程”
        3.唤醒等待at命令的结果的线程;
    }  
}    

Sin embargo, no hay datos en el búfer de anillo la mayor parte del tiempo y es una pérdida de recursos leer el búfer de anillo todo el tiempo.
Introduzca el mecanismo de suspensión y activación:
1) Espere la notificación de la tarea, estado de suspensión; si se despierta, lea el búfer circular.
2) Usar semáforos o conjuntos de eventos.

 3. Búfer de anillo:
es una matriz global, pero solo un generador y un consumidor están limitados (no se requieren medidas de protección); el
búfer de anillo se escribirá en la función de interrupción, y solo un subproceso que analiza los datos leerá el distrito de amortiguamiento circular.
No puede haber múltiples subprocesos para leer o múltiples subprocesos para escribir en el búfer circular;
si hay múltiples subprocesos para leer o múltiples subprocesos para escribir en el búfer circular, se deben tomar varias medidas de protección.
 
Con el mutex agregado, tanto A como B pueden llamar a la función de envío uart_at_send; si no se agrega el mutex, solo una función de A y B puede llamar a la función de envío uart_at_send.

Los recursos se representan mediante semáforos.

 Dos subprocesos y una interrupción no ocupan recursos del sistema la mayor parte del tiempo y la eficiencia del código es relativamente alta.

 Después de bloquear la función uart_at_send, para continuar con la ejecución hacia abajo, solo puede ser una de tres situaciones: 1. Activación correcta, 2. Activación con error, 3. Salida de tiempo de espera;

Supongo que te gusta

Origin blog.csdn.net/weixin_44981087/article/details/130181388
Recomendado
Clasificación