在Stm32f4发现板上运行Gmp

时间:2017-01-04 13:58:23

标签: microcontroller stm32 gmp stm32f4discovery

我发现了stm32f4发现板。 目前我可以使用LED,按钮,并通过串口进行通信。 我现在正试图在这块板上使用Gmp库。 我按照这些说明构建了arm-none-eabi工具链:https://blog.tan-ce.com/gcc-bare-metal/

我使用以下选项配置Gmp: ./configure CC = arm-none-eabi-gcc CFLAGS =“ - nostartfiles --specs = nosys.specs -g”--host = arm-none-eabi --disable-assembly

我的项目编译和链接没有任何问题,但是 当我尝试使用以下代码初始化板上的mpz_t时:

mpz_t a; 
mpz_init_set_str(a, "31", 10);

我陷入了HardFault_Handler(),我的arm-none-eabi-gdb给了我:

(gdb) bt
#0  HardFault_Handler () at ./src/stm32f4xx_it.c:34
#1  <signal handler called>
#2  0x08016ade in __gmpn_fft_best_k (n=134358201, sqr=134358201) at mul_fft.c:151
#3  0x0801816e in __gmpn_mul_fft (op=0x80006f5 <HardFault_Handler>, pl=134219497, n=0x8022471 <Reset_Handler>, nl=537001984, m=0x80224b9 <WWDG_IRQHandler>, ml=134358201, k=134358201) at mul_fft.c:870
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

如果有人已经在微控制器上运行Gmp,我对这种方式非常感兴趣!

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案,必须指定皮质类型。 对于stm32f4,将-mcpu = cortex-m4添加到CFLAGS解决问题。

我使用此处提供的工具链:arm-none-eabi toolchain

整个配置命令是: ./configure CC = arm-none-eabi-gcc CFLAGS =“ - nostartfiles --specs = nosys.specs -mcpu = cortex-m4”--host = arm-none-eabi --disable-assembly --prefix = your -bare金属-GMP-位置

其中“your-bare-metal-gmp-location”是安装目录(不能在经典的/ usr / local中安装裸机库)。