硬汉嵌入式论坛

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

[μCOS-II] ucos睡眠例程开关GPIO时钟是否有问题?

[复制链接]

5

主题

10

回帖

25

积分

新手上路

积分
25
发表于 2016-1-4 12:13:59 | 显示全部楼层 |阅读模式
在ucos睡眠例程中,
空闲任务钩子函数记录睡眠时间以及关闭GPIO时钟,这是可以理解的
void  App_TaskIdleHook (void)
{
       OS_CPU_SR  cpu_sr;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
                                                 RCC_APB2Periph_GPIOB |
                                                 RCC_APB2Periph_GPIOC |
                                                 RCC_APB2Periph_GPIOD |
                                                 RCC_APB2Periph_AFIO, DISABLE);
   
    /* 记录进入休眠状态前时间,下面的功能用于调试,不要用于项目 */
    OS_ENTER_CRITICAL();                     
    g_uiStart = CPU_TS_TmrRd();
    OS_EXIT_CRITICAL();
}

但是在节拍钩子函数,如果当前为空闲任务可以记录睡眠时间,但是不应该判断空闲任务为当前任务(if(OSPrioCur == OS_TASK_IDLE_PRIO))条件下开启时钟吧。如果当前Tick节拍是从空闲任务调度到用户任务,那么时钟岂不是打开不了?
void  App_TimeTickHook (void)
{

    /* 如果之前运行的是空闲任务 */
    if(OSPrioCur == OS_TASK_IDLE_PRIO)
       {

        g_uiEnd = CPU_TS_TmrRd();
   
        /* 累计休眠的时间,单位时钟周期个数 */
        g_ullCntTotal += (g_uiEnd - g_uiStart);
        
        /* 记录当前系统时间,单位1ms */
        g_uiCnt = OSTimeGet();

        /* 重新开启时钟 */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
                                                 RCC_APB2Periph_GPIOB |
                                                 RCC_APB2Periph_GPIOC |
                                                 RCC_APB2Periph_GPIOD |
                                                 RCC_APB2Periph_AFIO, ENABLE);
         }
}

求大神指点,谢谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-1-5 11:09:37 | 显示全部楼层
不好意思啊,楼主,现在才顾上回复你。
----------
这里仅仅是调试目的,用户切勿在这个工程里面再添加其它的中断去唤醒,默认都是滴答定时器在唤醒。
加上这个为了防止每次进入滴答定时器都重复的进行测试和开启时钟,我们仅仅在之前的任务是空闲任务时才开启。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 16:38 , Processed in 0.258793 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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