En algunos kernels RT, si desea publicar en un semáforo o marca desde un ISR, debe llamar a una versión especial del método, en lugar de la llamada normal de una tarea normal. Ejemplos:
-
xSemaphoreGiveFromISR()
en lugar dexSemaphoreGive()
en FreeRTOS - Vole de la vara de la vara de la vera de la vera de la vera de la naturaleza / li>
Sin embargo, hay otros núcleos donde esto no es necesario. Por ejemplo:
-
isr_PostSem()
en uC / OS puede llamarse desde las tareas y los ISR. -
CoPostSem()
en VxWorks parece que se puede llamar desde un ISR de acuerdo con los documentos y, a primera vista, no existe un método especial para los ISR.
¿Por qué necesitarías crear versiones especiales? Entiendo que la publicación de un semáforo o una bandera puede hacer que se despierte una tarea bloqueada de mayor prioridad. Y es por eso que el programador es más probable que se ejecute cuando se llame a la devolución de llamada de salida de ISR (estoy hablando de las funciones que se necesitan cuando se quiere usar el código del kernel dentro de ISR, como OSSemPost()
en FreeRTOS, o release()
en uC / OS). Entonces, ¿por qué el método de publicación especial además de la llamada ISRexit?