software sin metal y FreeRTOS se ejecuta en ARM Cortex A9

3

¿Es posible ejecutar software completo en CPU0 y FreeRTOS en CPU1 ya que ARM Cortex A9 es un procesador de doble núcleo? Te lo estoy pidiendo por curiosidad. Si alguien ha logrado esto antes, ¿te importa compartir cómo lo hiciste?

Estoy usando Zedboard FPGA con ARM Cortex A9 PS.

    
pregunta user9870

1 respuesta

2

Sí, es posible. Sin embargo, debe asegurarse de que todos los accesos a los recursos que utilizarán ambos núcleos estén sincronizados correctamente.

Esto significa:

Respecto a la memoria

Ciertamente, deseará asignar algunas áreas de RAM para uso exclusivo del núcleo de firmware completo. Estas áreas no necesitarán acceso sincronizado ya que puede garantizar que FreeRTOS no podrá acceder a él. Pero para garantizar esto, debes configurar FreeRTOS para que no utilice nunca esta parte de la memoria.

En el caso opuesto, debe asegurarse de que con su firmware completo no se equivoca con las zonas de memoria conocidas y administradas por FreeRTOS.

Si necesita interacción entre ambos núcleos (y seguramente tendría que hacerlo), necesita algunas áreas especiales que se comparten entre ambos sistemas. Estas áreas necesitarán precauciones específicas al ser accedidas. Necesitará mutexes que funcionen en varios núcleos (utilizando LDREX / STREX), y necesitará que se implementen de forma coherente en ambos lados.

También es posible que se deban tomar precauciones específicas para la memoria compartida, para garantizar que las cachés locales de ambos núcleos se invaliden constantemente cuando se realiza una actualización. O, para simplificar las cosas, es posible que desee deshabilitar todo el almacenamiento en caché para estas áreas específicas (configúrelas como si fueran zonas periféricas mapeadas en memoria).

Respecto a los periféricos

Eventualmente, podría compartir algunos periféricos entre los núcleos y usar mutexes para sincronizar los accesos, como lo hace para la memoria. Pero evitaría hacer esto. Designaría un núcleo responsable para cada periférico y, si hay casos en que el otro núcleo necesite acceder a él, usaré algo de memoria compartida para pasar datos y desencadenar eventos. De esta manera, se asegura de que toda la comunicación con un periférico determinado se pueda priorizar adecuadamente desde un solo núcleo.

En general

Esto no es fácil. Obviamente, necesita crear una versión personalizada de FreeRTOS para manejar la segmentación y el uso compartido de la memoria específica. Y necesita desarrollar un acceso sincronizado avanzado desde su firmware completo. Esto es ciertamente mucho más difícil que utilizar, en ambos lados, un sistema operativo RT existente que ya puede trabajar en procesadores de varios núcleos.

    
respondido por el dim

Lea otras preguntas en las etiquetas