Cortex M4F Dynamic enable/disable of FPU to minimise Power Consumption

owainkopin wrote on Tuesday, May 22, 2018:

We are trying to optimise our product for power; using Cortex-M4F and OpenRTOS V9.0.0.

We now use OpenRTOS in tickless mode; have been disabling various HW when not needed; and have started switching clock speeds dynamically depending on the requirements from our applications.

We are now targeting the FPU; initially I thought we could just turn off the FPU; which for some modes we are using is fine. But unfortunately in some modes we use codecs that use FPU and we need the FPU rather than SW floating point.

Our next idea was to dynamically turn the FPU on and off when needed. This is proving more problematic due to our apps being based upon a RTOS. Our Cortex M4F core automatically recognises FPU is in use and stacks/unstacks FPU registers on entering/leaving exception handlers.

But I missing the piece of the jigsaw that turns on/off the FPU when switching between tasks?
If I switch from a task that does not use the FPU to a task that is using the FPU; then the FPU would have to be enabled before popping the FPU registers and switching to the FPU enabled task

I can see how the port for Cortex-M4F works fine if we just have the FPU statically configured as on or off; but I am struggling to see how it will work if we start enabling/disabling the FPU in various tasks.


rtel wrote on Tuesday, May 22, 2018:

Hi - if you are using OpenRTOS then you will presumably have a support
contract with WITTENSTEIN so recommend using their support ticketing system.