Supongamos un proyecto de sistema integrado en el que tengo un procesador ARM multinúcleo (para simplificar, suponga 2 núcleos con una caché no compartida entre los 2 núcleos). Suponga que mi sistema contiene una tarea crítica y varias tareas no críticas.

Por tanto, ¿puedo asignar la tarea crítica al "núcleo 1" exclusivamente? ¿Y todos los demás para "core 2" exclusivamente?

Si es así, ¿cómo se hace y cuáles son las mejores prácticas desde el punto de vista de la implementación [supongo que uso C]? ¿Debo usar una biblioteca (si es así, cuál)? ¿Un RTOS?

1
S12000 15 feb. 2018 a las 20:15

2 respuestas

La mejor respuesta

Ok, veo que también preguntaste esto en la junta de EE. También dieron la misma respuesta que quiero darte a ti. Utilice un sistema operativo de algún tipo para manejar afinidades de subprocesos. Si su RTOS o lo que sea que tenga no lo admite, investigue y vea cómo maneja realmente la programación de procesos / subprocesos.

Por lo general, a cada CPU de un sistema se le asignará algún tipo de hilo que maneja la programación de tareas. Este hilo es una de las primeras cosas que configura un sistema operativo. Siéntase libre de investigar algunos micro kernels para ver cómo se hace esto para su procesador en particular. También puede encontrar la salsa secreta para configurar este hilo en la documentación de ARM para su CPU en particular.

Pero, me arriesgo y supongo que esto está mucho, mucho más allá del alcance de cualquier asignación que se le asigne para un proyecto. Espero que tengas algún tipo de afinidad incorporada en lo que te dieron. Configurar la afinidad para un sistema operativo conocido es una tarea de unos pocos segundos. Configurar la afinidad en un sistema bare metal sin ningún sistema operativo es mucho más complicado.

Pregunta original: https: // electronics.stackexchange.com/questions/356225/multicore-arm-how-to-assign-a-critical-task-to-one-dedicated-core#comment854845_356225

1
Michael Dorgan 15 feb. 2018 a las 17:52

Si no necesita la funcionalidad en tiempo real, puede hacerlo en un dispositivo con un kernel de Linux sin demasiados problemas.

Vea esta pregunta aquí

1
imbuedHope 16 feb. 2018 a las 18:34