OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14432|回复: 53

关于ucosii任务挂起、恢复和调度器上锁、解锁的疑惑,求大神指点指点啊

[复制链接]

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-6-5 08:58:46 | 显示全部楼层 |阅读模式
5金钱

最佳答案

查看完整内容[请看2#楼]

应该是80个M,而不是79个M,真的是尽信书则不如无书啊,再次证明实践是检验真理的唯一标准
合肥-文盲
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-5 08:58:47 | 显示全部楼层



应该是80个M,而不是79个M,真的是尽信书则不如无书啊,再次证明实践是检验真理的唯一标准

UCOSII任务调度实验LOCK.zip

4.01 MB, 下载次数: 43547

合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-5 16:06:54 | 显示全部楼层
为何只有人浏览  没人回复呢  哎
合肥-文盲
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-5 23:07:09 | 显示全部楼层
我来帮顶。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-6 15:32:31 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,指点指点啊
合肥-文盲
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
发表于 2015-6-6 17:40:36 | 显示全部楼层
回复【4楼】合肥-文盲:
---------------------------------
上面那句话的意思应该是存在一个被挂起的任务,而且这个任务不是等待任务  然后才能进行下面的清除挂起记录,调用OSSched()进行任务调度吧
如果是等待任务的话,就必须等待相应的内核对象吧,一直阻塞在这
电子人生!
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
发表于 2015-6-6 18:36:26 | 显示全部楼层
我看了下任哲的那本书,
MyTask   任务优先级是0   打印M延迟3秒
YouTask   任务优先级是1   打印Y 延迟1秒

假设一个时间
0秒时     M的优先级高  M先打印  然后M进入3S延时,延时会导致任务调度切换,所以Y执行打印Y,
1秒过去  M延时还需2S    Y延时1S时间到  打印 Y
2秒           ......            同上              打印Y                     所以出现MYYY 
3秒    M延时时间到      再次出现M       依次往下           

定义个变量 S  表示 MYYY的 次数   也就是 0-2秒  S =1     3--5秒  S=2       6--8秒  S=3      9-11秒  S=4
当Y出现次数到达20个 此时 M任务应该延时在  S=7  当中 也就是    第七次出现MYYY     也就上上面从0秒开始的 18-20秒中 (我是从0秒开始的)
18秒 打印MY    19 打印Y    此时Y到达20个 挂起M了  此时M应该已经延时了2S了   还差1S的时候被刮起了(记住这点)

然后到Y=40的时候  恢复了任务M     任务M恢复的时候    M还在延时等待中 ,所以Y会先打印一次  然后1S过去  才会打印M  所以那个41个Y是这么来的
也就是说M在延时2S的时候被挂起   恢复后会继续   上次的状态  继续1S的延时
电子人生!
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
发表于 2015-6-6 18:52:09 | 显示全部楼层
回复【4楼】合肥-文盲:
---------------------------------
至于你下面那个问题   
第一排M有25个 第二排有51个    加起来就   76个了  你箭头指的就是第80个M
当M执行到80次时,先给调度器解锁的,然后执行OSTimeDlyHMSM延时的, M进入3S延时 ,释放CPU且能够实现任务调度切换,
这个时候处于就绪状态的Y就能执行了  所以你会看到YYY   
之所以是三个Y  是由于在M进入延时一瞬间(时间很短)   Y任务就能执行了  瞬间打印Y(这里很重要),
1S后 ,M还需2S延时  这时Y的延时1秒到了  在打印Y
2S后 ,M还需1S延时   这时Y的延时1秒又到了  在打印Y       所以这里是MYYY

3S后,M延时时间到,这个时候Y的延时时间也到了,但是M的优先级高于Y,所以先打印M   


最近正在学习UCOS-III  哈哈  兴趣来了解答一下   感觉应该是对的  哈哈
电子人生!
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-8 08:42:43 | 显示全部楼层
回复【5楼】翱翔云端的鸟:
---------------------------------
首先,谢谢你啊,但是如果一个任务正在延时阻塞状态(已经开始延时,但是延时时间还没结束,假如还剩下1S的延时时间),这个时候再调用OSTASKSUSPEND()函数挂起这个任务,是不是在1S内是不能解除任务的阻塞状态的,只有超过1S之后才能调用OSTASKRESUME()解除该任务的阻塞,否则解除无效,一直阻塞?
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-8 08:51:51 | 显示全部楼层
回复【6楼】翱翔云端的鸟:
---------------------------------
这个经过你的分析,我明白了,但是对应上面任务解挂的流程图(OSTASKRESUME()),那里说的那个等待时间为0,和这个延时还剩下1S怎么解释呢?它俩是同一个东西吗?如果是同一个东西,就解释不过去啊,还有1S延时,也就是等待时间不为0,这个时候是不能解挂的啊,所以,这点还不是很理解,就是那个等待时间,和任务的延时剩余时间有什么关系
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-8 09:00:53 | 显示全部楼层
回复【7楼】翱翔云端的鸟:
---------------------------------
我最近也在学习ucosii,多多交流啊,我仔细数了下,第一排是27个Y(第一排的Y=3*9),M有24个(51-3*9=24), 第二排有51个    加起来就75个了  我箭头指的就是第79个M ,还有解除任务调度器的锁之后,这时候会引发一次调度,发现M任务的优先级高(这时候M还没进行延时呢),所以接着if(time == 80)的后面继续执行,应该显示一个M,接着才能执行到M任务的3S延时呢,此时才执行Y任务呢,不应该是这样的吗
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-9 14:22:12 | 显示全部楼层
回复【5楼】翱翔云端的鸟:
---------------------------------
他说的是等待时间==0啊,所以这个等待时间是指延时时间吗?
合肥-文盲
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
发表于 2015-6-10 13:19:11 | 显示全部楼层
回复【11楼】合肥-文盲:
---------------------------------
我回去在看看!上班在!
电子人生!
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 00:10:59 | 显示全部楼层
回复【12楼】翱翔云端的鸟:
---------------------------------
那个任务等待时间,我查了书,指的就是任务的延时剩余时间,哪怕任务被挂起了,这个延时时间还是在走的,只不过延时时间到,不会自动恢复为就绪状态而已,需要调用OSTaskResume(prio);函数才会恢复为就绪状态,所以你说的那个恢复后再延时1S的说法好像是错的,还有最下面那幅图的我箭头指的M是第79个,不是第80个,现在第一个概念我通过看后面的章节弄懂了,他这个运行结果感觉和源码对不上的,我没找到任哲的源码,原子光盘里面的那个无法make,放到C盘,并且有BC3.1精简版软件都不行
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 00:14:30 | 显示全部楼层
回复【12楼】翱翔云端的鸟:
---------------------------------
可以使用任哲的源码了,原来是BC软件的文件夹命名和makefile文件里面的对不上的原因
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 00:29:13 | 显示全部楼层
回复【12楼】翱翔云端的鸟:
---------------------------------
运行了一遍,还是41个Y,卧槽  无语了   明天再原子的开发板上运行看看
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 00:40:41 | 显示全部楼层
回复【12楼】翱翔云端的鸟:
---------------------------------
但是又有区别,开始显示的时候是MY    MY之间几乎无间隔                                 time==40,之后显示的顺序变成YM    YM之间几乎无间隔
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 00:42:27 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
希望原子哥能给解答下疑惑啊,原子哥对ucosii那么熟悉了,指点指点迷津吧,
合肥-文盲
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-11 00:55:07 | 显示全部楼层
回复【17楼】合肥-文盲:
---------------------------------
我也就会用而已,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 13:58:19 | 显示全部楼层
  虽然你给的程序很不完整,但我也勉强理解了意思。
 首先ucosii任务状态最简单划分就三种
  


任务进入挂起态目前我用到的有三种
1.主动放弃cpu  像OSTimeDlyHMSM(0, 0, 0, 100);放弃cpu 100ms
2.信号量请求    信号量为0
3.邮箱请求       邮箱为空
这三种情况下会挂起,第一个例子就是主动放弃cpu的情况,当从放弃那一刻开始设定值就开始自减,当减到0,即等待时间为0,就把任务从挂起态置为就绪态(加入就绪表),但是此时并不代表任务就执行,只有当该任务是就绪表里任务是优先级最高的时候,才把任务从就绪态置为运行态(这就是任务调度)。
    这个0在ucosii里面是表现的是节拍数ticks,时间 = 节拍数 * 系统心跳时间,所以说等待时间为0也是一样的
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 14:03:04 | 显示全部楼层
回复【19楼】zc123:
---------------------------------
谢谢      谢谢   明白等待时间为何物了   也明白就算任务被OSTaskSuspend(prio);了,这个等待时间在每个时钟节拍到的时候也会自减的
合肥-文盲
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:05:49 | 显示全部楼层
第二个问题:
 1. 第一个字符M是MyTask输出的,与计数time无关,第二个字符Y的输出才是第一次YourTask的输出,此时Time才开始加1,所以第41个是Y才是对的。
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 14:06:10 | 显示全部楼层



通过自己在原子哥的mini板上面验证,应该是40个Y接着就会显示M的,任哲的那个例子的结果和程序是对不上的

UCOSII任务调度实验.zip

4.01 MB, 下载次数: 231

合肥-文盲
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:12:00 | 显示全部楼层
为什么我还觉得应该是第41个,难道是我算的有问题,我在想想
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:15:19 | 显示全部楼层
回复【22楼】合肥-文盲:
---------------------------------
我清楚了,上面我没想明白,应该是MyTask放弃CPU后YourTask立刻执行(从输出来相当于s来说几乎没时延),我想差了,中间加了1s
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 14:26:25 | 显示全部楼层
回复【21楼】zc123:
---------------------------------
刚刚实验证明是40个Y是才是对的     41个Y是错误的
合肥-文盲
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:27:17 | 显示全部楼层
第三题是对的
 你要注意那个time+=1 在 time == 80的上面
也就是第79次调用的时候,此时调度器就已经解锁了,还有任务切换的时间一般来说可以忽略不计的,当调度器解锁,MyTask放弃的时候,一直就绪态的YouTask就进入了运行态
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 14:27:26 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
原子哥技术那么牛逼了   还是那么谦虚    佩服佩服
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 14:28:29 | 显示全部楼层
回复【27楼】zc123:
---------------------------------
呵呵   实践是检验整理的唯一标准啊    应该是80个M的   而不是79个
合肥-文盲
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:30:40 | 显示全部楼层
回复【27楼】zc123:
---------------------------------
我要疯了
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 14:35:52 | 显示全部楼层
回复【30楼】zc123:
---------------------------------
为什么疯???
合肥-文盲
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:38:02 | 显示全部楼层
回复【31楼】合肥-文盲:
---------------------------------
我实在想不明白为什么80啊,明显调用79次时调度器解锁(time+1)在上面,也就是当79个M输出后任务放弃cpu,这时YourTask应该执行啊,我想不通错在哪里
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 14:39:20 | 显示全部楼层
回复【30楼】zc123:
---------------------------------
仔细想想就明白了   抓住显示和判断的关系
合肥-文盲
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:41:19 | 显示全部楼层
回复【31楼】合肥-文盲:
---------------------------------
懂了,我是按照time初始值是1算的,所以调用79次就解锁了,如果是0的话,80次才解锁
暴汗
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:43:40 | 显示全部楼层
回复【33楼】%E5%90%88%E8%82%A5-%E6%96%87%E7%9B%B2:
---------------------------------
没认真审题的后果,80次,我就看你的输出自己想的,没看题目里说了,第一个是40次,第二个是80次,题目都限制了我还纠结这没意义的东西
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 14:47:36 | 显示全部楼层
回复【35楼】zc123:
---------------------------------
呵呵  是的    弄明白了     就可以继续往下看了   你ucosII用的熟吗?有没有学什么gui或者linux系统啊?我打算尽快把ucosII学会使用,买了本STemwin的书,准备今年把这两个东西整的会使用
合肥-文盲
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:49:45 | 显示全部楼层
回复【36楼】合肥-文盲:
---------------------------------
一般般,会用些,但是内部机制不怎么懂,移植过,不过是参考别人的说明书
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 15:06:02 | 显示全部楼层
回复【36楼】合肥-文盲:
---------------------------------
有问题可以互相交流,我最近主要在学习lwip,ucos-ii 我就过了一下,没有很认真的学习
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 15:22:20 | 显示全部楼层
回复【38楼】zc123:
---------------------------------
多交流  才能理解的更深
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 15:23:29 | 显示全部楼层
回复【38楼】zc123:
---------------------------------
是准备用WIFI模块还是GSM模块
合肥-文盲
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 15:27:57 | 显示全部楼层
回复【40楼】合肥-文盲:
---------------------------------
不是的,是移植LWIP+UcosII,利用开发板搭嵌入式服务器,电脑直接通过网口访问访问开发板里网页,已经ping通了。现在在处理http层数据,好麻烦啊
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 15:38:24 | 显示全部楼层
回复【41楼】zc123:
---------------------------------
牛逼   原子好像也弄过啊
合肥-文盲
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 15:41:45 | 显示全部楼层
回复【42楼】合肥-文盲:
---------------------------------
其实都是根据例程改的,自己写写不出来的,看了lwip都看了2个月也才感觉就是入门,太痛苦了
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-11 15:45:40 | 显示全部楼层
回复【43楼】zc123:
---------------------------------
入门之后就好,接着就是慢慢研究了
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-17 09:58:55 | 显示全部楼层
以下都是假设这个被挂起的任务的优先级是最高优先级的任务   
1.又发现一个问题,在等待时间不为0的时候,这个时候如果对挂起的任务解挂(即调用OSTaskResume(prio)),此时还是会把“任务控制块的挂起记录”清除的,当等待时间为0的时候,任务会自动直接运行。
2.当任务被挂起的时候(即调用了OSTaskSuspend(prio),还没有调用OSTaskResume(prio))  ,这个时候即延时时间到了(即等待时间为0),也不会运行该任务,必须解挂该任务后,该任务才会运行。
合肥-文盲
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-5-28
在线时间
1 小时
发表于 2015-6-26 08:04:14 | 显示全部楼层
回复【2楼】合肥-文盲:
---------------------------------
对第1张图的理解:

    首先,会操作变量“OSTCBCur->OSTCBDly” 的函数有  OSXXXPend()、 OSTimeDly() ;        注:XXX代表各种EVENT 或者 Flag , 比如:Sem、Mutex;

    第1张图讲的是函数 OSTaskResume(),让我们看下源代码:

        ...                /*  任务是存在的 */

        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) {     /* 任务必须是被挂起的*/
        ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND;                         /* 去除挂起  */
        if (ptcb->OSTCBStat == OS_STAT_RDY) {                                        /* 从这一句可以排除OSXXXPend()的情况*/
            if (ptcb->OSTCBDly == 0) {                                                         /* 所以这一句应该是指OSTimeDly()的情况*/
                OSRdyGrp               |= ptcb->OSTCBBitY;                                /* Yes, Make task ready to run           */
                OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
                OS_EXIT_CRITICAL();
                if (OSRunning == OS_TRUE) {
                    OS_Sched();                                                                        /* Find new highest priority task        */
                }
            }

          希望对你有用!
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-5-28
在线时间
1 小时
发表于 2015-6-26 08:07:24 | 显示全部楼层
回复【37楼】zc123:
---------------------------------
    要学内部原理可以看看 任哲 的《嵌入式实时操作系统μCOS-II原理及应用》,从名字就知道他是讲原理的。
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-26 12:32:31 | 显示全部楼层
回复【46楼】lrl:
---------------------------------
回复【47楼】lrl:
---------------------------------
这些截图都是任哲的《嵌入式实时操作系统μCOS-II原理及应用》里面的内容
合肥-文盲
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-5-28
在线时间
1 小时
发表于 2015-6-26 13:43:48 | 显示全部楼层
回复【48楼】合肥-文盲:
---------------------------------
    恩,我知道,看我的中文注释了吗?
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-6-29 08:49:57 | 显示全部楼层
回复【49楼】lrl:
---------------------------------
这个函数我明白,但是那个延时函数,我在延时函数里面没找到判断任务挂起之后,没解除挂起之前,哪怕延时到了,也不运行任务的条件判断。
合肥-文盲
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 16:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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