硬汉嵌入式论坛

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

[μCOS-II] ucosii空闲任务钩子函数App_TaskIdleHook睡眠之后是不是只有唤醒才能执行?

[复制链接]

5

主题

10

回帖

25

积分

新手上路

积分
25
发表于 2015-12-31 16:09:33 | 显示全部楼层 |阅读模式
static u16 cnt = 0;
void  App_TaskIdleHook (void)
{
   cnt++;
    __WFI;
}

在空闲任务钩子函数增加睡眠指令,发现cnt++计数反而要比系统时间OSTime要大。如果不加睡眠这是正常情况,可是增加睡眠,需要等待Tick中断唤醒进入空闲任务才能加1,这样时间应该小于系统时间才对。求大神讲解~~
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2015-12-31 16:39:30 | 显示全部楼层
睡眠模式任何中断都可以唤醒的,比如任务级任务切换,使能PendSV中断,不光滴答定时器才可以。

另外你的测试有问题啊,怎么可以在空闲任务里面做加一计数测试呢,这个空闲任务是不按照系统时钟节拍进行运行的。
更重要的是,你的计数变量是16位变量,很快就溢出了,问题较多。。。
回复

使用道具 举报

5

主题

10

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2016-1-2 15:52:48 | 显示全部楼层

回 eric2013 的帖子

eric2013:睡眠模式任何中断都可以唤醒的,比如任务级任务切换,使能PendSV中断,不光滴答定时器才可以。

另外你的测试有问题啊,怎么可以在空闲任务里面做加一计数测试呢,这个空闲任务是不按照系统时钟节拍进行运行的。
更重要的是,你的计数变量是16位变量,很快就溢出了,问题较多。。 .. (2015-12-31 16:39)
睡眠模式不是CPU内核停止了吗,还能任务切换吗?是不是Tick唤醒后再任务切换?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-1-2 15:58:15 | 显示全部楼层

回 君莫笑 的帖子

君莫笑:睡眠模式不是CPU内核停止了吗,还能任务切换吗? (2016-01-02 15:52)
sorry,例子举得不恰当。。。 信口来了这么一个。[s:142]
主要是我不太明白你的用意,就是这么做的目的是什么,这样我就可以更好的回复你。
回复

使用道具 举报

5

主题

10

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2016-1-2 16:49:08 | 显示全部楼层

回 eric2013 的帖子

eric2013:sorry,例子举得不恰当。。。 信口来了这么一个。[s:142]
主要是我不太明白你的用意,就是这么做的目的是什么,这样我就可以更好的回复你。
 (2016-01-02 15:58) 
我其实想计算空闲任务的时间,采用   
OS_ENTER_CRITICAL();                     
g_uiStart = CPU_TS_TmrRd();
OS_EXIT_CRITICAL();
可以正确记录时间,然后我尝试采用一个变量计数,想看看MCU睡眠之后空闲任务是如何执行的,如果是每个Tick唤醒然后PendSV使能切换任务,那么这个变量+1应该比系统时间OSTime小才对。但实际测试反而相反,所以对睡眠之后空闲任务是怎么执行比较困惑。求版主解惑,谢谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-1-2 17:27:33 | 显示全部楼层

回 君莫笑 的帖子

君莫笑:我其实想计算空闲任务的时间,采用    
OS_ENTER_CRITICAL();                    
g_uiStart = CPU_TS_TmrRd();
OS_EXIT_CRITICAL();
....... (2016-01-02 16:49) 
情况是这样的,滴答定时器唤醒睡眠模式后,会在滴答定时器里面判断是否有高优先级的任务就绪,如果有高优先级任务就绪,会使能PendSV中断,退出滴答定时器中断去执行PendSV中断,在这个中断实现任务切换,如果没有高优先级任务就绪,退出后会继续执行空闲任务。

不过你的空闲任务里面加上了休眠指令,那么在不考虑溢出等问题的情况下这个计数值的确是应该比较OSTime小,其实也就是按照系统节拍运行了,你查下你的工程里面是不是还有其它的周期中断在跑。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 23:18 , Processed in 0.178384 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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