Introducción a la multitarea en Arduino

Con las mayores capacidades de Arduino y otras placas de microcontroladores, incluidos relojes más rápidos o incluso múltiples núcleos, la necesidad de manejar múltiples tareas simultáneamente es más común que en el pasado. Por ejemplo, a menudo desea controlar motores, actualizar una pantalla y detectar interacciones de usuarios al mismo tiempo, o realizar tareas que tienen diferentes horarios o esperar eventos externos.

La forma tradicional de hacer esto es escribir código sin bloqueo para que la función loop() pueda ejecutarse lo más rápido posible, actualizando las variables de estado y llamando a la función millis() para garantizar la sincronización correcta (consulte "Parpadea sin demora "ejemplo para más). Este enfoque, sin embargo, conduce a un código inflado que es difícil de depurar y mantener, y además no admite varios núcleos.

La biblioteca Scheduler ya permite escribir código de una manera más limpia al dividir el boceto en varias funciones de bucle, de modo que cada una pueda concentrarse en una tarea específica. Sin embargo, este enfoque se denomina multitarea cooperativa, lo que significa que siempre debe evitar bloquear los comandos usted mismo. Además, no admite múltiples núcleos e incluso si lo hiciera, no le impide acceder a las mismas variables desde múltiples subprocesos. Por último, pero no menos importante, se basa en el paradigma tradicional de "bucle ocupado", que realmente no ayuda a las aplicaciones de bajo consumo en las que desea que los subprocesos descansen tanto como sea posible mientras esperan algún evento o datos entrantes.

El objetivo es definir una API estandarizada que se pueda portar a todas las arquitecturas y que, en línea con la filosofía de Arduino, haga que las cosas complejas sean más fáciles para todos. La multitarea es un concepto difícil, por lo que tenemos mucho espacio aquí para traer el enfoque de Arduino para que sea accesible para todos.

Le pedimos a nuestra comunidad tecnológica que se una a la discusión en GitHub y también compartimos nuestra propuesta de API y una implementación totalmente funcional. ¡Háganos saber sus pensamientos y trabajemos juntos para finalizar esta nueva característica!

Esta discusión de la comunidad está alojada en el nuevo repositorio, que es el nuevo hogar para la evolución del lenguaje Arduino.

Categorías:Destacado

Introducción a la multitarea en Arduino

Con las mayores capacidades de Arduino y otras placas de microcontroladores, incluidos relojes más rápidos o incluso múltiples núcleos, la necesidad de manejar múltiples tareas simultáneamente es más común que en el pasado. Por ejemplo, a menudo desea controlar motores, actualizar una pantalla y detectar interacciones de usuarios al mismo tiempo, o realizar tareas que tienen diferentes horarios o esperar eventos externos.

La forma tradicional de hacer esto es escribir código sin bloqueo para que la función loop() pueda ejecutarse lo más rápido posible, actualizando las variables de estado y llamando a la función millis() para garantizar la sincronización correcta (consulte "Parpadea sin demora "ejemplo para más). Este enfoque, sin embargo, conduce a un código inflado que es difícil de depurar y mantener, y además no admite varios núcleos.

La biblioteca Scheduler ya permite escribir código de una manera más limpia al dividir el boceto en varias funciones de bucle, de modo que cada una pueda concentrarse en una tarea específica. Sin embargo, este enfoque se denomina multitarea cooperativa, lo que significa que siempre debe evitar bloquear los comandos usted mismo. Además, no admite múltiples núcleos e incluso si lo hiciera, no le impide acceder a las mismas variables desde múltiples subprocesos. Por último, pero no menos importante, se basa en el paradigma tradicional de "bucle ocupado", que realmente no ayuda a las aplicaciones de bajo consumo en las que desea que los subprocesos descansen tanto como sea posible mientras esperan algún evento o datos entrantes.

El objetivo es definir una API estandarizada que se pueda portar a todas las arquitecturas y que, en línea con la filosofía de Arduino, haga que las cosas complejas sean más fáciles para todos. La multitarea es un concepto difícil, por lo que tenemos mucho espacio aquí para traer el enfoque de Arduino para que sea accesible para todos.

Le pedimos a nuestra comunidad tecnológica que se una a la discusión en GitHub y también compartimos nuestra propuesta de API y una implementación totalmente funcional. ¡Háganos saber sus pensamientos y trabajemos juntos para finalizar esta nueva característica!

Esta discusión de la comunidad está alojada en el nuevo repositorio, que es el nuevo hogar para la evolución del lenguaje Arduino.

Categorías:Destacado

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow