Pregunta:
Multithreading con Arduino
Omar Hussein
2015-12-09 04:18:51 UTC
view on stackexchange narkive permalink

Bueno, acabo de empezar a aprender el concepto de subprocesos múltiples con C ++ e inmediatamente me vinieron a la mente un montón de preguntas sobre la posibilidad de usar subprocesos múltiples con microcontroladores en general y Arduino específicamente.

Entonces, ¿es así? ¿Es posible utilizar subprocesos múltiples en cualquier tipo de placas Arduino?

Por multiproceso, ¿también quiere decir concurrente? Si no lo hace, las rutinas de interrupción activadas por un temporizador a intervalos regulares pueden cubrir muchas funciones similares en los procesadores AVR.
Puede probar esta biblioteca https://github.com/mikaelpatel/Arduino-Scheduler
Cuatro respuestas:
Mikael Patel
2015-12-09 05:54:51 UTC
view on stackexchange narkive permalink

En Cosa puede encontrar el siguiente soporte para programación concurrente:

  1. Eventos, rutinas de servicio de interrupción de interfaz
  2. Trabajos, retrasados, periódicos o alarmas funcionan con nosotros, temporizadores de nivel de ms y segundos (Watchdog, RTT o RTC).
  3. FSM, función de estado de objeto
  4. ProtoThreads, puntero de estado de objeto
  5. Threads, semáforos, etc., múltiples pilas
  6. UML Cápsulas y conectores, programación impulsada por dependencias

Hay muchos ejemplos sobre cómo usar estas. Un buen punto de partida son los bocetos de Blink. Incluso hay un ejemplo de parpadeo de subprocesos múltiples con un subproceso que enciende / apaga el LED y un subproceso de controlador que cambia periódicamente el período de parpadeo. El tamaño de la pila de subprocesos es de solo 64 bytes y se ejecuta incluso en un ATtiny.

Con todos los módulos de hardware internos de AVR (como SPI, TWI, UART, etc.) hay muchas oportunidades para la concurrencia.

También está disponible una biblioteca Scheduler para el núcleo de Arduino. Este es un puerto de Cosa Threads. Consulte github para obtener más detalles.

¡Salud!

¿De qué orden está la memoria de Cosa? Flash de 100 KB y RAM de 20 KB?
Depende de lo que uses / incluyas. En general, la "sobrecarga" es menor que el núcleo de Arduino para una funcionalidad similar. La mejor forma de averiguarlo es ejecutar algunos de los bocetos de ejemplo.
dlu
2015-12-09 04:36:05 UTC
view on stackexchange narkive permalink

La respuesta realmente rápida es "tal vez"; depende de lo que quieras decir con "Arduino" y de lo que quieras decir con "hilo". Es probable que la respuesta sea diferente para los Arduinos basados ​​en AVR (Uno et al.) Frente a los Arduinos basados ​​en ARM (Due et al.) - Esperaría que haya mucho mejor soporte de hardware para subprocesos "reales" en los procesadores ARM . Otra pregunta que le gustaría responder es "¿por qué hilos?" ¿Quieres que la abstracción te ayude a organizar tu código? ¿O realmente necesitas subprocesos "reales"?

Antes de que existiera el soporte de subprocesos de hardware (por ejemplo, mediados de los 80), existen implementaciones de subprocesos de usuario, parece posible que puedan ser adaptables para ejecutarse incluso en un AVR. Esperaría que fuera una especie de proyecto.

Hay un paquete de hilos llamado Protothreads que puede ser interesante. La descripción dice "Protothreads son subprocesos sin tallos extremadamente livianos diseñados para sistemas con limitaciones de memoria severas". Encontré otra pregunta sobre el uso simple de Protothreads, por lo que parece que puede encontrar otros usuarios del paquete.

También puede encontrar información útil en este Stack Exchange pregunta sobre hilos, una búsqueda rápida de "hilos de usuario C" encontró esta implementación en la primera página, y estoy seguro de que hay muchas más.

Una búsqueda en "subprocesos Arduino" encontró varios enlaces más interesantes:

Si solo desea subprocesos, una placa pequeña y económica y pines de E / S, podría valer la pena considerar una Raspberry Pi: Linux tiene soporte para subprocesos.

Buena respuesta. También podría valer la pena señalar que incluso con soporte de subprocesos de hardware, un sistema operativo o al menos algún software en capas probablemente necesitará administrar y programar los subprocesos.
@Mlagma: Por lo que puedo decir, cada enlace en esta respuesta muestra una implementación de subprocesos que se compilan estáticamente en el programa del usuario. El Arduino ejecuta solo ese programa. ¿Puede dar incluso un ejemplo de un sistema operativo u otra capa de software, además del programa de usuario?
@Mlagma, podría ser tan simple como algo como corrutinas e interrupciones. No espero encontrar mucho más allá de quizás una biblioteca que implemente un programador básico, pero ni siquiera he encontrado eso.
dda
2017-01-16 15:43:11 UTC
view on stackexchange narkive permalink

Hay un producto similar a Arduino que ciertamente podría permitir el multi-hilo, ya que es multi-core: el Shield Buddy TC275.

Core setup and loop functions

Así que básicamente tienes tres funciones setup () y tres funciones loop () . Verdadero multihilo.

+1 por encontrar esto. Excelente tabla, pero no barata. Sin embargo, le daría a [AeroQuad] (http://aeroquad.com/) una nueva vida ..!
Sí, ha estado en mi radar por un tiempo, pero el costo ... espero que los fabricantes de clones chinos lo encuentren pronto :-)
Sin embargo, no es tan compatible como pensé inicialmente, por razones que son, ahora, obvias. Una simple recopilación puede no ser suficiente. Dependerá de la complejidad del código, es decir, si se ha utilizado ensamblador. Consulte [¿Alguien ha usado un Shield Buddy (en lugar de un Arduino Mega2560) como placa de host RAMPS 1.4?] (Http://3dprinting.stackexchange.com/questions/3410/has-anyone-used-a-shield-buddy -en-lugar-de-un-arduino-mega2560-como-rampas-1-4)
Sí, ASM podría ser un problema. Además, ajustar el código a un entorno de 3 núcleos, incluso sin ASM, requeriría algo de trabajo. Pero creo que para un nuevo proyecto, podría ser realmente interesante.
Flanker
2017-01-18 02:40:46 UTC
view on stackexchange narkive permalink

Yo uso Atomthreads en Atmega128, es muy ligero con una sobrecarga mínima. Tiene programador de tareas, mutex, semáforos y cola. El código es portátil, pero puede requerir alguna configuración para usar con Arduino IDE (yo uso Atmel Studio). Utilizo principalmente el programador de tareas, nunca tuve problemas. Recientemente verificado, el desarrollo aún está activo.

Re: * "muy ligero" *. ¿Puedes cuantificar eso? ¿Son 8 KB de memoria flash y 600 bytes de memoria?


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...