zephyr-浮点运算服务

注意:

当前浮点运算服务只在基于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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值