readme.txt

来自「一个多任务调度器」· 文本 代码 · 共 68 行

TXT
68
字号

程序名称:	时间触发多任务调度器

程序版本:	SCH-AVR-V1.00

程序说明:	1、此程序适合在ATMEGA48芯片上使用。
		2、如有什么问题请到论坛上发表,同时也会在论坛提供更高版本的程序。

www.iccavr.com
22:45 2006-7-13

delay:是任务等待多少时间后运行。

period:是任务周期性运行的运行周期,比如你要控制一个指示灯让它一闪一闪的、
周期性的运行某项任务时,这个就派上大用场了。用了这个功能后你再发现它的直正好用,
从起你会喜欢上这个东西。

谢谢斑竹及时解答!但是还是有点不明白!

delay:就是任务两次执行的间隔时间,通过调整这个参数缩小
(任务执行次数就多,密度大,实时性高)或扩大任务的间隔时间。应该起到了周期的作用。

而period就是任务的周期参数,两个参数意义上有些重叠,让人有点蒙!

但是通过在板子上试验不同参数的结果反应,period是负责周期的参数,
改动后等的闪烁频率变化很大,

delay却不明显,显然我对参数delay的理解还是不对的,还请您指教!


delay:是等待多长时间后执行,它是一个变量一直在自减,减到零了就没有了,它的使命就完成了。

period:才是周期,当上面delay数值用完后从这里提取值。

就拿一年365天来说吧:delay只是一个倒计时,元月一号告诉它365天后过年,
它就开始一天一天减了,当减完了它就是零了。一个变量为零的时候不再有任何意义了。

period才是标准,它存放着一年有多少天,
元月一号存放到delay的值就是从period这里获取的,如果你把period改为100,
那么一年就只有100天了。

delay只要一减到0就会从period这里取一个新的值。
例如:要一个任务专管指示灯,20mS后开始运行,然后1000mS运行一次。

delay = 20;period = 1000;



谢谢了!大概明白了,delay就是切换到任务后延时多长时间开始执行,
period就是周期参数,但是问题是切换到任务就直接开始执行吧,
为什么要延时呢?如果要立即执行delay设置为0就可以了吧?



我正在看这本书呢,作者写的非常简单易懂,而且调度器设计的也很精妙。
不过AFA发上来的合作式调度器有很大的局限性。
boylinxing已经指出主要部分了,我接着详细说一下。

1)从void SCH_Update(void) 这个刷新函数来看,如果任务执行时间超过刷新时间的话很
肯可能在下次刷新时把等待执行的任务当成是已经执行完的任务而“忽略”掉了。
所以首先AFA上传合作式调度器适合任务执行时间远小于调度刷新间隔的情况下。

2)为什么限制中断的使用呢?原因其实挺简单的,
因为如果有其他中断在执行的话调度器的时标就会因为其他中断的执行
时间而打乱造成调度时间延长。虽然在中断次数不多的情况下这个延时可以忽略,
但是多次调用后将会找到误差累计,如果其他中断函数修改调度器的话更是可
能会出现无法预计的错误使系统变得非常不稳定。

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?