[优化]cortex-m4f线程切换,优化FPU寄存器

发布于 2013-06-23 16:08:45
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位,以保存新的线程能正确运行。

M4F_FPU.jpg

查看更多

关注者
0
被浏览
2.9k
3 个回答
bernard
bernard 2013-06-23
赞!终于实现这种方式的任务上下文切换方式了。
nongxiaoming
nongxiaoming 2013-06-24
这个确实不错,省了很多空间

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览