6015|8

253

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

看代码时冒出个想法 [复制链接]

本帖最后由 白手梦想家 于 2016-5-29 10:46 编辑

看到raw_tick.c里面的

更新系统滴答。uCOS里面是遍历一遍等待中的所有进程,将其cnt--。这里好像也是遍历??
我想如果改成下面方案,速度可能更快?
下面这是等待节点:
wait_node<——>wait_node<——>wait_node<——>wait_node
每个节点保存的是比上一个节点多的时间。
比如,对应上面:
100ms(绝对值)<——>20ms(相对值)<——>20ms(相对值)<——>20ms(相对值)
即:
100ms(绝对值)<——>120ms(绝对值)<——>140ms(绝对值)<——>160ms(绝对值)
每次更新只需要对第一个等待节点减1,如果为0,去掉头节点,并检查第二个节点,如果第二个节点为0,同样操作,再检查第三个节点,直到不为0。

问题是,作为参考的第一个延时节点的绝对值怎么知道?在链表建立第一个节点的时候就保存其延时的绝对值,每从头部去掉一个节点,更新此绝对值。每添加一个节点,以头节点的绝对值作为参考,求出相对延时时间,放到等待节点中,并进行根据大小,插入到相应的位置,插入排序貌似挺快的。

最后的问题是如果这样,貌似插入的时间就不确定了?就不算实时了?

勿喷。




最新回复

本帖最后由 jorya_txj 于 2016-6-8 11:17 编辑 raw-os 2.x 采取的是hash 的做法,插入的时候是找到头结点然后插入。tick中断的时候基本是o(1),一步到位找到。 更重要的是raw-os的tick中断处理可以是外面的任务处理的,不会阻塞其他更高优先级的任务和中断。   详情 回复 发表于 2016-6-8 11:03
点赞 关注

回复
举报

25

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

点评

新手水贴,后面加n个空格,只要够30字就能加2个经验一个芯币,我会乱说  详情 回复 发表于 2016-5-28 14:56
 
 

回复

253

帖子

1

TA的资源

一粒金砂(高级)

板凳
 

新手水贴,后面加n个空格,只要够30字就能加2个经验一个芯币,我会乱说

点评

这里水经验没有必要。不过论坛好像有个专门的水群  详情 回复 发表于 2016-5-28 17:32
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

4
 
白手梦想家 发表于 2016-5-28 14:56
新手水贴,后面加n个空格,只要够30字就能加2个经验一个芯币,我会乱说

这里水经验没有必要。不过论坛好像有个专门的水群
 
 
 

回复

420

帖子

0

TA的资源

纯净的硅(初级)

5
 
因为系统中超时的任务是有限的,所以插入排序计算量是非常有限的,基本时间可以忽略,不影响实时性。

点评

版主我想问问这个方案是不是可行呢  详情 回复 发表于 2016-5-29 10:48
 
 
 

回复

253

帖子

1

TA的资源

一粒金砂(高级)

6
 
jorya_txj 发表于 2016-5-28 21:53
因为系统中超时的任务是有限的,所以插入排序计算量是非常有限的,基本时间可以忽略,不影响实时性。

版主我想问问这个方案是不是可行呢
 
 
 

回复

32

帖子

0

TA的资源

一粒金砂(中级)

7
 
你的思路大方向是对的,你可以看看rtthread里面的是如何处理的,我的MsgOS和rtthread思路差不多实现细节上有些区别。其实延时任务少的话怎么处理都行。

点评

实时嘛,尽量提高效率嘛,我看了uC/OS-II和raw-os的,都差不多是遍历,这方面是不是应该特别优化一下,毕竟时钟滴答是很频繁的,而且越快越好  详情 回复 发表于 2016-6-7 20:08
 
 
 

回复

253

帖子

1

TA的资源

一粒金砂(高级)

8
 
科技猎人 发表于 2016-6-6 17:21
你的思路大方向是对的,你可以看看rtthread里面的是如何处理的,我的MsgOS和rtthread思路差不多实现细节上 ...

实时嘛,尽量提高效率嘛,我看了uC/OS-II和raw-os的,都差不多是遍历,这方面是不是应该特别优化一下,毕竟时钟滴答是很频繁的,而且越快越好,rtthread只看了一点,还请指教

点评

raw-os 2.x 采取的是hash 的做法,插入的时候是找到头结点然后插入。tick中断的时候基本是o(1),一步到位找到。  详情 回复 发表于 2016-6-8 11:03
 
 
 

回复

420

帖子

0

TA的资源

纯净的硅(初级)

9
 
本帖最后由 jorya_txj 于 2016-6-8 11:17 编辑
白手梦想家 发表于 2016-6-7 20:08
实时嘛,尽量提高效率嘛,我看了uC/OS-II和raw-os的,都差不多是遍历,这方面是不是应该特别优化一下,毕 ...

raw-os 2.x 采取的是hash 的做法,插入的时候是找到头结点然后插入。tick中断的时候基本是o(1),一步到位找到。
更重要的是raw-os的tick中断处理可以是外面的任务处理的,不会阻塞其他更高优先级的任务和中断。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表