【问题标题】:HardFault with STM32 caused through GSL通过 GSL 引起的 STM32 硬故障
【发布时间】:2022-02-10 21:29:34
【问题描述】:

我成功地为我的 STM32F303 与 Arm Cortex M4 交叉编译了 GNU 科学库,正如我在此处所描述的:

How to crosscompile GSL for Arm Cortex M4?

但是,这很好用,但现在我从 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 独立运行完美。

此外,我在互联网上发现了一些帖子,描述了使用 malloc 锁作为可能问题的意义上的线程安全。由于 GSL 是线程安全的,这可能是原因吗?虽然我在源码中没有找到任何使用锁的线索。

【问题讨论】:

  • 使用调试器。
  • 我已经使用了调试器(我什至用 -g3 -ggdb 交叉编译了 GSL)。只说明分配过程中出现故障。
  • 所以更深入地调试它。输入函数,看看究竟是什么导致了故障。但我很确定您没有正确的 链接器脚本 并且您尝试访问不存在的内存。如果为其他 uC 编译,添加一些编译选项还不够。您需要有正确的链接器脚本启动文件
  • 谢谢,我认为链接器脚本的重点应该是它。你的意思是交叉编译还是µC?我正在为 µC 使用自动生成的 CubeID。

标签: arm stm32 gsl fault


【解决方案1】:

正如所描述的 cmets,我在交叉编译期间确实使用了错误的链接描述文件(默认链接描述文件)。它在指定链接器脚本后工作(我必须为特定的 MCU 使用链接器脚本)。

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 2020-11-12
    • 2021-01-29
    • 2020-08-12
    • 2022-01-21
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多