Recently I run into the following problem: the CPU gets blocked for a relatively long period of time (~50us) because the bus is occupied by the high priority DMA transfer to the slow peripheral device. I solved that particular problem by changing the bus priorities and breaking the long DMA transfer into a series of the short bursts. I don't like this solution because it is too specific to the application and it also increases the bus overhead.
However even if the bus is blocked, the CPU is still able to respond to the interrupts and execute the code using cache and internal memories as long as the bus is not required. So, if the current task is blocked because it needs to access the bus, it could make sense to switch to the different task.
But, the BlackFin architecture doesn't have any means to activate the switching of the contexts in the case of the congestion on the bus.
Do you know of any RTOS and hardware architecture which would allow to do that?
Vladimir Vassilevsky DSP and Mixed Signal Design Consultant