#bindings #dsp #processor #cortex-m #cmsis #arm #devices

cmsis_dsp

为 ARM Cortex-M 处理器提供 CMSIS-DSP 库的绑定

1 个不稳定版本

0.1.0 2021年1月28日

#1627算法

Download history 8/week @ 2024-03-13 33/week @ 2024-03-20 31/week @ 2024-03-27 35/week @ 2024-04-03 73/week @ 2024-04-10 134/week @ 2024-04-17 18/week @ 2024-04-24 7/week @ 2024-05-01 6/week @ 2024-05-08 6/week @ 2024-05-15 58/week @ 2024-05-29 144/week @ 2024-06-05 95/week @ 2024-06-12 159/week @ 2024-06-19 88/week @ 2024-06-26

每月499 次下载

0BSD 许可证

505KB
11K 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

修复此问题的最简单方法是启用 cmsis_dsp 包上的 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_sys)在0条款BSD许可证下发布,这是一种非常宽松的许可证,不需要署名。这意味着在Rust中使用CMSIS-DSP不需要比在C中使用CMSIS-DSP更多的许可合规工作。

依赖

~3MB
~63K SLoC