#arm #processing #math #low-level #processor #bindings #cmsis-dsp

sys cmsis_dsp_sys_pregenerated

ARM CMSIS-DSP 库的低级别接口

1 个不稳定版本

0.1.0 2021年1月28日

算法 中排名第 1633

Download history 15/week @ 2024-03-13 45/week @ 2024-03-20 42/week @ 2024-03-27 46/week @ 2024-04-03 87/week @ 2024-04-10 158/week @ 2024-04-17 28/week @ 2024-04-24 14/week @ 2024-05-01 14/week @ 2024-05-08 12/week @ 2024-05-15 1/week @ 2024-05-22 62/week @ 2024-05-29 152/week @ 2024-06-05 101/week @ 2024-06-12 167/week @ 2024-06-19 92/week @ 2024-06-26

每月下载量 526
用于 cmsis_dsp

0BSD 许可证

460KB
10K SLoC

CMSIS-DSP 绑定

CMSIS-DSP 库提供“适用于基于 Cortex-M 和 Cortex-A 处理器的设备的通用信号处理函数集”。

本包为 Cortex-M0、M0+、M3、M4、M7、M23 和 M33 设备提供 CMSIS-DSP 的 Rust 绑定。

支持的功能

目前提供高级绑定以支持基本函数和快速傅里叶变换。CMSIS-DSP 库还具有其他功能,但尚未有人为它编写 Rust 绑定。

限制

内联函数

一些 CMSIS-DSP 函数,如 arm_sqrt_f32,在头文件中内联定义,并从编译后的库中缺失。这可能造成链接错误,如下所示

基本 C 数学函数

一些 CMSIS-DSP 函数依赖于 C 标准库中的数学函数,如 sqrtf。这些 C 标准库数学函数不包括在 CMSIS-DSP 库中。这可能会导致链接错误,如下所示

  = note: rust-lld: error: undefined symbol: sqrtf
          >>> referenced by arm_math.h:6841 (../../Include/arm_math.h:6841)
          >>>               arm_cmplx_mag_f32.o:(arm_cmplx_mag_f32) in archive /path/cmsis_dsp_sys/ARM.CMSIS.5.7.0/CMSIS/DSP/Lib/GCC/libarm_cortexM4lf_math.a
          >>> referenced by arm_math.h:6841 (../../Include/arm_math.h:6841)
          >>>               arm_cmplx_mag_f32.o:(arm_cmplx_mag_f32) in archive /path/cmsis_dsp_sys/ARM.CMSIS.5.7.0/CMSIS/DSP/Lib/GCC/libarm_cortexM4lf_math.a
          >>> referenced by arm_math.h:6841 (../../Include/arm_math.h:6841)
          >>>               arm_cmplx_mag_f32.o:(arm_cmplx_mag_f32) in archive /path/cmsis_dsp_sys/ARM.CMSIS.5.7.0/CMSIS/DSP/Lib/GCC/libarm_cortexM4lf_math.a
          >>> referenced 4 more times

最简单的修复方法是启用 libmmicromath 功能。这将添加对 libmmicromath 的依赖,并实现一些 C 标准库数学函数。

libm 库实现的函数比 micromath 更多。它的实现可能更精确,但占用更多的代码空间。

如果同时启用了 libmmicromath 特性,将使用 libm 的实现。

或者,您可以选择实现所需的函数,例如

#[no_mangle]
pub extern "C" fn sqrtf(value: f32) -> f32 {
    // Implementation goes here
}

配置绑定

库的不同版本将根据代码运行的目标处理器类型进行链接。您可能需要根据目标启用一些 Cargo 特性

  • Cortex-M7:启用 cortex-m7 特性。如果处理器具有双精度浮点单元,则启用 double-precision-fpu 特性。
  • Cortex-M33 (目标 thumbv8m.main-none-eabithumbv8m.main-none-eabihf):如果处理器支持DSP指令,启用 dsp-instructions 功能

所有其他选项将根据传递给cargo的目标自动配置。如果您忘记启用一个功能,一切仍然应该正常工作,但可能较慢。

许可

ARM在Apache许可证2.0下提供CMSIS-DSP库。此绑定包(cmsis_dsp和cmsis_dsp_sys_pregenerated)在0条款BSD许可证下发布,这是非常宽松的,不需要归属。这意味着在Rust中使用CMSIS-DSP不需要比在C中使用CMSIS-DSP更多的许可证合规性工作。


lib.rs:

CMSIS-DSP低级绑定

配置和使用绑定

库的不同版本将根据代码运行的目标处理器类型进行链接。您可能需要根据目标启用一些 Cargo 特性

  • Cortex-M7:启用 cortex-m7 特性。如果处理器具有双精度浮点单元,则启用 double-precision-fpu 特性。
  • Cortex-M33 (目标 thumbv8m.main-none-eabithumbv8m.main-none-eabihf):如果处理器支持DSP指令,启用 dsp-instructions 功能。

所有其他目标将根据传递给cargo的目标自动配置。如果您忘记启用一个功能,一切仍然应该正常工作,但可能较慢。

依赖关系