|
下载官方例程Micrium_STM3240G-EVAL_OS3,版本号V3.04.05,在os_cpu_c.c中
CPU_STK *OSTaskStkInit (OS_TASK_PTR p_task,
void *p_arg,
CPU_STK *p_stk_base,
CPU_STK *p_stk_limit,
CPU_STK_SIZE stk_size,
OS_OPT opt)
{
CPU_STK *p_stk;
(void)opt; /* Prevent compiler warning */
p_stk = &p_stk_base[stk_size]; /* Load stack pointer */
/* Align the stack to 8-bytes. */
p_stk = (CPU_STK *)((CPU_STK)(p_stk) & 0xFFFFFFF8);
/* Registers stacked as if auto-saved on exception */
*--p_stk = (CPU_STK)0x01000000u; /* xPSR */
*--p_stk = (CPU_STK)p_task; /* Entry Point */
*--p_stk = (CPU_STK)OS_TaskReturn; /* R14 (LR) */
*--p_stk = (CPU_STK)0x12121212u; /* R12 */
*--p_stk = (CPU_STK)0x03030303u; /* R3 */
*--p_stk = (CPU_STK)0x02020202u; /* R2 */
*--p_stk = (CPU_STK)p_stk_limit; /* R1 */
*--p_stk = (CPU_STK)p_arg; /* R0 : argument */
/* Remaining registers saved on process stack */
*--p_stk = (CPU_STK)0x11111111u; /* R11 */
*--p_stk = (CPU_STK)0x10101010u; /* R10 */
*--p_stk = (CPU_STK)0x09090909u; /* R9 */
*--p_stk = (CPU_STK)0x08080808u; /* R8 */
*--p_stk = (CPU_STK)0x07070707u; /* R7 */
*--p_stk = (CPU_STK)0x06060606u; /* R6 */
*--p_stk = (CPU_STK)0x05050505u; /* R5 */
*--p_stk = (CPU_STK)0x04040404u; /* R4 */
#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)0x41F00000u; /* S30 */
*--p_stk = (CPU_STK)0x41E80000u; /* S29 */
*--p_stk = (CPU_STK)0x41E00000u; /* S28 */ 后略过
中描红段判断使用FPU与否,跟踪OS_CPU_ARM_FP_EN到os_cpu.h中,如下:
#ifndef __TARGET_FPU_SOFTVFP
#define OS_CPU_ARM_FP_EN DEF_ENABLED
#else
#define OS_CPU_ARM_FP_EN DEF_DISABLED
#endif
__TARGET_FPU_SOFTVFP找遍整个工程没发现定义,是否在C/C++ 标签define中添加?
__TARGET_FPU_SOFTVFP这句的意思是什么? |
|