La eficiencia del sistema operativo Mbed

0

Estoy planeando usar el mbed en un proyecto de control de movimiento, donde ciertos subprocesos deben ejecutarse a una alta frecuencia específica.

Usando la biblioteca mbed, podría usar Ticket para calcular el tiempo pasado dentro de un hilo, y luego restarlo del tiempo de espera deseado, y luego ingresar el resultado en el método thread :: wait para asegurar una frecuencia constante. Sin embargo, ¿sería esto eficiente en altas frecuencias (1500 hz con algunos cálculos pesados en el hilo)?

En tales casos, ¿sería mejor aprovechar las bibliotecas CMSIS de nivel inferior?

Me doy cuenta de que esta pregunta es bastante vaga, pero cualquier comentario, consejo, etc. sería de gran ayuda.

    
pregunta 19172281

2 respuestas

0

Si necesita una sincronización precisa, debe configurar un temporizador de hardware para generar una interrupción a 1500Hz. La rutina de servicio de interrupción puede luego llamar a tu hilo importante, o establecer una variable global que le indique al núcleo multitarea que ejecute el hilo.     

respondido por el Elliot Alderson
0

Si establece un Ticker , ya establecerá un temporizador de hardware, y la devolución de llamada se ejecutará en un ISR con la mayor prioridad. Luego, puede devolver el evento a un hilo que se ejecuta con una prioridad más baja / más alta según el evento (por ejemplo, a través de Semaphore , Queue o EventQueue ).

El resto de tus hilos pueden tener una prioridad (por ejemplo, osPriorityRealtime , que creo que es el más alto en Mbed OS 5) y puedes equilibrar las cosas aquí. Si hace una pausa en el hilo ( Thread::wait ), volverá a los hilos de menor prioridad.

    
respondido por el Jan Jongboom

Lea otras preguntas en las etiquetas