通过 GSL 引起的 STM32 的 HardFault
HardFault with STM32 caused through GSL
我成功地使用 Arm Cortex M4 为我的 STM32F303 交叉编译了 GNU 科学库,正如我在此处所述:
然而,这工作正常,但现在我从 GSL 获得了每个内存分配一个 HardFault。例如,这一行:
gsl_vector_float *x = gsl_vector_float_alloc(2);
或这个
T = gsl_multimin_fdfminimizer_conjugate_fr;
直接导致 HardFault。有谁知道原因可能是什么?我很确定有足够的 RAM(IDE 一开始显示 59 kB 空闲 RAM)。该问题仅适用于 GSL 分配,malloc 独立工作完美。
此外,我在 Internet 上发现一些 post 描述了线程安全,即使用 malloc 锁作为一个可能的问题。由于 GSL 是线程安全的,这可能是原因吗?虽然我在源码中没有找到任何使用锁的线索。
如评论所述,我在 cross-compiling(默认链接描述文件)期间确实使用了错误的链接描述文件。它在指定 linker-script 后起作用(我必须为特定的 MCU 使用 linker-script)。
我成功地使用 Arm Cortex M4 为我的 STM32F303 交叉编译了 GNU 科学库,正如我在此处所述:
然而,这工作正常,但现在我从 GSL 获得了每个内存分配一个 HardFault。例如,这一行:
gsl_vector_float *x = gsl_vector_float_alloc(2);
或这个
T = gsl_multimin_fdfminimizer_conjugate_fr;
直接导致 HardFault。有谁知道原因可能是什么?我很确定有足够的 RAM(IDE 一开始显示 59 kB 空闲 RAM)。该问题仅适用于 GSL 分配,malloc 独立工作完美。
此外,我在 Internet 上发现一些 post 描述了线程安全,即使用 malloc 锁作为一个可能的问题。由于 GSL 是线程安全的,这可能是原因吗?虽然我在源码中没有找到任何使用锁的线索。
如评论所述,我在 cross-compiling(默认链接描述文件)期间确实使用了错误的链接描述文件。它在指定 linker-script 后起作用(我必须为特定的 MCU 使用 linker-script)。