通过GSL导致的STM32硬件故障故障、硬件、GSL

2023-09-03 09:43:07 作者:浪漫

我使用ARM Cortex M4成功地为我的STM32F303交叉编译了GNU Science Library,如下所述:

How to crosscompile GSL for Arm Cortex M4?

但是,这可以很好地工作,但现在我从GSL获得了每个内存分配的HardFault值。例如,下面这行:

gsl_vector_float *x = gsl_vector_float_alloc(2);
STM32F1开发指南笔记1 硬件资源

或者这个

T = gsl_multimin_fdfminimizer_conjugate_fr;

直接导致硬件故障。有谁知道原因是什么吗?我非常肯定有足够的内存(IDE在开始时显示59kB的空闲内存)。该问题仅适用于GSL分配,因为Malloc单机版运行良好。

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

推荐答案

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