當我運行我的程序,這只是計算正弦波:的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