当我运行我的程序,这只是计算正弦波:的ARM Cortex M4硬故障 - 浮点
for(i = 0; i < ADS1299_SIGNAL_WINDOW; i++){
TEST[i] = (float32_t)(10.0f * (float32_t)(arm_sin_f32((float32_t)(3.14f * i/ADS1299_SIGNAL_WINDOW))));
}
编译器会生成以下行,这会导致硬件故障:
800702a: ed2d 8b04 vpush {d8-d9}
发生了什么?作为参考,这里是我的标志编译器:
SETTINGS="-g -nostartfiles -mthumb -mthumb-interwork -march=armv7e-m -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -fdata-sections -ffunction-sections -O3 -Wl,-T,../STM32F407VG_FLASH.ld"
DECLARE="-DARM_MATH_CM4 -D__FPU_PRESENT=1 -D__FPU_USED"
.... -larm_cortexM4lf_math
是的。我忘了提及我正在使用STM32F407芯片。抱歉! – SolarSunrise 2014-11-24 23:27:36
是的,这是没有任何操作系统的裸机。上面的代码直接在主要的。 FPU在主开始处启用(SCB-> CPACR | =(0x3 << 10 * 2 | 0x3 << 11 * 2)。 – SolarSunrise 2014-11-24 23:35:16
这将有助于包含[您的完整代码](http:// stackoverflow。 com/help/mcve) - 这很难说明上电和违规指令之间是什么和不发生什么,我认为这很重要 – Notlikethat 2014-11-24 23:58:14