|
本帖最后由 白手梦想家 于 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。
问题是,作为参考的第一个延时节点的绝对值怎么知道?在链表建立第一个节点的时候就保存其延时的绝对值,每从头部去掉一个节点,更新此绝对值。每添加一个节点,以头节点的绝对值作为参考,求出相对延时时间,放到等待节点中,并进行根据大小,插入到相应的位置,插入排序貌似挺快的。
最后的问题是如果这样,貌似插入的时间就不确定了?就不算实时了?
勿喷。
|
|