1 个不稳定版本
0.1.0 | 2021年1月28日 |
---|
在 算法 中排名第 1633
每月下载量 526
用于 cmsis_dsp
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
最简单的修复方法是启用 libm
或 micromath
功能。这将添加对 libm 或 micromath 的依赖,并实现一些 C 标准库数学函数。
libm
库实现的函数比 micromath
更多。它的实现可能更精确,但占用更多的代码空间。
如果同时启用了 libm
和 micromath 特性,将使用
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-eabi
或thumbv8m.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-eabi
或thumbv8m.main-none-eabihf
):如果处理器支持DSP指令,启用dsp-instructions
功能。
所有其他目标将根据传递给cargo的目标自动配置。如果您忘记启用一个功能,一切仍然应该正常工作,但可能较慢。