Hi all:
recently I meet same issue, but I have solved it, so post some conclusion here for reference.
Yes, as carlos mentioned, MQX don't save FPU register before enter isr, if MQX_SAVE_FP_ALWAYS == 0.
seem it's gap, but reference manual never suggest how to use FPU in ISR.
Normally there are three ways to implement fpu register save/restore as I understand.
1.#define MQX_SAVE_FP_ALWAYS 1
in dispatch.s, you could see, whatever task switch or interrupt isr always save fpu registers, and restore them when back;
but seem the engineer also told me the MQX crash, I guess too much or frequent save/restore maybe damage MQX, even in isr, they save fpu registers in SP, at least we must keep stack large enough.
2.define related floating point task with MQX_FLOATING_POINT_TASK
which could save/restore fpu register when task switch, same code in dispatch.s, in _pend_svc().
but as carlos's snapshot, if isr have floating operation, and MQX_SAVE_FP_ALWAYS=0, the FPU register will be changed in isr.
3.use below function in task to protect floating operation in task,
bool _task_enable_fp(void);
/* Do your FPU calculation Here */
void _task_disable_fp(void);
actually, this solution is same as (2), this is for temporary FPU operation.
so from above description, I have some suggestion how to use FPU in MQX:
1.never use MQX_SAVE_FP_ALWAYS== 1, for there are some potential issue to crash MQX, we have no root cause now; and this solution always save/restore fpu registers, which take more time and memory resource;
2.don't use above (3) solution, which seem same as (2);
3.indentify which task use floating point operation, and define these tasks as MQX_FLOATING_POINT_TASK.
if only task have floating point operation, which is enough.
if isr have fpu operation also, indentify which isr, and add _psp_push_fp_context() and _psp_pop_fp_context() call to include fpu operation, which wil save fpu content into C stack.