|
本帖最后由 sysedoc 于 2021-5-7 18:56 编辑
在网上下载的2.93.01版本源码移植到F407上,会卡死在#if (OS_CPU_ARM_FP_EN > 0u)
reg_val = OS_CPU_CM_FP_FPCCR; /* Check the floating point mode. */
if ((reg_val & OS_CPU_CM_FPCCR_LAZY_STK) != OS_CPU_CM_FPCCR_LAZY_STK) {
while (1u) { /* See Note (2). */
;
}
}
#endif

如注释掉startup.s中Reset_Handler里FPU的代码,就可以运行。
IF {FPU} != "SoftVFP"
; Enable Floating Point Support at reset for FPU
LDR.W R0, =0xE000ED88 ; Load address of CPACR register
LDR R1, [R0] ; Read value at CPACR
ORR R1, R1, #(0xF <<20) ; Set bits 20-23 to enable CP10 and CP11 coprocessors
; Write back the modified CPACR value
STR R1, [R0] ; Wait for store to complete
DSB
; Disable automatic FP register content
; Disable lazy context switch
LDR.W R0, =0xE000EF34 ; Load address to FPCCR register
LDR R1, [R0]
AND R1, R1, #(0x3FFFFFFF) ; Clear the LSPEN and ASPEN bits
STR R1, [R0]
ISB ; Reset pipeline now the FPU is enabled
ENDIF

请教一下是什么问题?
谢谢!
|
|