He escrito muchos programas C para microcontroladores, pero nunca uno que se ejecuta en un sistema operativo como Linux. ¿Cómo decide Linux cuánto tiempo de procesamiento darle a mi aplicación? ¿Hay algo que deba hacer cuando tenga tiempo de inactividad para decirle al sistema operativo que haga otra cosa y vuelva a consultarme más tarde para que otros procesos también puedan tener tiempo de ejecución? ¿O el sistema operativo simplemente hace eso automáticamente?¿Qué debería hacer el programa C en tiempo de inactividad cuando se ejecuta en Linux?
Editar: Agregar más detalles Mi programa c tiene un planificador de tareas. Algunas tareas se ejecutan cada 100 ms, algunas se ejecutan cada 50 ms y así sucesivamente. En mi bucle de programa principal, llamo a ProcessTasks, que verifica si alguna tarea está lista para ejecutarse, si ninguna está lista llama a una función inactiva. La función inactiva no hace nada pero está ahí para poder alternar un pin GPIO y controlar el tiempo de inactividad con un O'scope ... o algo así si lo deseo. Entonces, ¿debería llamar a sched_yield() en esta función inactiva?
Así que las otras respuestas dicen de usar de sueño () ¿Debería llamar a sleep() y sched_yield()? si es así, ¿en cuál debería llamarse primero? – PICyourBrain
@PICyourBrain Lea el manual. El rendimiento dejará en ejecución su proceso si no hay nada más que hacer, mientras que "dormir" hará que su proceso espere inequívocamente. – cnicutar
si está implementando un spinlock, desea llamar a sleep (0) o sched_yield() cada vez que no se realiza el bloqueo. – Arvid