注意:
当前浮点运算服务只在基于ARM Cortex-M4或者inter X86架构的开发板上可用,此服务与体系架构相关
概念
内核允许应用的tasks和fibers使用开发板配置中支持的浮点寄存器(内核不支持通过ISRs方式使用浮点寄存器)
内核可以配置成仅为应用提供需要的浮点运算服务。支持下面三种操作模式。此外,内核对SSE寄存器的支持也可以被包含,舍弃或者关闭
No FP registers mode
这种模式用于当因公没有tasks或者fibers使用浮点寄存器的情况。这是内核默认的浮点服务模式。
如果一个task或者fiber在这种模式下使用任何浮点寄存器,内核将会产生一个错误状况并退出线程
Unshared FP registers mode
这个模式用于当应用只有一个task或者fiber使用浮点寄存器的情况
内核会初始化浮点寄存器以使它们可以被任何task或者fiber使用。无论发生任何上下文切换,浮点寄存器将始终保持不变。
当内核不支持多线程访问寄存器的时候,两个或多个任务或线程使用浮点寄存器将会产生错误。
Shared FP registers mode
这个模式用于应用有两个或多个线程使用浮点寄存器的情况。基于底层的CPU架构,内核支持一个或多个一下线程子类:
non-user:一个线程不能使用任何浮点寄存器
FPU user:一个线程可以使用标准的浮点寄存器
SSE user: 线程可以使用标准浮点寄存器和SSE寄存器
内核初始化浮点寄存器,所以他们可以被任何task或者fiber使用,然后在上下文切换的时候保存和恢复这些寄存器来保证每个FPU和SSE使用者的计算不和其他使用者的计算冲突。
在ARM cotex-M4架构上,当shared FP registers 模式开启的时候,内核将所有tasks和fibers作为FPU使用者。这意味着浮点寄存器将会在上下文切换的时候被保存和恢复,即使当相关的线程没有使用他们的时候。每一个task和fiber都必须在寄存器被保存的地方提供一个额外的132byte的栈空间
在X86架构的内核上,当