|
楼主 |
发表于 2022-5-8 23:58:16
|
显示全部楼层
本帖最后由 tomzbj 于 2022-5-9 00:03 编辑
解决了
1. 初始化时加一条 SCB->SHCSR |= (7UL << 16); // 打开BusFault, MemManageFault和UsageFault
2. 再出错时是掉进UsageFault了
3. 查看SCB->CFSR, 确定是UsageFault里的执行未定义指令
4. 反汇编, 定位到一条vcvt.f64.f32指令, 查了一下是双精度指令, M4f内核只支持单精度
5. 检查Makefile, 编译选项加了CPFLAGS += -mfloat-abi=hard -mfpu=vfpv4-d16, 这里加了双精度. 不过mfpu这里换了几个都不行, 干脆把-mfpu这个选项都去掉, 居然好了...
再查了一下, -mfpu支持的选项有这么多, 应该是选个只有单精度的就好了?
auto crypto-neon-fp-armv8 fp-armv8 fpv4-sp-d16 fpv5-d16 fpv5-sp-d16 neon neon-fp-armv8 neon-fp16 neon-vfpv3 neon-vfpv4 vfp vfp3 vfpv2 vfpv3 vfpv3-d16 vfpv3-d16-fp16 vfpv3-fp16 vfpv3xd vfpv3xd-fp16 vfpv4 vfpv4-d16 |
|