【发布时间】: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。