|
楼主 |
发表于 2021-4-7 21:44:07
|
显示全部楼层
通过查资料尝试,问题已解决,应该是ucos iii浮点数处理的问题,解决方法步骤:
1、启动文件Reset_Handler修改成:
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
; 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
LDR R0, =__main
BX R0
ENDP
2、修改os_cpu.c文件中OSTaskStkInit 函数涉及的宏定义
#if (OS_CPU_ARM_FP_EN == DEF_ENABLED)
if ((opt & OS_OPT_TASK_SAVE_FP) != (OS_OPT)0) {
*--p_stk = (CPU_STK)0x02000000u; /* FPSCR */
/* Initialize S0-S31 floating point registers */
*--p_stk = (CPU_STK)0x41F80000u; /* S31 */
......
*--p_stk = (CPU_STK)0x00000000u; /* S0
}
将OS_CPU_ARM_FP_EN 定义为 DEF_ENABLED,另外OSTaskCreate 函数创建任务时将opt参数OS_OPT_TASK_SAVE_FP使能打开。 |
|