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;