zephyr-浮点运算服务

来源:互联网 发布:分卷包数据不正确修复 编辑:程序博客网 时间:2024/06/05 06:05

注意:

当前浮点运算服务只在基于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架构的内核上,当

0 0
原创粉丝点击