嵌入式技术论坛
直播中

张丽

8年用户 1581经验值
私信 关注
[经验]

Cortex-M4在线程上下文切换中的优化

cortex-m4相对比cortex-m3,在线程上下文切换中,主要增加了FPU寄存器,总共需要保存34个寄存器,合计136byte。

因此原来在cortex-m3上面运行的程序在cortex-m4f上面运行时需要增加至少136字节的栈空间。

在实际应用中,并不是每个任务都需要浮点运算。所以可以对其进行优化,只为需要使用FPU的线程保存FPU寄存器。

笔记:

当应用程序中使用了FPU后,CONTROL.FPCA会置位;

当进入中断ISR以后,会清除CONTROL.FPCA,并在LR的第4位反应CONTROL.FPCA的状态;

当退出中断ISR时,也会根据LR的第4位来更新CONTROL.FPCA。

因此,在线程上下文切换中:

保存原线程时,根据LR的第4位即可判断应用程序是否使用了FPU,并决定是否要保存FPU的寄存器;

切出新线程时,判断新的线程是否有使用FPU,并更新LR的第4位,以保存新的线程能正确运行。

原作者:aozima

更多回帖

发帖
×
20
完善资料,
赚取积分