Multitarea en el LaunchPad MSP430F5529

¿Qué es exactamente la multitarea, la planificación y el cambio de contexto? Esta es una gran pregunta para aquellos que quieren entender cómo funcionan los sistemas operativos, incluso los pequeños sistemas operativos en tiempo real (RTOS). [Jeffrey] tenía la misma pregunta, por lo que creó un planificador multitarea para el LaunchPad MSP430F5529.

Estos temas son algunos de los más difíciles de entender en el mundo integrado. Elegir un proyecto que lo ayude a comprender temas difíciles es una excelente manera de aprender, además de que puede ser muy gratificante. En su puesto, [Jeffrey] analiza los conceptos básicos de cómo funcionan todas estas cosas y cómo se pueden implementar en el MSP430. En general, es una lectura excelente y muy informativa. Para obtener más información sobre RTOS, consulte algunas secciones del libro FreeRTOS. Asegúrese de ver su código en acción después de la pausa.

[Jeffery] fue lo suficientemente bueno como para lanzar todo su código como código abierto, así que asegúrese de revisar su repositorio en GitHub. “Por favor úselo y aprenda más. Hice que el código se explicara por sí mismo. ¡Disfrutar! "

por [43oh.com]

  • Dougal dice:

    Para aquellos interesados ​​en la planificación de tareas en AVR, consulte también: http://chrisbarlow.wordpress.com/2012/12/28/fogether-task-scheduling-with-arduino-avr/

    • chrispbarlow dice:

      Gracias por el grito. Recientemente lancé una versión más "fácil de usar" de este programador que es compatible con el IDE y el ecosistema de Arduino. Consulte aquí para obtener más información: https://chrisbarlow.wordpress.com/2016/04/27/tasks-a-time-triggered-scheduler-for-arduino/

  • Trui dice:

    En lugar de un planificador preventivo como este, recomendaría un planificador no preventivo. Evita muchas secciones críticas y condiciones de carrera, y es mucho más fácil de programar. En un programador no preventivo, no está programando en un conmutador, sino que deja la tarea anterior para llamar a la función de programación. Esto significa que un cambio de trabajo nunca ocurre inesperadamente.

    • jpnorair dice:

      Esto se llama multitarea cooperativa. Muchos MCU-OS ​​hacen esto. Escribir tareas para esto suele ser más complejo que para un sistema de subprocesos, aunque solo necesita una pila.

      El problema de la multitarea colaborativa es que casi nunca es capaz de planificar en tiempo real. Puede ser en tiempo real si la carga de tareas es baja y las tareas son muy cortas. Sin embargo, para cualquier procesamiento de protocolo, suele ser insuficiente.

      Las otras dos opciones son (1) utilizar un programador previo basado en subprocesos, (2) implementar controladores en tiempo real que operan fuera del programador y que activan tareas colaborativas según sea necesario. En última instancia, esto también tiene prioridad, aunque las funciones en tiempo real están aisladas en los controladores en lugar de en el núcleo. A veces, esto se llama Exokernel. Las "cosas de Internet" que conozco tienden a utilizar esta arquitectura.

      • Trui dice:

        No, estoy hablando de un proyecto con una pila para una tarea. Esto tiene la gran ventaja de que puede escribir código que falla en la E / S en lugar de tener que escribir máquinas de estado desagradables.

        Además, con las CPU modernas, como ARM Cortex, puede tener muchas prioridades de interrupción diferentes que se pueden utilizar para resolver la mayoría de los problemas en tiempo real.

        • jpnorair dice:

          De lo que estás hablando es de la multitarea colaborativa con hilos. Creo que esta no es una buena idea a menos que tenga una E / S realmente lenta. De lo contrario, el plan del reloj tendrá que ser rápido y el programador también tendrá que trabajar rápido, lo que a menudo no es posible / práctico en estas MCU. El enfoque de exokernel se usa comúnmente (ciertamente contiki, opentag, muchos MCU-OS ​​propietarios), y es arquitectónicamente similar a un multiproceso colaborativo (es decir, una tarea no preventiva), excepto que la E / S puede ser rápida porque está administrada en ISR- oj fuera. el planificador.

          • Trui dice:

            No, no hay reloj. El planificador llama al subproceso activo solo cuando necesita esperar E / S u otros eventos. De hecho, es muy ligero. Hay menos planificación que en un sistema preventivo. Todavía hay un ISR para E / S. Hacen todo el procesamiento en tiempo real, dejan los datos en una fila (u otra) y se despiertan para cualquier tarea esperando la E / S. No estoy seguro de por qué es tan confuso.

  • fonz dice:

    Agregaría una función para activar la interrupción programada del software, por lo que una tarea que no tiene nada que hacer puede liberar su intervalo de tiempo

  • tonterías gravatar dice:

    ¿No sería mejor llevar a Contiki a esto?

  • Gdogg dice:

    Si ya está usando un temporizador, ¿por qué no establecer un segundo para un cálculo de tiempo correcto? De esa manera, no necesita usar bucles ocupados (cuya precisión se ve distorsionada por las interrupciones y la programación) mientras la tarea planifica dos para cada parpadeo.

  • Luis dice:

    Si solo USTED hizo RTOS que ya ha hecho esto, * tos * http://www.ti.com/tool/ti-rtos

    • Koa dice:

      ¿Tiene .torrent o .iso de este RTOS? Es un software de pago.

      • astronave dice:

        Dice "comprar" pero el precio es "Gratis" y cuando haces clic en "Obtener software" te lleva a la página de descargas.

  • MJB dice:

    Eche un vistazo a Parallax Helix en Parallax.com
    proporciona 8 núcleos de 32 bits con 2kRAM cada uno más 32KB de RAM compartida
    No se necesitan interrupciones ...

Alejandro Vargas
Alejandro Vargas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *