硬汉嵌入式论坛

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

[有问必答] 为何不能在ucosiii中低功耗停机模式无法唤醒

[复制链接]

1

主题

7

回帖

1

积分

新手上路

积分
1
发表于 2016-5-19 16:06:41 | 显示全部楼层 |阅读模式
void  App_TimeTickHook (void)
{
#if (APP_CFG_PROBE_OS_PLUGIN_EN == DEF_ENABLED) && (OS_PROBE_HOOKS_EN > 0)
    OSProbe_TickHook();
#endif
   
    /* èç1û֮ǰÔËDDμÄêÇ¿ÕÏDèÎÎñ */
    if(OSPrioCur == OS_TASK_IDLE_PRIO)
    {
        g_uiEnd = CPU_TS_TmrRd();
        
        /* àÛ¼ÆDYÃßμÄ걼䣬μ¥λê±ÖóÖüÆú¸öêy */
        g_ullCntTotal += (g_uiEnd - g_uiStart);
        
        /* ¼Ç¼μ±Ç°Ïμí3걼䣬μ¥λ1ms */
        g_uiCnt = OSTimeGet();
        
        /* ÖØD¿aÆôê±Öó */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
    }
   
}





void  App_OS_IdleTaskHook (void)
{
        OS_ERR err;
        CPU_SR_ALLOC();
   
    /* 1رÕê±Ö󣬽¨òé¼óéÏμ÷¶èËø£¬ÕaàïÎ′×ö′|àí */
//    OSSchedLock(&err);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, DISABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, DISABLE);
//    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, DISABLE);      

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, DISABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, DISABLE);
   

   
    RTC_ClearFlag(RTC_FLAG_SEC);
   while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);
   
    RTC_SetAlarm(RTC_GetCounter()+ 3); //3õê¼»ˉÏèËˉ 15s,
    RTC_WaitForLastTask();
//    OSSchedUnlock(&err);

            __WFI();
//    PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);   
   
   
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2016-5-19 16:22:42 | 显示全部楼层
停机模式,滴答定时器就能唤醒。即uCOS-III的系统时钟节拍中断。
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-5-19 17:03:07 | 显示全部楼层
eric 大神, 请问  

你说的停机模式    PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);      是这个指令吗??

为何,我仿照你的ucosii中 ,写的 ,可以在ucosii中实现闹钟的唤醒,但是不能在ucos3中,唤醒能,能不能指出,我错在什么地方吗? 或者,那里可以下载到,ucos3的例程..


谢谢. .
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2016-5-19 17:06:41 | 显示全部楼层
你的钩子函数是不是没有初始化和使能。
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-5-20 08:37:33 | 显示全部楼层
QQ浏览器截屏未命名.png   应该已经设计使能了 钩子函数.但是进入停机模式还是无法用闹钟唤醒
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-5-20 09:03:27 | 显示全部楼层
222.png
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-5-20 09:04:11 | 显示全部楼层
请问,eric大神,你说的ucos3 有类似的方法,请问,你知道是什么方法吗?  怎么实现的.  谢谢
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-5-20 09:14:12 | 显示全部楼层
我参考过安福莱的 ucos2停机模式的程序  ,为何到了   ucosiii中无法唤醒.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2016-5-20 09:35:29 | 显示全部楼层

回 莘显915 的帖子

莘显915:我参考过安福莱的 ucos2停机模式的程序  ,为何到了   ucosiii中无法唤醒. (2016-05-20 09:14) 
把停机模式用在空闲任务里面的确比较麻烦些,原因有3
1.  你要获取当前所有任务的最小挂起实现,将这个作为停机时间,时间到后唤醒
2. 停机模式是会被滴答定时器中断唤醒的,这个得再进入停机模式前关闭。
3.  停机模式唤醒后要重新初始化时钟,这点比较耗时间。
===================
对于tickless模式来说,一般RTOS的通用做法是用休眠模式,比如FreeRTOS,也有用停机模式的,比如RTX。
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-5-20 14:01:06 | 显示全部楼层
eric2013 ,请问,你有无写过  ucos3 的低功耗程序. 谢谢
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-5-20 14:08:53 | 显示全部楼层
已经找到了  你的程序,正在学习中,感谢,感谢,
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2019-6-1 10:24:06 | 显示全部楼层
问下大佬,ucosii   带独立看门狗的任务,进入stop模式的话 喂狗怎么办?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2019-6-1 10:28:02 | 显示全部楼层
hope0116 发表于 2019-6-1 10:24
问下大佬,ucosii   带独立看门狗的任务,进入stop模式的话 喂狗怎么办?

这个暂时没有好办法,可以考虑砍掉看门狗功能。或者统计下你的工程最长的停机时间和看门狗的最长喂狗时间,合理安排下
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2019-6-1 10:40:11 | 显示全部楼层
eric2013 发表于 2019-6-1 10:28
这个暂时没有好办法,可以考虑砍掉看门狗功能。或者统计下你的工程最长的停机时间和看门狗的最长喂狗时间 ...

我是做穿戴设备,进入停止模式估计很久才会唤醒,目前看门狗的最长喂狗时间是20几秒,看来是只有把看门狗砍掉了
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2019-6-25 11:07:56 | 显示全部楼层
问下大佬,我ucosii里 进入停机模式之前,
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  /* 关闭滴答定时器 */  
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
  执行这两句,断点打在PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);这句,发现停不到这里,是什么情况?
然后机器灯灭了 应该是进入了停机模式,在用串口中断唤醒后,又调到了PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);这句的断点,搞不懂程序是怎么跑的
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2019-6-25 11:10:00 | 显示全部楼层
hope0116 发表于 2019-6-25 11:07
问下大佬,我ucosii里 进入停机模式之前,
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  /* 关闭滴答定时 ...

关闭滴答定时器可以跑到  后面这句在进入stop模式前跑不到
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2019-6-25 17:41:33 | 显示全部楼层
SystemInit();
                        BSP_SetSysClock();  
                        BSP_RCC_Configuration();
                        SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* 使能滴答定时器 */
                                       
                        BSP_GPIO_Config();
                        BLE_LINK_STATUS = 1;
                        ENTER_STOP_flag = 0;
                        systick_init(); //初始化外部晶振@hp
                        BSP_USART_Init();

                        BSP_ADCS_Init();          

                        BSP_DMA_Init();
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2019-6-25 17:42:35 | 显示全部楼层
hope0116 发表于 2019-6-25 17:41
SystemInit();
                        BSP_SetSysClock();  
                        BSP_RCC_Configuration();

在进入停止模式后 ,中断进去初始化时钟和串口相关配置,但是配置后发现ucos  ii 没跑起来,请问什么情况?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2019-6-26 09:28:36 | 显示全部楼层
hope0116 发表于 2019-6-25 17:42
在进入停止模式后 ,中断进去初始化时钟和串口相关配置,但是配置后发现ucos  ii 没跑起来,请问什么情况 ...

不清楚你这个是咋回事。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 14:32 , Processed in 0.326165 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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