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.