硬汉嵌入式论坛

 找回密码
 立即注册
查看: 656|回复: 5
收起左侧

[μCOS-III] 求硬汉哥释疑关于lazy stacking机制问题

[复制链接]

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-4-27 10:12:29 | 显示全部楼层 |阅读模式
在学习lazy stacking机制的时候看到cm4,cm7都有这个功能,并且是默认开启的,
在网上看到有的帖子说在OS上如果有用到FPU的话是需要关掉这个功能,要不然会出现问题,
但是看了一下硬汉哥的3.08ucosiii的移植模板,并没有找到关闭这个lazy stacking功能的代码,所以请教一下这个功能到底是要不要关闭?

会不会产生影响?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-4-27 12:00:04 | 显示全部楼层
3.08的port文件改了,他们也开始采用lazy stacking特性了
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
 楼主| 发表于 2023-4-27 14:10:20 | 显示全部楼层
[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*                                       OS INITIALIZATION HOOK
*
* Description: This function is called by OSInit() at the beginning of OSInit().
*
* Arguments  : None.
*
* Note(s)    : 1) When using hardware floating point please do the following during the reset handler:
*                 a) Set full access for CP10 & CP11 bits in CPACR register.
*                 b) Set bits ASPEN and LSPEN in FPCCR register.
*********************************************************************************************************
*/

void  OSInitHook (void)
{
#if (OS_CPU_ARM_FP_EN > 0u)
    CPU_INT32U   reg_val;
#endif
                                                                /* 8-byte align the ISR stack.                          */
    OS_CPU_ExceptStkBase = (CPU_STK *)(OSCfg_ISRStkBasePtr + OSCfg_ISRStkSize);
    OS_CPU_ExceptStkBase = (CPU_STK *)((CPU_STK)(OS_CPU_ExceptStkBase) & 0xFFFFFFF8);

#if (OS_CPU_ARM_FP_EN > 0u)
    reg_val = CPU_REG_FP_FPCCR;                                 /* Check the floating point mode.                       */
    if ((reg_val & CPU_REG_FPCCR_LAZY_STK) != CPU_REG_FPCCR_LAZY_STK) {
        while (1u) {                                            /* See Note (1).                                        */
            ;
        }
    }
#endif
                                                                /* Set BASEPRI boundary from the configuration.         */
    OS_KA_BASEPRI_Boundary = (CPU_INT32U)(CPU_CFG_KA_IPL_BOUNDARY << (8u - CPU_CFG_NVIC_PRIO_BITS));
}


也就是说我如果要开启FPU,需要在复位中断设置 ASPEN and LSPEN均为1,这样就没问题了吧
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
 楼主| 发表于 2023-4-27 14:20:09 | 显示全部楼层
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
 楼主| 发表于 2023-4-27 14:36:28 | 显示全部楼层
顺便问一下硬汉哥,对于不同版本的ucos,如何去判断这个版本的ucos是要开启 ASPEN and LSPEN功能,还是要关闭的?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-4-28 10:47:53 | 显示全部楼层
qq1646544 发表于 2023-4-27 14:36
顺便问一下硬汉哥,对于不同版本的ucos,如何去判断这个版本的ucos是要开启 ASPEN and LSPEN功能,还是要关 ...

直接用最新版即可,之前版本不要再研究了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 03:41 , Processed in 0.288310 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表