lzzasd 发表于 2023-12-9 22:25:35

你对这个时间片轮询程序理解有错    这个程序我都用了很长时间了    程序简单逻辑没有问题
这个任务定义为   任务1: 0 500 500 lamp1       任务1: 0 500 500lamp2
定时器中断后会对第2个数500进行减1计算   注意是2个任务同时减    当第2数个500减到0时就会在任务的第1个数的0置成1   代表任务就绪可以执行了    同时将第3个数500传递给第2个数   代表下一个任务是500周期
这时候就有个问题了      你2个任务同时都会减到0代表你2个任务都就绪了   运行第一个任务对IO置0就1个时钟的时间都不到1us   就运行第二个任务了把你这个置0的IO又给置1了    中间就隔了个任务切换时间大概2us
所以你根本很难看到他已经切换了   然后输出就根据任务及中断的延迟而是乱的
解决方案1:不要2个任务控制同一个IO   例如: lamp1    P12=~P12      lamp2    P13=~P13    再观察一目了然
解决方案2:加延时阻塞函数          例如: lamp1    P12=0delay_ms(500)      P12=1delay_ms(500)      
这个时间片轮询程序的缺点:任务内延时都是阻塞,无消息传递,任务优先级---众生平等,任务时效----看其他任务是不是能按时间完成,任务无法插队,BUG直接卡住....................
但同时优点也非常明显:非常简单,非常可靠,满足大多数场合需求,

WHX 发表于 2023-12-10 08:38:04

lzzasd 发表于 2023-12-9 22:25
你对这个时间片轮询程序理解有错    这个程序我都用了很长时间了    程序简单逻辑没有问题
这个任务定义为...

嗯嗯,谢谢{:smile:}{:4_250:}
页: 1 [2]
查看完整版本: 库函数的分时调度问题