Priority Conundrum - Unblock task from ISR priority > MAX_SYSCALL_INTERRUPT_PRIORITY

I have an hardware-in-the-loop (HWITL) application that requires the in-the-loop bit run at a priority higher than MAX_SYSCALL_INTERRUPT_PRIORITY, otherwise FreeRTOS normal scheduling operations cause sporadic missed cycles. The HWITL bit is accumulating a buffer of measurements, and when that fills it needs to notify the (lower-priority) FreeRTOS-supported code that a buffer is ready. FreeRTOS task notification from-ISR API does not allow invocation from an ISR at higher priority than MAX_SYSCALL_INTERRUPT_PRIORITY.

So the question: Is there a sanctioned method of unblocking a FreeRTOS task from an ISR with priority higher than MAX_SYSCALL_INTERRUPT_PRIORITY? I know a few unsanctioned ways to do it :wink:

Thanks in advance for any pointers to a sanctioned method,
Best Regards, Dave

One idea - in your high-priority ISR when it’s time to wake a task, induce another interrupt request (one that is <= MAX_SYSCALL_INTERRUPT_PRIORITY) to do the syscall for you. That would be highly architecture and application dependent though. Interesting question!

Yes, that is exactly how I tend to do it. Most processors have some way to generate an interrupt by software like this, you may need to identify some unused device in the system to steal it IRQ vector.